<?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>94448</bug_id>
          
          <creation_ts>2012-08-20 00:24:00 -0700</creation_ts>
          <short_desc>Array accesses should remember what kind of array they are predicted to access</short_desc>
          <delta_ts>2012-08-22 20:38:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>91933</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>699276</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-20 00:24:00 -0700</bug_when>
    <thetext>It used to be that array accesses would know what kind of array they&apos;re accessing based on the predictions of their children. But that&apos;s no longer the case, since part of the decision process of what kind of array access to compile comes from the ArrayProfile. Hence, array accesses should remember what the ArrayProfile said rather than relying entirely on the predictions of their children.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699278</commentid>
    <comment_count>1</comment_count>
      <attachid>159347</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-20 00:29:38 -0700</bug_when>
    <thetext>Created attachment 159347
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701281</commentid>
    <comment_count>2</comment_count>
      <attachid>159797</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-21 16:32:22 -0700</bug_when>
    <thetext>Created attachment 159797
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701500</commentid>
    <comment_count>3</comment_count>
      <attachid>159845</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-21 19:38:15 -0700</bug_when>
    <thetext>Created attachment 159845
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701507</commentid>
    <comment_count>4</comment_count>
      <attachid>159846</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-21 19:46:21 -0700</bug_when>
    <thetext>Created attachment 159846
almost there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701533</commentid>
    <comment_count>5</comment_count>
      <attachid>159851</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-21 20:23:13 -0700</bug_when>
    <thetext>Created attachment 159851
getting there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701649</commentid>
    <comment_count>6</comment_count>
      <attachid>159875</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-22 00:51:26 -0700</bug_when>
    <thetext>Created attachment 159875
it runs simple things

Still more testing to go.  And there&apos;s also 32-bit to worry about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702346</commentid>
    <comment_count>7</comment_count>
      <attachid>160010</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-22 14:22:29 -0700</bug_when>
    <thetext>Created attachment 160010
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702485</commentid>
    <comment_count>8</comment_count>
      <attachid>160026</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-22 15:57:29 -0700</bug_when>
    <thetext>Created attachment 160026
seems to work

Seems at least perf-neutral and it runs non-trivial workloads, but I&apos;m still testing it more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702541</commentid>
    <comment_count>9</comment_count>
      <attachid>160041</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-22 17:23:30 -0700</bug_when>
    <thetext>Created attachment 160041
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702598</commentid>
    <comment_count>10</comment_count>
      <attachid>160041</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-08-22 18:14:20 -0700</bug_when>
    <thetext>Comment on attachment 160041
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:151
&gt; +                    for (unsigned n = 2; n--;)

why? - please to be commenting.

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:328
&gt; +        case PutByVal: {

case PutByValAlias:

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:344
&gt;                  if (m_graph[child3].shouldSpeculateInteger())

if (!condition) fixDoubleEdge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702662</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-22 20:38:43 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/126387</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159347</attachid>
            <date>2012-08-20 00:29:38 -0700</date>
            <delta_ts>2012-08-21 16:32:22 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>arraymode_patch_1.diff</filename>
            <type>text/plain</type>
            <size>38739</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2MDAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDEyLTA4LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgYWNjZXNzZXMgc2hvdWxkIHJlbWVtYmVyIHdoYXQga2luZCBvZiBhcnJheSB0aGV5IGFy
ZSBwcmVkaWN0ZWQgdG8gYWNjZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NDQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6OnJl
ZmluZUFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToK
KyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdBcnJh
eU1vZGUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNT
RVN0b3JhZ2UpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omdl
dEFycmF5TW9kZVdpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0QXJyYXlNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FycmF5TW9kZSk6CisgICAg
ICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjphcnJheU1vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OnNldEFycmF5TW9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVU
eXBlLmg6CisgICAgICAgIChERkcpOgorCiAyMDEyLTA4LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic3RyYWN0
IHZhbHVlcyBhbmQgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludHMgc2hvdWxkIGJlIHJh
dGlvbmFsaXplZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjU5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTgsNjUgKzg1OCw2
NSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICAKICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKSB7
CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIFVuZGVj
aWRlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFs
c2U7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpIHx8ICghbm9kZS5jaGlsZDMo
KSAmJiAhbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkp
IHsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CisgICAgICAgIGNhc2UgR2VuZXJpYzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkgeworICAg
ICAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNTdHJpbmcpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0
cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcmd1bWVudHM6CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQXJndW1lbnRzKTsKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpID09IFNwZWNTdHJpbmcpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNTdHJpbmcpOworICAgICAgICBjYXNlIEpTQXJyYXk6CisgICAgICAgIGNhc2Ug
SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZl
IG1vcmUgY29uc2VydmF0aXZlIGhhbmRsaW5nIG9mIHRoZSBvdXQtb2YtYm91bmRzCisgICAgICAg
ICAgICAvLyBjYXNlLgorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7CisgICAgICAgIGNhc2UgSW50OEFy
cmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhB
cnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7CisgICAgICAgIGNhc2UgSW50MTZB
cnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQx
NkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBJbnQz
MkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0lu
dDMyQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgeworICAgICAgICBjYXNlIFVp
bnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
VWludDhBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkgeworICAgICAg
ICBjYXNlIFVpbnQ4Q2xhbXBlZEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MTZB
cnJheSgpKSB7CisgICAgICAgIGNhc2UgVWludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVp
bnQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBVaW50MzJBcnJheToKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
aWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtOTI0LDMzICs5MjQsMjkgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEZs
b2F0MzJBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNGbG9hdDMyQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0Rv
dWJsZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgeworICAgICAg
ICBjYXNlIEZsb2F0NjRBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAg
IGNhc2UgUHV0QnlWYWw6Ci0gICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgIGNhc2UgUHV0QnlW
YWxTYWZlOiB7CisgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKLQogICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIp
OworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgfQorCiAgICAg
ICAgICAgICAKICAgICAgICAgaWYgKCFtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpIHx8ICFt
X2dyYXBoW2NoaWxkMl0ucHJlZGljdGlvbigpKSB7CiAgICAgICAgICAgICBtX2lzVmFsaWQgPSBm
YWxzZTsKQEAgLTE0NDYsNjUgKzE0NDIsNDUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsgLy8gVGhl
IHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsgLy8gTGllcywgYnV0IHRoaXMgaXMgKGFsbW9zdCkgYWx3YXlzIGZvbGxvd2VkIGJ5IEdl
dEJ5VmFsLCB3aGljaCBkb2VzIGV4aXQuIFNvIG5vIHBvaW50IGluIHRyeWluZyB0byBiZSBtb3Jl
IHByZWNpc2UuCi0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1
bGF0ZUFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnByZWRpY3Rpb24oKSA9PSBTcGVjU3RyaW5nKSB7CisgICAgICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIFN0cmluZzoKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRl
SW50OEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBKU0FycmF5OgorICAgICAgICBjYXNlIEpTQXJy
YXlPdXRPZkJvdW5kczoKKyAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhp
bmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAorICAgICAgICAgICAg
Ly8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3Qg
aGF2ZSB0aGF0LCB5ZXQuCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnQ4QXJyYXk6
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFycmF5
KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hv
dWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7CisgICAgICAgIGNhc2UgSW50MTZBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxk
U3BlY3VsYXRlSW50MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2UgSW50MzJBcnJheToKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMkFycmF5KTsKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3Bl
Y3VsYXRlVWludDhBcnJheSgpKSB7CisgICAgICAgIGNhc2UgVWludDhBcnJheToKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlVWludDhDbGFtcGVkQXJyYXkoKSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXko
KSkgeworICAgICAgICBjYXNlIFVpbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQz
MkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBVaW50MzJBcnJheToKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0
MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2UgRmxvYXQzMkFycmF5OgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUZs
b2F0NjRBcnJheSgpKSB7CisgICAgICAgIGNhc2UgRmxvYXQ2NEFycmF5OgogICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0NjRBcnJheSk7Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAg
ICAgICBicmVhazsgCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR0FycmF5TW9kZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5TW9kZXMgbW9kZXMsIGJvb2wg
bWFrZVNhZmUpCit7CisgICAgLy8gRklYTUU6IHdlIG1heSB3YW50IHRvIGFkZCBzb21lIHBvbHlt
b3JwaGljIHN1cHBvcnQgaW4gdGhlIGZ1dHVyZS4gVGhhdCdzIHdoeSB0aGlzCisgICAgLy8gaXMg
YSBzd2l0Y2ggc3RhdGVtZW50IHJpZ2h0IG5vdy4KKyAgICAKKyAgICBzd2l0Y2ggKG1vZGVzKSB7
CisgICAgY2FzZSAwOgorICAgICAgICByZXR1cm4gQXJyYXk6OkZvcmNlRXhpdDsKKyAgICBjYXNl
IElzSlNBcnJheToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kcyA6IEFycmF5OjpKU0FycmF5OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBV
bmRlY2lkZWQ7CisgICAgfQorfQorCitBcnJheTo6TW9kZSByZWZpbmVBcnJheU1vZGUoQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBpbmRl
eCkKK3sKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihpbmRleCkgfHwgIWlzQ2VsbFNwZWN1
bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OkdlbmVyaWM7CisgICAgCisgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgY2Fz
ZSBBcnJheTo6SlNBcnJheToKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Cisg
ICAgICAgIHJldHVybiBhcnJheU1vZGU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICBy
ZXR1cm4gQXJyYXk6OlN0cmluZzsKKyAgICAKKyAgICBpZiAoaXNBcmd1bWVudHNTcGVjdWxhdGlv
bihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpBcmd1bWVudHM7CisgICAgCisgICAgaWYg
KGlzSW50OEFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6SW50
OEFycmF5OworICAgIAorICAgIGlmIChpc0ludDE2QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAg
ICAgICAgcmV0dXJuIEFycmF5OjpJbnQxNkFycmF5OworICAgIAorICAgIGlmIChpc0ludDMyQXJy
YXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpJbnQzMkFycmF5Owor
ICAgIAorICAgIGlmIChpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0
dXJuIEFycmF5OjpVaW50OEFycmF5OworICAgIAorICAgIGlmIChpc1VpbnQxNkFycmF5U3BlY3Vs
YXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6VWludDE2QXJyYXk7CisgICAgCisg
ICAgaWYgKGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFy
cmF5OjpVaW50MzJBcnJheTsKKyAgICAKKyAgICBpZiAoaXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlv
bihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpGbG9hdDMyQXJyYXk7CisgICAgCisgICAg
aWYgKGlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJh
eTo6RmxvYXQ2NEFycmF5OworICAgIAorICAgIHJldHVybiBBcnJheTo6R2VuZXJpYzsKK30KKwor
Ym9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEFycmF5OjpNb2Rl
IGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBjYXNlIEFycmF5
OjpTdHJpbmc6CisgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlw
ZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgY2FzZSBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gdmFsdWUubV9zdHJ1Y3R1cmUuaGFz
U2luZ2xldG9uKCkKKyAgICAgICAgICAgICYmIHZhbHVlLm1fc3RydWN0dXJlLnNpbmdsZXRvbigp
LT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOworICAgICAgICAKKyAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZh
bHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAg
ICAgcmV0dXJuIGlzSW50OEFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAg
CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIGlzSW50MTZBcnJh
eVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6Oklu
dDMyQXJyYXk6CisgICAgICAgIHJldHVybiBpc0ludDMyQXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICBy
ZXR1cm4gaXNVaW50OEFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBpc1VpbnQxNkFycmF5
U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6VWlu
dDMyQXJyYXk6CisgICAgICAgIHJldHVybiBpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24odmFsdWUu
bV90eXBlKTsKKworICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJu
IGlzRmxvYXQzMkFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKworICAgIGNhc2UgQXJy
YXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuIGlzRmxvYXQ2NEFycmF5U3BlY3VsYXRp
b24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1v
ZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpVbmRlY2lk
ZWQ6CisgICAgICAgIHJldHVybiAiVW5kZWNpZGVkIjsKKyAgICBjYXNlIEFycmF5OjpHZW5lcmlj
OgorICAgICAgICByZXR1cm4gIkdlbmVyaWMiOworICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAg
ICAgICAgcmV0dXJuICJTdHJpbmciOworICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAg
IHJldHVybiAiSlNBcnJheSI7CisgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgor
ICAgICAgICByZXR1cm4gIkpTQXJyYXlPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgorICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CisgICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgorICAgICAgICByZXR1cm4gIkludDhBcnJheSI7CisgICAgY2FzZSBBcnJheTo6SW50
MTZBcnJheToKKyAgICAgICAgcmV0dXJuICJJbnQxNkFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpJ
bnQzMkFycmF5OgorICAgICAgICByZXR1cm4gIkludDMyQXJyYXkiOworICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiAiVWludDhBcnJheSI7CisgICAgY2FzZSBBcnJh
eTo6VWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiAiVWludDE2QXJyYXkiOworICAgIGNhc2Ug
QXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAgICByZXR1cm4gIlVpbnQzMkFycmF5IjsKKyAgICBj
YXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgIHJldHVybiAiRmxvYXQzMkFycmF5IjsK
KyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiAiRmxvYXQ2NEFy
cmF5IjsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBCZXR0ZXIgdG8gcmV0dXJuIHNvbWV0aGlu
ZyB0aGVuIGl0IGlzIHRvIGNyYXNoLiBSZW1lbWJlciwgdGhpcyBtZXRob2QKKyAgICAgICAgLy8g
aXMgYmVpbmcgY2FsbGVkIGZyb20gb3VyIG1haW4gZGlhZ25vc3RpYyB0b29sLCB0aGUgSVIgZHVt
cGVyLiBJdCdzIGxpa2UKKyAgICAgICAgLy8gYSBzdGFjayB0cmFjZS4gU28gaWYgd2UgZ2V0IGhl
cmUgdGhlbiBwcm9iYWJseSBzb21ldGhpbmcgaGFzIGFscmVhZHkKKyAgICAgICAgLy8gZ29uZSB3
cm9uZy4KKyAgICAgICAgcmV0dXJuICJVbmtub3duISI7CisgICAgfQorfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR0FycmF5TW9kZV9oCisjZGVmaW5lIERGR0FycmF5TW9kZV9oCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
QXJyYXlQcm9maWxlLmgiCisjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBYnN0cmFjdFZhbHVlOworCisvLyBVc2Ug
YSBuYW1lc3BhY2UgKyBlbnVtIGluc3RlYWQgb2YgZW51bSBhbG9uZSB0byBhdm9pZCB0aGUgbmFt
ZXNwYWNlIGNvbGxpc2lvbgorLy8gdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIsIHNpbmNlIHdl
IHNheSB0aGluZ3MgbGlrZSAiSW50OEFycmF5IiBhbmQgIkpTQXJyYXkiCisvLyBpbiBsb3RzIG9m
IG90aGVyIHBsYWNlcywgdG8gbWVhbiBzdWJ0bHkgZGlmZmVyZW50IHRoaW5ncy4KK25hbWVzcGFj
ZSBBcnJheSB7CitlbnVtIE1vZGUgeworICAgIFVuZGVjaWRlZCwgLy8gSW1wbGllcyB0aGF0IHdl
IG5lZWQgcHJlZGljdGlvbnMgdG8gZGVjaWRlLiBXZSB3aWxsIG5ldmVyIGdldCB0byB0aGUgYmFj
a2VuZCBpbiB0aGlzIG1vZGUuCisgICAgRm9yY2VFeGl0LCAvLyBJbXBsaWVzIHRoYXQgd2UgaGF2
ZSBubyBpZGVhIGhvdyB0byBleGVjdXRlIHRoaXMgb3BlcmF0aW9uLCBzbyB3ZSBzaG91bGQganVz
dCBnaXZlIHVwLgorICAgIEdlbmVyaWMsCisgICAgU3RyaW5nLAorICAgIEpTQXJyYXksCisgICAg
SlNBcnJheU91dE9mQm91bmRzLAorICAgIEFyZ3VtZW50cywKKyAgICBJbnQ4QXJyYXksCisgICAg
SW50MTZBcnJheSwKKyAgICBJbnQzMkFycmF5LAorICAgIFVpbnQ4QXJyYXksCisgICAgVWludDE2
QXJyYXksCisgICAgVWludDMyQXJyYXksCisgICAgRmxvYXQzMkFycmF5LAorICAgIEZsb2F0NjRB
cnJheQorfTsKK30gLy8gbmFtZXNwYWNlIEFycmF5CisKK0FycmF5OjpNb2RlIGZyb21PYnNlcnZl
ZChBcnJheU1vZGVzIG1vZGVzLCBib29sIG1ha2VTYWZlKTsKKworQXJyYXk6Ok1vZGUgcmVmaW5l
QXJyYXlNb2RlKEFycmF5OjpNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlw
ZSBpbmRleCk7CisKK2Jvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmLCBBcnJh
eTo6TW9kZSk7CisKK2NvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CisKK2lu
bGluZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3
aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBVbmRlY2lkZWQ6CisgICAgY2FzZSBGb3JjZUV4
aXQ6CisgICAgY2FzZSBHZW5lcmljOgorICAgIGNhc2UgQXJndW1lbnRzOgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR0FycmF5TW9kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjU5NzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIkRGR0FycmF5TW9kZS5oIgogI2luY2x1ZGUgIkRGR0J5dGVDb2RlQ2FjaGUuaCIKICNpbmNs
dWRlICJERkdDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCkBAIC04
MTYsNiArODE3LDM0IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICByZXR1cm4gZ2V0UHJlZGlj
dGlvbihtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOwogICAgIH0KKyAg
ICAKKyAgICBBcnJheTo6TW9kZSBnZXRBcnJheU1vZGVXaXRob3V0T1NSRXhpdChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgICAgICBwcm9m
aWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKHByb2ZpbGUtPmhh
c0RlZmluaXRlU3RydWN0dXJlKCkpCisgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0
dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1
Y3R1cmUoKSkpLCBiYXNlKTsKKyAgICAgICAgCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCJTbG93IGNhc2UgcHJvZmlsZSBmb3IgYmMj
JXU6ICV1XG4iLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1f
Y291bnRlcik7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGJvb2wgbWFrZVNhZmUgPQorICAg
ICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93
Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE91dE9mQm91bmRzKTsKKyAg
ICAgICAgCisgICAgICAgIHJldHVybiBmcm9tT2JzZXJ2ZWQocHJvZmlsZS0+b2JzZXJ2ZWRBcnJh
eU1vZGVzKCksIG1ha2VTYWZlKTsKKyAgICB9CisgICAgCisgICAgQXJyYXk6Ok1vZGUgZ2V0QXJy
YXlNb2RlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBB
cnJheTo6TW9kZSByZXN1bHQgPSBnZXRBcnJheU1vZGVXaXRob3V0T1NSRXhpdChjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBBcnJheTo6Rm9yY2VF
eGl0KQorICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKICAgICBOb2RlSW5kZXggbWFrZVNhZmUoTm9k
ZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBAIC0xNTQ4LDggKzE1NzcsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAogICAgICAgICBpbnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBh
cmd1bWVudFRvT3BlcmFuZCgxKTsKLSAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBhZGRUb0dy
YXBoKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50
MzIoaW5kZXhPcGVyYW5kKSk7Ci0gICAgICAgIE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3Jh
cGgoU3RyaW5nQ2hhckNvZGVBdCwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9w
ZXJhbmQpLCBzdG9yYWdlKTsKKyAgICAgICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFw
aChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8oQXJyYXk6OlN0cmluZyksIGdldCh0aGlzT3BlcmFu
ZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CiAKICAgICAgICAgaWYgKHVzZXNSZXN1bHQp
CiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUpOwpAQCAtMTU2NSw4ICsx
NTkzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGludCBpbmRleE9wZXJhbmQgPSByZWdpc3Rl
ck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpOwotICAgICAgICBOb2RlSW5kZXggc3RvcmFn
ZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgZ2V0KHRoaXNPcGVyYW5k
KSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKLSAgICAgICAgTm9kZUluZGV4IGNoYXJDb2Rl
ID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQXQsIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIo
aW5kZXhPcGVyYW5kKSwgc3RvcmFnZSk7CisgICAgICAgIE5vZGVJbmRleCBjaGFyQ29kZSA9IGFk
ZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBPcEluZm8oQXJyYXk6OlN0cmluZyksIGdldCh0aGlzT3Bl
cmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CiAKICAgICAgICAgaWYgKHVzZXNSZXN1
bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUpOwpAQCAtMjE0Nyw0
MSArMjE3NCwyNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDogewogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAg
QXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbik7
CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKLSAgICAgICAgICAg
IHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwotICAgICAgICAgICAgaWYgKHBy
b2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHByb2ZpbGUt
PmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcHJv
cGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBiYXNl
LCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggZ2V0QnlWYWwgPSBhZGRUb0dyYXBo
KEdldEJ5VmFsLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSwgcHJvcGVydHks
IHByb3BlcnR5U3RvcmFnZSk7CisgICAgICAgICAgICBOb2RlSW5kZXggZ2V0QnlWYWwgPSBhZGRU
b0dyYXBoKEdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBi
YXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgZ2V0QnlWYWwpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYnlf
dmFsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogeworICAgICAg
ICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IHBy
b3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAg
ICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7Ci0gICAgICAgICAgICBwcm9maWxlLT5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChwcm9maWxlLT5oYXNE
ZWZpbml0ZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1
Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwcm9maWxlLT5leHBlY3RlZFN0
cnVjdHVyZSgpKSksIGJhc2UpOwotCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZygiU2xvdyBjYXNlIHByb2ZpbGUgZm9yIGJjIyV1
OiAldVxuIiwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2Nv
dW50ZXIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIGJvb2wgbWFrZVNhZmUgPQotICAgICAgICAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Y291bGRUYWtlU2xvd0Nh
c2UobV9jdXJyZW50SW5kZXgpCi0gICAgICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3V0T2ZCb3VuZHMpOwot
ICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KHZhbHVlKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBtYWtlU2FmZSA/
IFB1dEJ5VmFsU2FmZSA6IFB1dEJ5VmFsLCBPcEluZm8oMCksIE9wSW5mbygwKSk7CisgICAgICAg
ICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgUHV0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUp
LCBPcEluZm8oMCkpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfdmFsKTsK
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAxMjU5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw5NyArNzQsODcgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBHZXRCeUlk
OiB7CisgICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm5vZGU7CisgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
LnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo
Y29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2Jh
bERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBib29sIGlzQXJyYXkgPSBpc0FycmF5U3BlY3VsYXRpb24obV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgYm9vbCBpc0FyZ3VtZW50cyA9
IGlzQXJndW1lbnRzU3BlY3VsYXRpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCkpOwotICAgICAgICAgICAgYm9vbCBpc1N0cmluZyA9IGlzU3RyaW5nU3BlY3VsYXRpb24obV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgYm9vbCBpc0lu
dDhBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5
KCk7Ci0gICAgICAgICAgICBib29sIGlzSW50MTZBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc0ludDMy
QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXko
KTsKLSAgICAgICAgICAgIGJvb2wgaXNVaW50OEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlzVWludDhD
bGFtcGVkQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4
Q2xhbXBlZEFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlzVWludDE2QXJyYXkgPSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCk7Ci0gICAgICAgICAg
ICBib29sIGlzVWludDMyQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1
bGF0ZVVpbnQzMkFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlzRmxvYXQzMkFycmF5ID0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKTsKLSAgICAg
ICAgICAgIGJvb2wgaXNGbG9hdDY0QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpOwotICAgICAgICAgICAgaWYgKCFpc0FycmF5ICYmICFp
c0FyZ3VtZW50cyAmJiAhaXNTdHJpbmcgJiYgIWlzSW50OEFycmF5ICYmICFpc0ludDE2QXJyYXkg
JiYgIWlzSW50MzJBcnJheSAmJiAhaXNVaW50OEFycmF5ICYmICFpc1VpbnQ4Q2xhbXBlZEFycmF5
ICYmICFpc1VpbnQxNkFycmF5ICYmICFpc1VpbnQzMkFycmF5ICYmICFpc0Zsb2F0MzJBcnJheSAm
JiAhaXNGbG9hdDY0QXJyYXkpCisgICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZp
ZXIobm9kZVB0ci0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlO
YW1lcy0+bGVuZ3RoKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0jaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxv
ZygiICBAJXUgLT4gJXMiLCBtX2NvbXBpbGVJbmRleCwgaXNBcnJheSA/ICJHZXRBcnJheUxlbmd0
aCIgOiAiR2V0U3RyaW5nTGVuZ3RoIik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChpc0FycmF5
KSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRBcnJheUxlbmd0aCk7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKG5vZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAg
ICAgICAgICAgIG5vZGUuY2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAg
ICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IAotICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUuY29kZU9yaWdpbiktPmdl
dEFycmF5UHJvZmlsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoIWFycmF5UHJvZmlsZSkKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJv
ZmlsZSA9IAorICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9k
ZVB0ci0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKKyAgICAgICAgICAgICAgICAgICAg
bm9kZVB0ci0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIEFycmF5OjpN
b2RlIGFycmF5TW9kZSA9IEFycmF5OjpVbmRlY2lkZWQ7CisgICAgICAgICAgICBpZiAoYXJyYXlQ
cm9maWxlKSB7CiAgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoIWFycmF5UHJvZmlsZS0+aGFzRGVmaW5p
dGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgbV9ncmFwaC5yZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgTm9kZSBjaGVj
a1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgbm9kZS5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUucmVm
KCk7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dy
YXBoLnNpemUoKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChjaGVja1N0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJsb2Nr
LCBjaGVja1N0cnVjdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxl
LT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
cmVmKG5vZGVQdHItPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVja1N0
cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBu
b2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tTdHJ1
Y3R1cmUucmVmKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGVja1N0cnVjdHVy
ZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBw
ZW5kKGNoZWNrU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
YXBwZW5kKG1faW5kZXhJbkJsb2NrLCBjaGVja1N0cnVjdHVyZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gZnJvbU9ic2VydmVkKGFycmF5UHJv
ZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCksIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGFycmF5TW9kZSA9IHJlZmluZUFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICBhcnJh
eU1vZGUsCisgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCksCisgICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigp
KTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpVbmRlY2lkZWQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAg
ICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBub2RlUHRyLT5zZXRPcChHZXRBcnJh
eUxlbmd0aCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2Rl
TXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAgICBub2RlUHRyLT5jbGVhckZsYWdzKE5vZGVN
dXN0R2VuZXJhdGUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlz
QXJndW1lbnRzKQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0QXJndW1lbnRzTGVuZ3Ro
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKQotICAgICAgICAgICAgICAgIG5vZGUu
c2V0T3AoR2V0U3RyaW5nTGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50OEFycmF5
KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0SW50OEFycmF5TGVuZ3RoKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGlzSW50MTZBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9w
KEdldEludDE2QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQzMkFycmF5
KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0SW50MzJBcnJheUxlbmd0aCk7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChpc1VpbnQ4QXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRP
cChHZXRVaW50OEFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzVWludDhDbGFt
cGVkQXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRVaW50OENsYW1wZWRBcnJh
eUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1VpbnQxNkFycmF5KQotICAgICAgICAg
ICAgICAgIG5vZGUuc2V0T3AoR2V0VWludDE2QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgZWxz
ZSBpZiAoaXNVaW50MzJBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldFVpbnQz
MkFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzRmxvYXQzMkFycmF5KQotICAg
ICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0RmxvYXQzMkFycmF5TGVuZ3RoKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGlzRmxvYXQ2NEFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3Ao
R2V0RmxvYXQ2NEFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIC8vIE5vIGxvbmdlciBNdXN0R2Vu
ZXJhdGUKLSAgICAgICAgICAgIEFTU0VSVChub2RlLmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRl
KTsKLSAgICAgICAgICAgIG5vZGUuY2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAg
ICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0g
ICAgICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpCi0gICAg
ICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpCi0gICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRT
cGVjdWxhdGVBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZh
dWx0RmxhZ3MoTm9wKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGls
ZDEobm9kZSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQyKG5v
ZGUpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMyhub2RlKTsK
LSAgICAgICAgICAgICAgICBub2RlLnNldFJlZkNvdW50KDApOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgcmVmaW5lQXJyYXlN
b2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLAorICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAg
ICAgIC8vIFByZWRpY3Rpb25zIHNob3VsZCBvbmx5IGJlY29tZSBtb3JlLCByYXRoZXIgdGhhbiBs
ZXNzLCByZWZpbmVkLiBIZW5jZQorICAgICAgICAgICAgLy8gaWYgd2Ugd2VyZSBldmVyIGFibGUg
dG8gQ1NFIHRoZSBzdG9yYWdlIHBvaW50ZXIgZm9yIHRoaXMgb3BlcmF0aW9uLAorICAgICAgICAg
ICAgLy8gdGhlbiB3ZSBzaG91bGQgYWx3YXlzIGNvbnRpbnVlIHRvIGJlIGFibGUgdG8gZG8gc28u
CisgICAgICAgICAgICBBU1NFUlQoY2FuQ1NFU3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAg
ICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7
Ci0gICAgICAgICAgICBpZiAoISFub2RlLmNoaWxkMygpICYmIG1fZ3JhcGhbbm9kZS5jaGlsZDMo
KV0ub3AoKSA9PSBOb3ApCi0gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9
IEVkZ2UoKTsKKyAgICAgICAgICAgIG5vZGUuc2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAg
IHJlZmluZUFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKSwK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCks
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigp
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjYW5DU0VTdG9yYWdlKG5vZGUuYXJy
YXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0p
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGUuY2hpbGQzKCldLm9wKCkg
PT0gR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgdGhlIG5vZGUgcmVm
ZXJlbmNlIGFmdGVyIHdlIGRvIHRoZSBhcHBlbmQuCisgICAgICAgICAgICAgICAgICAgIE5vZGUg
Z2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIG5vZGUuY29kZU9yaWdpbiwgT3BJbmZvKG5vZGUuYXJyYXlN
b2RlKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCBu
b2RlLmNoaWxkMigpLmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBFZGdlKGdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2VJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyBTZWUgYWJvdmUuIENvbnRpbnVlZCBmaXh1cCBvZiB0aGUgZ3JhcGggc2hvdWxkIG5vdCBy
ZWdyZXNzIG91ciBhYmlsaXR5CisgICAgICAgICAgICAgICAgLy8gdG8gc3BlY3VsYXRlLgorICAg
ICAgICAgICAgICAgIEFTU0VSVCghbV9ncmFwaFtub2RlLmNoaWxkMygpXSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxMjU5NzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Niw0
OCArNDg2LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUmIG5v
ZGUpCiAgICAgewotICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICBjYXNlIFB1
dEJ5VmFsOiB7Ci0gICAgICAgICAgICBpZiAoIWF0KHZhckFyZ0NoaWxkKG5vZGUsIDEpKS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGF0KHZhckFyZ0NoaWxkKG5vZGUs
IDApKS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZU11dGFibGVB
cnJheVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBQdXRCeVZhbFNhZmU6IHsKLSAgICAgICAgICAgIGlmICghYXQodmFyQXJnQ2hp
bGQobm9kZSwgMSkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gYXQo
dmFyQXJnQ2hpbGQobm9kZSwgMCkpLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlmICghaXNB
Y3Rpb25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGlzQXJyYXlTcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczogewotICAgICAgICAgICAgaWYgKCFhdCh2YXJBcmdDaGlsZChub2RlLCAxKSkuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhdCh2YXJBcmdDaGlsZChub2Rl
LCAwKSkucHJlZGljdGlvbigpOwotICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVNdXRhYmxl
QXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgICAgIGlmICghYXQobm9kZS5jaGlsZDIo
KSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhdChub2RlLmNoaWxk
MSgpKS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZUFycmF5U3Bl
Y3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHN3aXRj
aCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEdlbmVyaWM6CisgICAgICAgIGNh
c2UgSlNBcnJheU91dE9mQm91bmRzOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTI1OTcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcxOCw2ICs3MTgsMzQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcElu
Zm87CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzQXJyYXlNb2RlKCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6
CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgUHV0QnlWYWw6Cisg
ICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAg
ICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFycmF5OjpNb2RlIGFycmF5
TW9kZSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzQXJyYXlNb2RlKCkpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk6Ok1vZGU+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzZXRBcnJheU1vZGUoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc0FycmF5TW9kZSgpKTsKKyAgICAgICAgbV9vcEluZm8gPSBhcnJheU1vZGU7
CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzVmlydHVhbFJlZ2lzdGVyKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTI1
OTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTMsNyArMTEzLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogICAgIC8qIG9wY29kZXMgdXNlIFZhckFyZ3MgYmVhdXNlIHRoZXkgbWF5IGhhdmUgdXAgdG8g
NCBjaGlsZHJlbi4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgbWFjcm8oUHV0QnlWYWwsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNaWdodENsb2JiZXIpIFwKLSAg
ICBtYWNybyhQdXRCeVZhbFNhZmUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8
IE5vZGVNaWdodENsb2JiZXIpIFwKICAgICBtYWNybyhQdXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgbWFjcm8o
R2V0QnlJZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dv
cmxkKSBcCiAgICAgbWFjcm8oR2V0QnlJZEZsdXNoLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKQEAgLTE0MiwxNyArMTQxLDYgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2RlUmVz
dWx0SlMpIFwKICAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKEdldEFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRB
cmd1bWVudHNMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKEdldFN0cmluZ0xl
bmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0SW50OEFycmF5TGVuZ3RoLCBO
b2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRJbnQxNkFycmF5TGVuZ3RoLCBOb2RlUmVz
dWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRJbnQzMkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50
MzIpIFwKLSAgICBtYWNybyhHZXRVaW50OEFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwK
LSAgICBtYWNybyhHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBc
Ci0gICAgbWFjcm8oR2V0VWludDE2QXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAg
IG1hY3JvKEdldFVpbnQzMkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNy
byhHZXRGbG9hdDMyQXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKEdl
dEZsb2F0NjRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oR2V0U2Nv
cGVDaGFpbiwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0U2NvcGVkVmFyLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0U2NvcGVkVmFyLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159797</attachid>
            <date>2012-08-21 16:32:22 -0700</date>
            <delta_ts>2012-08-21 19:38:15 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>arraymode_patch_2.diff</filename>
            <type>text/plain</type>
            <size>74583</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2MjEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDEyLTA4LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgYWNjZXNzZXMgc2hvdWxkIHJlbWVtYmVyIHdoYXQga2luZCBvZiBhcnJheSB0aGV5IGFy
ZSBwcmVkaWN0ZWQgdG8gYWNjZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NDQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6OnJl
ZmluZUFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToK
KyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdBcnJh
eU1vZGUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNT
RVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVGb3JQdXQpOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9kZVdpdGhvdXRPU1JFeGl0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJyYXlNb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVw
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc0FycmF5TW9kZSk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjphcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldEFy
cmF5TW9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBl
ZEFycmF5RGVzY3JpcHRvcik6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKToKKwogMjAxMi0wOC0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgRml4IGJyb2tlbiBub24tSklUIGJ1aWxkLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjU5NzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NTgsNjUgKzg1OCw2NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24o
KSB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1v
ZGUoKSkgeworICAgICAgICBjYXNlIFVuZGVjaWRlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9yY2VFeGl0Ogog
ICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpIHx8ICghbm9kZS5jaGlsZDMoKSAmJiAhbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5z
aG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkpIHsKKyAgICAgICAgY2FzZSBHZW5lcmljOgogICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRT
cGVjdWxhdGVBcmd1bWVudHMoKSkgeworICAgICAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBBcmd1bWVudHM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjQXJndW1lbnRzKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFr
ZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpID09IFNwZWNTdHJpbmcpIHsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAgICAgICBj
YXNlIEpTQXJyYXk6CisgICAgICAgIGNhc2UgSlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIG1vcmUgY29uc2VydmF0aXZlIGhhbmRsaW5nIG9m
IHRoZSBvdXQtb2YtYm91bmRzCisgICAgICAgICAgICAvLyBjYXNlLgorICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDhBcnJh
eSgpKSB7CisgICAgICAgIGNhc2UgSW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJh
eSgpKSB7CisgICAgICAgIGNhc2UgSW50MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQzMkFy
cmF5KCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4
QXJyYXkoKSkgeworICAgICAgICBjYXNlIFVpbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWlu
dDhDbGFtcGVkQXJyYXkoKSkgeworICAgICAgICBjYXNlIFVpbnQ4Q2xhbXBlZEFycmF5OgogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFy
cmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7CisgICAgICAgIGNhc2UgVWludDE2
QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWlu
dDE2QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBV
aW50MzJBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNVaW50MzJBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQpAQCAtOTI0LDU1ICs5MjUsNDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMy
QXJyYXkoKSkgeworICAgICAgICBjYXNlIEZsb2F0MzJBcnJheToKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOwogICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVGbG9hdDY0QXJyYXkoKSkgeworICAgICAgICBjYXNlIEZsb2F0NjRBcnJheToKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgY2FzZSBQdXRC
eVZhbEFsaWFzOgotICAgIGNhc2UgUHV0QnlWYWxTYWZlOiB7CisgICAgY2FzZSBQdXRCeVZhbEFs
aWFzOiB7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLQogICAgICAgICBFZGdlIGNo
aWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQy
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgCi0gICAgICAgIGlmICgh
bV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rp
b24oKSkgeworICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSkpIHsK
KyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1ZhbGlkID0g
ZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fZ3Jh
cGhbY2hpbGQyXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgICAgICAgICAgfHwgbV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50
cygpCi0jZW5kaWYKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgQVNTRVJUKG5vZGUub3Ao
KSA9PSBQdXRCeVZhbCB8fCBub2RlLm9wKCkgPT0gUHV0QnlWYWxTYWZlKTsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmln
aW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKKyAgICAgICAg
Y2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIo
U3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJv
dW5kczoKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOworICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkg
eworICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC05ODAsOCArOTczLDcgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0
ZUludDE2QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7CiAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKQEAgLTk4OSw4ICs5ODEsNyBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxk
MV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQzMkFy
cmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpA
QCAtOTk4LDggKzk4OSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmls
dGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKKyAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5m
aWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRl
cihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpCkBAIC0xMDA3LDggKzk5Nyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50
OENsYW1wZWRBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5
OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJy
YXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBA
IC0xMDE2LDggKzEwMDUsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKSkgeworICAg
ICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQx
KS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtMTAyNSw4ICsxMDEzLDcgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0
ZVVpbnQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7CiAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAo
bV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKQEAgLTEwMzQsMjMgKzEw
MjEsMjAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051
bWJlcik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFw
aFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkZsb2F0MzJBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIo
U3BlY0Zsb2F0MzJBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hp
bGQxXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDY0QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNG
bG9hdDY0QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsU2FmZSkK
LSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtMTM0Niw2OSArMTMzMCw4
MiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdldEFyZ3VtZW50c0xlbmd0aDoKLSAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjQXJndW1lbnRzKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
SW50MzIpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAg
ICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCghaXNTdHJpbmdTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFy
cmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Cisg
ICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQXJndW1lbnRzKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzSW50
OEFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoIWlzSW50MTZBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjSW50MTZBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJh
eToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNJbnQzMkFycmF5U3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1Vp
bnQ4QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwor
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQ4Q2xhbXBlZEFycmF5U3BlY3VsYXRpb24oZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQo
IWlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQxNkFy
cmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
YXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNGbG9hdDMy
QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KCFpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjRmxvYXQ2NEFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogCi0gICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCghaXNTdHJpbmdTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAg
ICAgICAgCi0gICAgY2FzZSBHZXRJbnQ4QXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCghaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFycmF5
KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEdldEludDE2QXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCghaXNJbnQxNkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2QXJy
YXkpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR2V0SW50MzJBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KCFpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzJB
cnJheSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRVaW50OEFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNl
dENhbkV4aXQoIWlzVWludDhBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50
OEFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdldFVpbnQ4Q2xhbXBlZEFycmF5TGVuZ3RoOgotICAgICAg
ICBub2RlLnNldENhbkV4aXQoIWlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR2V0VWludDE2QXJy
YXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50MTZBcnJheVNwZWN1bGF0
aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRVaW50
MzJBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQzMkFycmF5U3Bl
Y3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQzMkFycmF5KTsKLSAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdl
dEZsb2F0MzJBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0Zsb2F0MzJB
cnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOwotICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
RmxvYXQ2NEFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsK
LSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0NjRBcnJheSk7
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgIGNhc2UgRm9y
d2FyZENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJs
ZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBwcm90
b3R5cGVzKS4KQEAgLTE0NDYsNjUgKzE0NDMsNDUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsgLy8g
VGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGUuY2hp
bGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCh0cnVlKTsgLy8gTGllcywgYnV0IHRoaXMgaXMgKGFsbW9zdCkgYWx3YXlzIGZvbGxvd2VkIGJ5
IEdldEJ5VmFsLCB3aGljaCBkb2VzIGV4aXQuIFNvIG5vIHBvaW50IGluIHRyeWluZyB0byBiZSBt
b3JlIHByZWNpc2UuCi0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNw
ZWN1bGF0ZUFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnByZWRpY3Rpb24oKSA9PSBTcGVjU3RyaW5nKSB7CisgICAgICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgICAgIC8vIFRo
aXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1heSB3
YW50IHRvIGFkZAorICAgICAgICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUgc3Bl
Y3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkg
eworICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMkFycmF5KTsKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDhB
cnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVp
bnQ4Q2xhbXBlZEFycmF5KCkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsK
KyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjT3RoZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWlu
dDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1
bGF0ZUZsb2F0MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJy
YXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5z
aG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
RmxvYXQ2NEFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgIGJyZWFrOyAKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQo
QXJyYXlNb2RlcyBtb2RlcywgYm9vbCBtYWtlU2FmZSkKK3sKKyAgICAvLyBGSVhNRTogd2UgbWF5
IHdhbnQgdG8gYWRkIHNvbWUgcG9seW1vcnBoaWMgc3VwcG9ydCBpbiB0aGUgZnV0dXJlLiBUaGF0
J3Mgd2h5IHRoaXMKKyAgICAvLyBpcyBhIHN3aXRjaCBzdGF0ZW1lbnQgcmlnaHQgbm93LgorICAg
IAorICAgIHN3aXRjaCAobW9kZXMpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiBBcnJh
eTo6Rm9yY2VFeGl0OworICAgIGNhc2UgSXNKU0FycmF5OgorICAgICAgICByZXR1cm4gbWFrZVNh
ZmUgPyBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzIDogQXJyYXk6OkpTQXJyYXk7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIFVuZGVjaWRlZDsKKyAgICB9Cit9CisKK0FycmF5OjpNb2Rl
IHJlZmluZUFycmF5TW9kZShBcnJheTo6TW9kZSBhcnJheU1vZGUsIFNwZWN1bGF0ZWRUeXBlIGJh
c2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KQoreworICAgIGlmICghYmFzZSB8fCAhaW5kZXgpIHsK
KyAgICAgICAgLy8gVGhlIG9ubHkgY2FzZSBpbiB3aGljaCB0aGVyZSBjYW4gYmUgbm8gcHJlZGlj
dGlvbnMgaXMgaWYgdGhpcyBjb2RlIGhhc24ndAorICAgICAgICAvLyBleGVjdXRlZCwgaW4gd2hp
Y2ggY2FzZSB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IHNldCB0aGlzIHRvIEZvcmNlRXhpdC4KKyAg
ICAgICAgQVNTRVJUKGFycmF5TW9kZSA9PSBBcnJheTo6Rm9yY2VFeGl0KTsKKyAgICAgICAgcmV0
dXJuIEFycmF5OjpGb3JjZUV4aXQ7CisgICAgfQorICAgIAorICAgIGlmICghaXNJbnQzMlNwZWN1
bGF0aW9uKGluZGV4KSB8fCAhaXNDZWxsU3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVy
biBBcnJheTo6R2VuZXJpYzsKKyAgICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgIGNhc2Ug
QXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuIGFycmF5TW9kZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgaWYgKGlzU3RyaW5n
U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6U3RyaW5nOworICAgIAor
ICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJy
YXk6OkFyZ3VtZW50czsKKyAgICAKKyAgICBpZiAoaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihiYXNl
KSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpJbnQ4QXJyYXk7CisgICAgCisgICAgaWYgKGlzSW50
MTZBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OkludDE2QXJy
YXk7CisgICAgCisgICAgaWYgKGlzSW50MzJBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAg
ICByZXR1cm4gQXJyYXk6OkludDMyQXJyYXk7CisgICAgCisgICAgaWYgKGlzVWludDhBcnJheVNw
ZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OlVpbnQ4QXJyYXk7CisgICAg
CisgICAgaWYgKGlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAg
cmV0dXJuIEFycmF5OjpVaW50OENsYW1wZWRBcnJheTsKKyAgICAKKyAgICBpZiAoaXNVaW50MTZB
cnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OlVpbnQxNkFycmF5
OworICAgIAorICAgIGlmIChpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAg
IHJldHVybiBBcnJheTo6VWludDMyQXJyYXk7CisgICAgCisgICAgaWYgKGlzRmxvYXQzMkFycmF5
U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6RmxvYXQzMkFycmF5Owor
ICAgIAorICAgIGlmIChpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICBy
ZXR1cm4gQXJyYXk6OkZsb2F0NjRBcnJheTsKKyAgICAKKyAgICByZXR1cm4gQXJyYXk6OkdlbmVy
aWM7Cit9CisKK2Jvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHZhbHVlLCBB
cnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBj
YXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRp
b24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAg
ICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiB2YWx1ZS5t
X3N0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgdmFsdWUubV9zdHJ1Y3R1
cmUuc2luZ2xldG9uKCktPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm87CisgICAgICAg
IAorICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIGlzQXJndW1lbnRz
U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgorICAgICAgICByZXR1cm4gaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICByZXR1
cm4gaXNJbnQxNkFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIGlzSW50MzJBcnJheVNwZWN1
bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJy
YXk6CisgICAgICAgIHJldHVybiBpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUp
OworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAg
cmV0dXJuIGlzVWludDhBcnJheVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gaXNVaW50MTZBcnJh
eVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVp
bnQzMkFycmF5OgorICAgICAgICByZXR1cm4gaXNVaW50MzJBcnJheVNwZWN1bGF0aW9uKHZhbHVl
Lm1fdHlwZSk7CisKKyAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgIHJldHVy
biBpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisKKyAgICBjYXNlIEFy
cmF5OjpGbG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0
aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpN
b2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBBcnJheTo6VW5kZWNp
ZGVkOgorICAgICAgICByZXR1cm4gIlVuZGVjaWRlZCI7CisgICAgY2FzZSBBcnJheTo6R2VuZXJp
YzoKKyAgICAgICAgcmV0dXJuICJHZW5lcmljIjsKKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6Cisg
ICAgICAgIHJldHVybiAiU3RyaW5nIjsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAg
ICByZXR1cm4gIkpTQXJyYXkiOworICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoK
KyAgICAgICAgcmV0dXJuICJKU0FycmF5T3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czoKKyAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOworICAgIGNhc2UgQXJyYXk6Oklu
dDhBcnJheToKKyAgICAgICAgcmV0dXJuICJJbnQ4QXJyYXkiOworICAgIGNhc2UgQXJyYXk6Oklu
dDE2QXJyYXk6CisgICAgICAgIHJldHVybiAiSW50MTZBcnJheSI7CisgICAgY2FzZSBBcnJheTo6
SW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuICJJbnQzMkFycmF5IjsKKyAgICBjYXNlIEFycmF5
OjpVaW50OEFycmF5OgorICAgICAgICByZXR1cm4gIlVpbnQ4QXJyYXkiOworICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gIlVpbnQxNkFycmF5IjsKKyAgICBjYXNl
IEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuICJVaW50MzJBcnJheSI7CisgICAg
Y2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gIkZsb2F0MzJBcnJheSI7
CisgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICByZXR1cm4gIkZsb2F0NjRB
cnJheSI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gQmV0dGVyIHRvIHJldHVybiBzb21ldGhp
bmcgdGhlbiBpdCBpcyB0byBjcmFzaC4gUmVtZW1iZXIsIHRoaXMgbWV0aG9kCisgICAgICAgIC8v
IGlzIGJlaW5nIGNhbGxlZCBmcm9tIG91ciBtYWluIGRpYWdub3N0aWMgdG9vbCwgdGhlIElSIGR1
bXBlci4gSXQncyBsaWtlCisgICAgICAgIC8vIGEgc3RhY2sgdHJhY2UuIFNvIGlmIHdlIGdldCBo
ZXJlIHRoZW4gcHJvYmFibHkgc29tZXRoaW5nIGhhcyBhbHJlYWR5CisgICAgICAgIC8vIGdvbmUg
d3JvbmcuCisgICAgICAgIHJldHVybiAiVW5rbm93biEiOworICAgIH0KK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHQXJyYXlNb2RlX2gKKyNkZWZpbmUgREZHQXJyYXlNb2RlX2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJBcnJheVByb2ZpbGUuaCIKKyNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFic3RyYWN0VmFsdWU7CisKKy8vIFVz
ZSBhIG5hbWVzcGFjZSArIGVudW0gaW5zdGVhZCBvZiBlbnVtIGFsb25lIHRvIGF2b2lkIHRoZSBu
YW1lc3BhY2UgY29sbGlzaW9uCisvLyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ciwgc2luY2Ug
d2Ugc2F5IHRoaW5ncyBsaWtlICJJbnQ4QXJyYXkiIGFuZCAiSlNBcnJheSIKKy8vIGluIGxvdHMg
b2Ygb3RoZXIgcGxhY2VzLCB0byBtZWFuIHN1YnRseSBkaWZmZXJlbnQgdGhpbmdzLgorbmFtZXNw
YWNlIEFycmF5IHsKK2VudW0gTW9kZSB7CisgICAgVW5kZWNpZGVkLCAvLyBJbXBsaWVzIHRoYXQg
d2UgbmVlZCBwcmVkaWN0aW9ucyB0byBkZWNpZGUuIFdlIHdpbGwgbmV2ZXIgZ2V0IHRvIHRoZSBi
YWNrZW5kIGluIHRoaXMgbW9kZS4KKyAgICBGb3JjZUV4aXQsIC8vIEltcGxpZXMgdGhhdCB3ZSBo
YXZlIG5vIGlkZWEgaG93IHRvIGV4ZWN1dGUgdGhpcyBvcGVyYXRpb24sIHNvIHdlIHNob3VsZCBq
dXN0IGdpdmUgdXAuCisgICAgR2VuZXJpYywKKyAgICBTdHJpbmcsCisgICAgSlNBcnJheSwKKyAg
ICBKU0FycmF5T3V0T2ZCb3VuZHMsCisgICAgQXJndW1lbnRzLAorICAgIEludDhBcnJheSwKKyAg
ICBJbnQxNkFycmF5LAorICAgIEludDMyQXJyYXksCisgICAgVWludDhBcnJheSwKKyAgICBVaW50
MTZBcnJheSwKKyAgICBVaW50MzJBcnJheSwKKyAgICBGbG9hdDMyQXJyYXksCisgICAgRmxvYXQ2
NEFycmF5Cit9OworfSAvLyBuYW1lc3BhY2UgQXJyYXkKKworQXJyYXk6Ok1vZGUgZnJvbU9ic2Vy
dmVkKEFycmF5TW9kZXMgbW9kZXMsIGJvb2wgbWFrZVNhZmUpOworCitBcnJheTo6TW9kZSByZWZp
bmVBcnJheU1vZGUoQXJyYXk6Ok1vZGUsIFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRU
eXBlIGluZGV4KTsKKworYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYsIEFy
cmF5OjpNb2RlKTsKKworY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlKTsKKwor
aW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIFVuZGVjaWRlZDoKKyAgICBjYXNlIEZvcmNl
RXhpdDoKKyAgICBjYXNlIEdlbmVyaWM6CisgICAgY2FzZSBBcmd1bWVudHM6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9
CisKK2lubGluZSBBcnJheTo6TW9kZSBtb2RlRm9yUHV0KEFycmF5OjpNb2RlIGFycmF5TW9kZSkK
K3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAg
ICAgICAgcmV0dXJuIEFycmF5OjpHZW5lcmljOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICByZXR1cm4gQXJyYXk6OkdlbmVyaWM7Cisj
ZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gYXJyYXlNb2RlOworICAgIH0KK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdBcnJheU1vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTI1OTcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNs
dWRlICJERkdBcnJheU1vZGUuaCIKICNpbmNsdWRlICJERkdCeXRlQ29kZUNhY2hlLmgiCiAjaW5j
bHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgpAQCAt
ODE2LDYgKzgxNywzNCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgcmV0dXJuIGdldFByZWRp
Y3Rpb24obV9ncmFwaC5zaXplKCksIG1fY3VycmVudFByb2ZpbGluZ0luZGV4KTsKICAgICB9Cisg
ICAgCisgICAgQXJyYXk6Ok1vZGUgZ2V0QXJyYXlNb2RlV2l0aG91dE9TUkV4aXQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAgICAgcHJv
ZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CisgICAgICAgIGlmIChwcm9maWxlLT5o
YXNEZWZpbml0ZVN0cnVjdHVyZSgpKQorICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVj
dHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHByb2ZpbGUtPmV4cGVjdGVkU3Ry
dWN0dXJlKCkpKSwgYmFzZSk7CisgICAgICAgIAorI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygiU2xvdyBjYXNlIHByb2ZpbGUgZm9yIGJj
IyV1OiAldVxuIiwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5t
X2NvdW50ZXIpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBib29sIG1ha2VTYWZlID0KKyAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Y291bGRUYWtlU2xv
d0Nhc2UobV9jdXJyZW50SW5kZXgpCisgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdXRPZkJvdW5kcyk7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gZnJvbU9ic2VydmVkKHByb2ZpbGUtPm9ic2VydmVkQXJy
YXlNb2RlcygpLCBtYWtlU2FmZSk7CisgICAgfQorICAgIAorICAgIEFycmF5OjpNb2RlIGdldEFy
cmF5TW9kZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAg
QXJyYXk6Ok1vZGUgcmVzdWx0ID0gZ2V0QXJyYXlNb2RlV2l0aG91dE9TUkV4aXQoY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQgPT0gQXJyYXk6OkZvcmNl
RXhpdCkKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCiAgICAgTm9kZUluZGV4IG1ha2VTYWZlKE5v
ZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewpAQCAtMTU0OCw4ICsxNTc3LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKICAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsg
YXJndW1lbnRUb09wZXJhbmQoMSk7Ci0gICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gYWRkVG9H
cmFwaChHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0lu
dDMyKGluZGV4T3BlcmFuZCkpOwotICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRUb0dy
YXBoKFN0cmluZ0NoYXJDb2RlQXQsIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhP
cGVyYW5kKSwgc3RvcmFnZSk7CisgICAgICAgIE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3Jh
cGgoU3RyaW5nQ2hhckNvZGVBdCwgT3BJbmZvKEFycmF5OjpTdHJpbmcpLCBnZXQodGhpc09wZXJh
bmQpLCBnZXRUb0ludDMyKGluZGV4T3BlcmFuZCkpOwogCiAgICAgICAgIGlmICh1c2VzUmVzdWx0
KQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKQEAgLTE1NjUsOCAr
MTU5Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpbnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsKLSAgICAgICAgTm9kZUluZGV4IHN0b3Jh
Z2UgPSBhZGRUb0dyYXBoKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGdldCh0aGlzT3BlcmFu
ZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7Ci0gICAgICAgIE5vZGVJbmRleCBjaGFyQ29k
ZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMy
KGluZGV4T3BlcmFuZCksIHN0b3JhZ2UpOworICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBh
ZGRUb0dyYXBoKFN0cmluZ0NoYXJBdCwgT3BJbmZvKEFycmF5OjpTdHJpbmcpLCBnZXQodGhpc09w
ZXJhbmQpLCBnZXRUb0ludDMyKGluZGV4T3BlcmFuZCkpOwogCiAgICAgICAgIGlmICh1c2VzUmVz
dWx0KQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKQEAgLTIxNDcs
NDEgKzIxNzQsMjYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAg
IEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7Ci0gICAgICAgICAg
ICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChw
cm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwcm9maWxl
LT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICAgICAgTm9kZUluZGV4IHBy
b3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgYmFz
ZSwgcHJvcGVydHkpOwotICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0gYWRkVG9HcmFw
aChHZXRCeVZhbCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHByb3BlcnR5
LCBwcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0gYWRk
VG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwg
YmFzZSwgcHJvcGVydHkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIGdldEJ5VmFsKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5
X3ZhbCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKKyAgICAg
ICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBw
cm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwotICAgICAgICAgICAgcHJvZmlsZS0+
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAocHJvZmlsZS0+aGFz
RGVmaW5pdGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3Ry
dWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHJvZmlsZS0+ZXhwZWN0ZWRT
dHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2coIlNsb3cgY2FzZSBwcm9maWxlIGZvciBiYyMl
dTogJXVcbiIsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9j
b3VudGVyKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBib29sIG1ha2VTYWZlID0KLSAgICAgICAg
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNsb3dD
YXNlKG1fY3VycmVudEluZGV4KQotICAgICAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE91dE9mQm91bmRzKTsK
LSAgICAgICAgICAgIAogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CiAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZCh2YWx1ZSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgbWFrZVNhZmUg
PyBQdXRCeVZhbFNhZmUgOiBQdXRCeVZhbCwgT3BJbmZvKDApLCBPcEluZm8oMCkpOworICAgICAg
ICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2Rl
KSwgT3BJbmZvKDApKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X3ZhbCk7
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkocmV2aXNpb24gMTI1OTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsOTcgKzc0LDg3IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgR2V0QnlJ
ZDogeworICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZub2RlOworICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2dyYXBoW21fY29tcGlsZUluZGV4
XS5wcmVkaWN0aW9uKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYg
KGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9i
YWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgYm9vbCBpc0FycmF5ID0gaXNBcnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGJvb2wgaXNBcmd1bWVudHMg
PSBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpKTsKLSAgICAgICAgICAgIGJvb2wgaXNTdHJpbmcgPSBpc1N0cmluZ1NwZWN1bGF0aW9uKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGJvb2wgaXNJ
bnQ4QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDhBcnJh
eSgpOwotICAgICAgICAgICAgYm9vbCBpc0ludDE2QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNJbnQz
MkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5
KCk7Ci0gICAgICAgICAgICBib29sIGlzVWludDhBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0uc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc1VpbnQ4
Q2xhbXBlZEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50
OENsYW1wZWRBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc1VpbnQxNkFycmF5ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpOwotICAgICAgICAg
ICAgYm9vbCBpc1VpbnQzMkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVVaW50MzJBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc0Zsb2F0MzJBcnJheSA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCk7Ci0gICAg
ICAgICAgICBib29sIGlzRmxvYXQ2NEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91
bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKTsKLSAgICAgICAgICAgIGlmICghaXNBcnJheSAmJiAh
aXNBcmd1bWVudHMgJiYgIWlzU3RyaW5nICYmICFpc0ludDhBcnJheSAmJiAhaXNJbnQxNkFycmF5
ICYmICFpc0ludDMyQXJyYXkgJiYgIWlzVWludDhBcnJheSAmJiAhaXNVaW50OENsYW1wZWRBcnJh
eSAmJiAhaXNVaW50MTZBcnJheSAmJiAhaXNVaW50MzJBcnJheSAmJiAhaXNGbG9hdDMyQXJyYXkg
JiYgIWlzRmxvYXQ2NEFycmF5KQorICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlm
aWVyKG5vZGVQdHItPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFM
b2coIiAgQCV1IC0+ICVzIiwgbV9jb21waWxlSW5kZXgsIGlzQXJyYXkgPyAiR2V0QXJyYXlMZW5n
dGgiIDogIkdldFN0cmluZ0xlbmd0aCIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoaXNBcnJh
eSkgewotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0QXJyYXlMZW5ndGgpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAg
ICAgICAgICAgICBub2RlLmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAg
ICAgICAgbV9ncmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4pLT5n
ZXRBcnJheVByb2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcnJheVByb2ZpbGUpCi0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVBy
b2ZpbGUgPSAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5v
ZGVQdHItPmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCisgICAgICAgICAgICAgICAgICAg
IG5vZGVQdHItPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBBcnJheTo6
TW9kZSBhcnJheU1vZGUgPSBBcnJheTo6VW5kZWNpZGVkOworICAgICAgICAgICAgaWYgKGFycmF5
UHJvZmlsZSkgewogICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcnJheVByb2ZpbGUtPmhhc0RlZmlu
aXRlU3RydWN0dXJlKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIE5vZGUgY2hl
Y2tTdHJ1Y3R1cmUoQ2hlY2tTdHJ1Y3R1cmUsIG5vZGUuY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBu
b2RlLmNoaWxkMSgpLmluZGV4KCkpOwotICAgICAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlLnJl
ZigpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGVja1N0cnVjdHVyZUluZGV4ID0gbV9n
cmFwaC5zaXplKCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1
cmUpOwotICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2luZGV4SW5CbG9j
aywgY2hlY2tTdHJ1Y3R1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5UHJvZmls
ZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LnJlZihub2RlUHRyLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgY2hlY2tT
dHJ1Y3R1cmUoQ2hlY2tTdHJ1Y3R1cmUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwg
bm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrU3Ry
dWN0dXJlLnJlZigpOworICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hlY2tTdHJ1Y3R1
cmVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFw
cGVuZChjaGVja1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmFwcGVuZChtX2luZGV4SW5CbG9jaywgY2hlY2tTdHJ1Y3R1cmVJbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGZyb21PYnNlcnZlZChhcnJheVBy
b2ZpbGUtPm9ic2VydmVkQXJyYXlNb2RlcygpLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBhcnJheU1vZGUgPSByZWZpbmVBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgYXJy
YXlNb2RlLAorICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpLAorICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24o
KSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICAgICAgY2FzZSBB
cnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAg
ICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0QXJy
YXlMZW5ndGgpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlUHRyLT5mbGFncygpICYgTm9k
ZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y2xlYXJGbGFncyhOb2Rl
TXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICBub2RlUHRyLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChp
c0FyZ3VtZW50cykKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldEFyZ3VtZW50c0xlbmd0
aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZykKLSAgICAgICAgICAgICAgICBub2Rl
LnNldE9wKEdldFN0cmluZ0xlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0ludDhBcnJh
eSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldEludDhBcnJheUxlbmd0aCk7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChpc0ludDE2QXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRP
cChHZXRJbnQxNkFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50MzJBcnJh
eSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldEludDMyQXJyYXlMZW5ndGgpOwotICAg
ICAgICAgICAgZWxzZSBpZiAoaXNVaW50OEFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0
T3AoR2V0VWludDhBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1VpbnQ4Q2xh
bXBlZEFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0VWludDhDbGFtcGVkQXJy
YXlMZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50MTZBcnJheSkKLSAgICAgICAg
ICAgICAgICBub2RlLnNldE9wKEdldFVpbnQxNkFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGlzVWludDMyQXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRVaW50
MzJBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0Zsb2F0MzJBcnJheSkKLSAg
ICAgICAgICAgICAgICBub2RlLnNldE9wKEdldEZsb2F0MzJBcnJheUxlbmd0aCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChpc0Zsb2F0NjRBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9w
KEdldEZsb2F0NjRBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAvLyBObyBsb25nZXIgTXVzdEdl
bmVyYXRlCi0gICAgICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0
ZSk7Ci0gICAgICAgICAgICBub2RlLmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAg
ICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewot
ICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKQotICAg
ICAgICAgICAgICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKQotICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxk
U3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVm
YXVsdEZsYWdzKE5vcCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hp
bGQxKG5vZGUpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMihu
b2RlKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDMobm9kZSk7
Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRSZWZDb3VudCgwKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG5vZGUuc2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIHJlZmluZUFycmF5
TW9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAg
ICAgICAvLyBQcmVkaWN0aW9ucyBzaG91bGQgb25seSBiZWNvbWUgbW9yZSwgcmF0aGVyIHRoYW4g
bGVzcywgcmVmaW5lZC4gSGVuY2UKKyAgICAgICAgICAgIC8vIGlmIHdlIHdlcmUgZXZlciBhYmxl
IHRvIENTRSB0aGUgc3RvcmFnZSBwb2ludGVyIGZvciB0aGlzIG9wZXJhdGlvbiwKKyAgICAgICAg
ICAgIC8vIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBjb250aW51ZSB0byBiZSBhYmxlIHRvIGRvIHNv
LgorICAgICAgICAgICAgQVNTRVJUKGNhbkNTRVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAg
ICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDog
ewotICAgICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDMoKSAmJiBtX2dyYXBoW25vZGUuY2hpbGQz
KCldLm9wKCkgPT0gTm9wKQotICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkg
PSBFZGdlKCk7CisgICAgICAgICAgICBub2RlLnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAg
ICByZWZpbmVBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCks
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
LAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24o
KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFnZShub2RlLmFy
cmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQzKCld
KQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMygpXS5vcCgp
ID09IEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIHRoZSBub2RlIHJl
ZmVyZW5jZSBhZnRlciB3ZSBkbyB0aGUgYXBwZW5kLgorICAgICAgICAgICAgICAgICAgICBOb2Rl
IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlLCBub2RlLmNvZGVPcmlnaW4sIE9wSW5mbyhub2RlLmFycmF5
TW9kZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwg
bm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAg
ICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygpID0gRWRnZShnZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChnZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gU2VlIGFib3ZlLiBDb250aW51ZWQgZml4dXAgb2YgdGhlIGdyYXBoIHNob3VsZCBub3Qg
cmVncmVzcyBvdXIgYWJpbGl0eQorICAgICAgICAgICAgICAgIC8vIHRvIHNwZWN1bGF0ZS4KKyAg
ICAgICAgICAgICAgICBBU1NFUlQoIW1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0pOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTI1OTcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODYs
NDggKzQ4NiwyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBu
b2RlKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKLSAgICAgICAgY2FzZSBQ
dXRCeVZhbDogewotICAgICAgICAgICAgaWYgKCFhdCh2YXJBcmdDaGlsZChub2RlLCAxKSkuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhdCh2YXJBcmdDaGlsZChub2Rl
LCAwKSkucHJlZGljdGlvbigpOwotICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVNdXRhYmxl
QXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgUHV0QnlWYWxTYWZlOiB7Ci0gICAgICAgICAgICBpZiAoIWF0KHZhckFyZ0No
aWxkKG5vZGUsIDEpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGF0
KHZhckFyZ0NoaWxkKG5vZGUsIDApKS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIWlz
QWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChpc0FycmF5U3BlY3VsYXRpb24o
cHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFB1dEJ5
VmFsQWxpYXM6IHsKLSAgICAgICAgICAgIGlmICghYXQodmFyQXJnQ2hpbGQobm9kZSwgMSkpLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gYXQodmFyQXJnQ2hpbGQobm9k
ZSwgMCkpLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlTXV0YWJs
ZUFycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQy
KCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gYXQobm9kZS5jaGls
ZDEoKSkucHJlZGljdGlvbigpOwotICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVBcnJheVNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBzd2l0
Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBHZW5lcmljOgorICAgICAgICBj
YXNlIEpTQXJyYXlPdXRPZkJvdW5kczoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgY2FzZSBTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5VmFs
OworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGNhc2UgQXJndW1lbnRzOgorICAgICAg
ICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRCeVZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMTI1OTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcxOCw2ICs3MTgsMzQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBy
ZXR1cm4gbV9vcEluZm87CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzQXJyYXlNb2RlKCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2Ug
UHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgY2FzZSBHZXRC
eVZhbDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hh
ckNvZGVBdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFycmF5
OjpNb2RlIGFycmF5TW9kZSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzQXJyYXlNb2RlKCkp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk6Ok1vZGU+KG1fb3BJbmZvKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzZXRBcnJheU1vZGUoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FycmF5TW9kZSgpKTsKKyAgICAgICAgbV9vcEluZm8g
PSBhcnJheU1vZGU7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzVmlydHVhbFJlZ2lzdGVyKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
cmV2aXNpb24gMTI1OTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIC8qIG9wY29kZXMgdXNlIFZhckFyZ3MgYmVhdXNlIHRoZXkgbWF5
IGhhdmUgdXAgdG8gNCBjaGlsZHJlbi4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1
bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgbWFjcm8o
UHV0QnlWYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNaWdodENs
b2JiZXIpIFwKLSAgICBtYWNybyhQdXRCeVZhbFNhZmUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
SGFzVmFyQXJncyB8IE5vZGVNaWdodENsb2JiZXIpIFwKICAgICBtYWNybyhQdXRCeVZhbEFsaWFz
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTWlnaHRDbG9iYmVyKSBc
CiAgICAgbWFjcm8oR2V0QnlJZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oR2V0QnlJZEZsdXNoLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKQEAgLTE0MiwxNyArMTQx
LDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEJ5T2Zm
c2V0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKEdldEFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAg
ICBtYWNybyhHZXRBcmd1bWVudHNMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3Jv
KEdldFN0cmluZ0xlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0SW50OEFy
cmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRJbnQxNkFycmF5TGVu
Z3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRJbnQzMkFycmF5TGVuZ3RoLCBO
b2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRVaW50OEFycmF5TGVuZ3RoLCBOb2RlUmVz
dWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aCwgTm9kZVJl
c3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0VWludDE2QXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJ
bnQzMikgXAotICAgIG1hY3JvKEdldFVpbnQzMkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIp
IFwKLSAgICBtYWNybyhHZXRGbG9hdDMyQXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAot
ICAgIG1hY3JvKEdldEZsb2F0NjRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAg
bWFjcm8oR2V0U2NvcGVDaGFpbiwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0U2NvcGVk
VmFyLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0U2Nv
cGVkVmFyLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMjU5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjEyLDE3ICs2MTIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAg
Y2FzZSBHZXRBcmd1bWVudHNMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0SW50OEFycmF5TGVuZ3Ro
OgotICAgICAgICBjYXNlIEdldEludDE2QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0SW50
MzJBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50OEFycmF5TGVuZ3RoOgotICAgICAg
ICBjYXNlIEdldFVpbnQ4Q2xhbXBlZEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQx
NkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQzMkFycmF5TGVuZ3RoOgotICAgICAg
ICBjYXNlIEdldEZsb2F0MzJBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRGbG9hdDY0QXJy
YXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0U3RyaW5nTGVuZ3RoOgogICAgICAgICBjYXNlIElu
dDMyVG9Eb3VibGU6CiAgICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKICAgICAgICAgY2FzZSBH
ZXRMb2NhbFVubGlua2VkOgpAQCAtNjM3LDcgKzYyNiw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWxT
YWZlOgogICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpXS5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzSW50KTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpXS5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyNTk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNzQs
MTIgKzIzNzQsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rp
b24oKSB8fCAhYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpIHx8ICFhdChub2RlLmNoaWxk
MigpKS5wcmVkaWN0aW9uKCkpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAg
ICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVj
aWRlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihJbmFkcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQy
KCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSB8fCAoIW5vZGUuY2hpbGQzKCkgJiYgIWF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSkgeworICAgICAgICBjYXNl
IEFycmF5OjpHZW5lcmljOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CkBAIC0yMzkyLDEwNSArMjM5Myw2OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkg
ewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CisgICAgICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJv
dW5kczogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQ
UlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9y
YWdlLmdwcigpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBX
ZSB3aWxsIGhhdmUgYWxyZWFkeSBzcGVjdWxhdGVkIHRoYXQgdGhlIGJhc2UgaXMgc29tZSBraW5k
IG9mIGFycmF5LAorICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludC4KKyAgICAgICAgICAgIEFT
U0VSVChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBu
b2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgPT0gU3BlY1N0cmluZykgewor
ICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
blN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgewotICAg
ICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEo
KS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgaXNJbnQ4QXJy
YXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5v
VHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJ
bnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVv
ZihpbnQxNl90KSwgaXNJbnQxNkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRB
cnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVz
Y3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIGlzSW50MzJBcnJheVNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlw
ZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKLSAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50OEFy
cmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBO
b1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAg
IH0KLQotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDhD
bGFtcGVkQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWND
aGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25Bcmd1bWVudHMobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5
KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
aW50OF90KSwgTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlw
dG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaywg
U2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVv
Zih1aW50OF90KSwgTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRB
cnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
dWludDhfdCksIE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Cisg
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0
YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgTm9U
eXBlZEFycmF5VHlwZVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBOb1R5cGVkQXJyYXlUeXBl
U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpLCBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Cisg
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSksIE5v
VHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCBzaXplb2YodWludDE2X3QpLCBpc1VpbnQxNkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNr
IDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7Ci0gICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgaXNVaW50
MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
ID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3Bl
Y3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxv
YXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YoZmxvYXQpLCBpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVj
ayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAg
ICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURl
c2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSksIGlzRmxvYXQ2NEFycmF5U3BlY3VsYXRp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlU
eXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MpOwotICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7Ci0KLSAgICAgICAg
R1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhh
dCB0aGUgYmFzZSBpcyBzb21lIGtpbmQgb2YgYXJyYXksCi0gICAgICAgIC8vIGF0IHRoaXMgcG9p
bnQuCi0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Fy
cmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3By
KCkpKTsKLQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTMzODYsODEgKzMzNTEsMTAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAot
ICAgICAgICBzcGVjdWxhdGVBcnJheShub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKLQotICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6
OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDApKSk7Ci0gICAgICAgIAotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAg
IGNhc2UgR2V0QXJndW1lbnRzTGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNM
ZW5ndGgobm9kZSk7CisgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgY29tcGlsZUdl
dEFycmF5TGVuZ3RoKG5vZGUpOwogICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdl
dFN0cmluZ0xlbmd0aDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAg
ICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc1N0
cmluZ1NwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0
aCgpKSwgcmVzdWx0R1BSKTsKLQotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdldEludDhB
cnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5n
bG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzSW50OEFycmF5U3Bl
Y3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRJbnQxNkFycmF5TGVuZ3RoOiB7Ci0gICAgICAg
IGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzSW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgR2V0SW50MzJBcnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJh
eUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
ICFpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldFVpbnQ4QXJyYXlM
ZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFs
RGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNVaW50OEFycmF5U3BlY3Vs
YXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDogewotICAg
ICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4
Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNVaW50OENsYW1wZWRBcnJheVNwZWN1
bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0VWludDE2QXJyYXlMZW5ndGg6IHsKLSAgICAgICAg
Y29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIEdldFVpbnQzMkFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFy
cmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsICFpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRGbG9hdDMy
QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQu
Z2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0Zsb2F0MzJB
cnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOiB7
Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+
ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vh
a1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGZ1bmN0aW9uLmdwcigpLCBub2RlLmZ1bmN0aW9u
KCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAxMjU5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDEyICsyNTAsNzkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2xlYXJHZW5lcmF0aW9uSW5mbwogICAgIG1fZnBycyA9
IFJlZ2lzdGVyQmFuazxGUFJJbmZvPigpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGVBcnJheShFZGdlIGVkZ2UsIEdQUlJlZyBiYXNlUmVnKQorY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsK
LSAgICBBYnN0cmFjdFZhbHVlJiBhcnJheVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOwot
ICAgIGlmIChhcnJheVZhbHVlLm1fc3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICYm
IGFycmF5VmFsdWUubV9zdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmNsYXNzSW5mbygpID09ICZKU0Fy
cmF5OjpzX2luZm8pCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpJ
bnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURl
c2NyaXB0b3IoKS5tX2NsYXNzSW5mbzsKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAg
ICAgICByZXR1cm4gbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLm1f
Y2xhc3NJbmZvOworICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBt
X2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCkubV9jbGFzc0luZm87Cisg
ICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBtX2ppdC5n
bG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLm1fY2xhc3NJbmZvOwor
ICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gbV9qaXQuZ2xvYmFs
RGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX2NsYXNzSW5mbzsKKyAgICBjYXNlIEFy
cmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIG1faml0Lmdsb2JhbERhdGEoKS0+dWlu
dDMyQXJyYXlEZXNjcmlwdG9yKCkubV9jbGFzc0luZm87CisgICAgY2FzZSBBcnJheTo6RmxvYXQz
MkFycmF5OgorICAgICAgICByZXR1cm4gbV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlE
ZXNjcmlwdG9yKCkubV9jbGFzc0luZm87CisgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5Ogor
ICAgICAgICByZXR1cm4gbV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9y
KCkubV9jbGFzc0luZm87CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
fQorCitjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
ZUFycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSwgRWRnZSBlZGdlLCBHUFJSZWcgYmFzZVJlZykK
K3sKKyAgICBUeXBlZEFycmF5RGVzY3JpcHRvciogcmVzdWx0ID0gdHlwZWRBcnJheURlc2NyaXB0
b3IoYXJyYXlNb2RlKTsKKyAgICAKKyAgICBpZiAobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUu
Zm9yTm9kZShlZGdlKSwgYXJyYXlNb2RlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENs
YXNzSW5mbyogZXhwZWN0ZWRDbGFzc0luZm8gPSAwOworICAgIAorICAgIHN3aXRjaCAoYXJyYXlN
b2RlKSB7CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZHF1YXRl
Q292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkpTU3RyaW5n
OjpzX2luZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgICAgIC8vIFRoaXMgY29kZSBk
dXBsaWNhdGVzIHRoZSBjb2RlIGJlbG93IGluIGFudGljaXBhdGlvbiBvZiB0aGlzIGNvZGUgYmVp
bmcKKyAgICAgICAgLy8gc3Vic3RhbnRpYWxseSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUuCisgICAg
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAg
IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwg
U3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGV4cGVjdGVkQ2xh
c3NJbmZvID0gJkFyZ3VtZW50czo6c19pbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICBjYXNlIEFy
cmF5OjpJbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAg
IGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5Ogor
ICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJy
YXk6CisgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5mbzsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKICAgICBtX2ppdC5sb2FkUHRyKApAQCAtMjY1LDcgKzMzMiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZUFycmF5KEVkZ2UKICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSks
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19p
bmZvKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZXhwZWN0
ZWRDbGFzc0luZm8pKSk7CiB9CiAKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2Uo
Tm9kZUluZGV4IG5vZGVJbmRleCkKQEAgLTE5OTksMjIgKzIwNjYsNiBAQCBzdGF0aWMgdm9pZCBj
b21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUCiAKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIE5vZGUmIG5vZGUsIGJvb2wgbmVlZHNTcGVjdWxhdGlvbkNoZWNrKQotewotICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAKLSAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICBp
ZiAobmVlZHNTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAgICAKLSAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci5t
X2xlbmd0aE9mZnNldCksIHJlc3VsdEdQUik7Ci0gICAgCi0gICAgaW50ZWdlclJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxh
dGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlvblJlcXVpcmVtZW50cywgVHlwZWRBcnJheVNpZ25l
ZG5lc3Mgc2lnbmVkbmVzcykKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwpAQCAtMzIzMyw2ICszMjg0LDUzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRBcmd1bWVudHMKICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbV9j
b21waWxlSW5kZXgpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlM
ZW5ndGgoTm9kZSYgbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAg
IAorICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciogZGVzY3JpcHRvciA9CisgICAgICAgIHNwZWN1bGF0ZUFycmF5KG5vZGUuYXJyYXlNb2RlKCks
IG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOworCisgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgp
KSB7CisgICAgY2FzZSBBcnJheTo6SlNBcnJheQorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczoKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJl
c3VsdEdQUik7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAg
Y29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheTo6SW50OEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgY2Fz
ZSBBcnJheTo6SW50MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5
OgorICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJB
cnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBkZXNjcmlwdG9yLT5tX2xlbmd0aE9m
ZnNldCksIHJlc3VsdEdQUik7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25Ob0NoZWNrKE5vZGUmIG5vZGUp
CiB7CiAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEyNTk3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjA4Miw2ICsyMDgyLDggQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFs
T25Bcmd1bWVudHMoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChO
b2RlJik7CiAgICAgCisgICAgdm9pZCBjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSYpOworICAg
IAogICAgIHZvaWQgY29tcGlsZVZhbHVlVG9JbnQzMihOb2RlJik7CiAgICAgdm9pZCBjb21waWxl
VUludDMyVG9OdW1iZXIoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZURvdWJsZUFzSW50MzIoTm9k
ZSYpOwpAQCAtMjA5NSw3ICsyMDk3LDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBjb21w
aWxlQXJpdGhNb2QoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZVNvZnRNb2R1bG8oTm9kZSYpOwot
ICAgIHZvaWQgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgoY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImLCBOb2RlJiwgYm9vbCBuZWVkc1NwZWN1bGF0aW9uQ2hlY2spOwogICAgIGVudW0gVHlw
ZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzIHsKICAgICAgICAgTm9UeXBlZEFycmF5U3Bl
Y0NoZWNrLAogICAgICAgICBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrLApAQCAtMjE5MSw3ICsy
MTkyLDkgQEAgcHVibGljOgogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
RXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBFZGdlKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uV2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVn
cywgTm9kZUluZGV4LCBib29sIGlzRm9yd2FyZCk7CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVB
cnJheShFZGdlIGJhc2VFZGdlLCBHUFJSZWcgYmFzZVJlZyk7CisgICAgY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlKTsKKyAgICAKKyAg
ICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogc3BlY3VsYXRlQXJyYXkoQXJyYXk6Ok1vZGUs
IEVkZ2UgYmFzZUVkZ2UsIEdQUlJlZyBiYXNlUmVnKTsKICAgICAKICAgICB0ZW1wbGF0ZTxib29s
IHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwg
RGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159845</attachid>
            <date>2012-08-21 19:38:15 -0700</date>
            <delta_ts>2012-08-21 19:46:21 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>arraymode_patch_3.diff</filename>
            <type>text/plain</type>
            <size>103100</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2MjUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDEyLTA4LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgYWNjZXNzZXMgc2hvdWxkIHJlbWVtYmVyIHdoYXQga2luZCBvZiBhcnJheSB0aGV5IGFy
ZSBwcmVkaWN0ZWQgdG8gYWNjZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NDQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6OnJl
ZmluZUFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToK
KyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdBcnJh
eU1vZGUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNT
RVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVGb3JQdXQpOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9kZVdpdGhvdXRPU1JFeGl0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJyYXlNb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVw
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc0FycmF5TW9kZSk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjphcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldEFy
cmF5TW9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBl
ZEFycmF5RGVzY3JpcHRvcik6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
RmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTItMDgtMjEgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjaW5nIHRoZSBWTUluc3BlY3RvciBm
b3IgVk0gZGVidWdnaW5nIHVzZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTI1OTcxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU4
LDY1ICs4NTgsNjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7Ci0gICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRp
Y3Rpb24oKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAg
Y2FzZSBVbmRlY2lkZWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvcmNlRXhpdDoKICAgICAgICAgICAgIG1faXNW
YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KCFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSB8fCAoIW5v
ZGUuY2hpbGQzKCkgJiYgIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlQXJn
dW1lbnRzKCkpKSB7CisgICAgICAgIGNhc2UgR2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRz
KCkpIHsKKyAgICAgICAgY2FzZSBTdHJpbmc6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJndW1l
bnRzOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3Vt
ZW50cyk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnByZWRpY3Rpb24oKSA9PSBTcGVjU3RyaW5nKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgY2FzZSBKU0FycmF5OgorICAg
ICAgICBjYXNlIEpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgaGF2ZSBtb3JlIGNvbnNlcnZhdGl2ZSBoYW5kbGluZyBvZiB0aGUgb3V0LW9mLWJvdW5k
cworICAgICAgICAgICAgLy8gY2FzZS4KKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNw
ZWNTdHJpbmcpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgeworICAgICAgICBj
YXNlIEludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgeworICAgICAgICBj
YXNlIEludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7CisgICAgICAg
IGNhc2UgSW50MzJBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNJbnQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKKyAgICAg
ICAgY2FzZSBVaW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICht
X2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkp
IHsKKyAgICAgICAgY2FzZSBVaW50OENsYW1wZWRBcnJheToKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlVWludDE2QXJyYXkoKSkgeworICAgICAgICBjYXNlIFVpbnQxNkFycmF5OgogICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5KTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRT
cGVjdWxhdGVVaW50MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2UgVWludDMyQXJyYXk6CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGlmIChub2RlLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKQEAgLTkyNCw1NSAr
OTI1LDQ3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNE
b3VibGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKKyAgICAg
ICAgY2FzZSBGbG9hdDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkp
IHsKKyAgICAgICAgY2FzZSBGbG9hdDY0QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQ2NEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
ICAgICAKICAgICBjYXNlIFB1dEJ5VmFsOgotICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICBj
YXNlIFB1dEJ5VmFsU2FmZTogeworICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICBu
b2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0KICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIW1fZ3JhcGhbY2hpbGQxXS5w
cmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAg
c3dpdGNoIChtb2RlRm9yUHV0KG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6OkZvcmNlRXhpdDoKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX2dyYXBoW2NoaWxkMl0uc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIHx8
IG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKQotI2VuZGlmCi0gICAg
ICAgICAgICApIHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlWYWwgfHwg
bm9kZS5vcCgpID09IFB1dEJ5VmFsU2FmZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2sp
OwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFd
LnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJy
YXk6CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjQXJndW1lbnRzKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dy
YXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBB
cnJheTo6SW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
SW50OEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQpAQCAtOTgwLDggKzk3Myw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsK
KyAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQxKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC05ODksOCArOTgxLDcgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0
ZUludDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CiAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKQEAgLTk5OCw4ICs5ODksNyBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxk
MV0uc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OEFy
cmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpA
QCAtMTAwNyw4ICs5OTcsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkg
eworICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dy
YXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtMTAxNiw4ICsxMDA1LDcg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtjaGls
ZDFdLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
VWludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50
MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkKQEAgLTEwMjUsOCArMTAxMyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7
CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDEpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC0xMDM0LDIzICsxMDIxLDIwIEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRT
cGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3Vs
YXRlRmxvYXQ2NEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5Ogog
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjRmxvYXQ2NEFycmF5KTsKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbFNhZmUpCi0gICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzNDYsNjkgKzEzMzAsODIgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBHZXRBcmd1bWVudHNMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50
cyk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAg
c3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRl
ZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIG1faXNWYWxpZCA9
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQo
IWlzU3RyaW5nU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgICAgICBub2RlLnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9m
Qm91bmRzOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0FyZ3VtZW50cyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNw
ZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0ludDhBcnJheVNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0lu
dDE2QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwor
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoIWlzSW50MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNw
ZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhB
cnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50OEFycmF5U3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCghaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjVWludDhDbGFtcGVkQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQxNkFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQxNkFycmF5U3Bl
Y3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7CisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgICAgICBub2RlLnNldENh
bkV4aXQoIWlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1Vp
bnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmxvYXQzMkFycmF5U3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgh
aXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0NjRB
cnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAotICAgIGNhc2Ug
R2V0U3RyaW5nTGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzU3RyaW5nU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2Ug
R2V0SW50OEFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzSW50OEFycmF5
U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhBcnJheSk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
ZXRJbnQxNkFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzSW50MTZBcnJh
eVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdldEludDMyQXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNJbnQzMkFy
cmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwotICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR2V0VWludDhBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQ4
QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KCFpc1VpbnQ4Q2xhbXBlZEFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4
Q2xhbXBlZEFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldFVpbnQxNkFycmF5TGVuZ3RoOgotICAgICAg
ICBub2RlLnNldENhbkV4aXQoIWlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjVWludDE2QXJyYXkpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR2V0VWludDMyQXJyYXlMZW5ndGg6Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRGbG9hdDMyQXJyYXlMZW5n
dGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldEZsb2F0NjRB
cnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0Zsb2F0NjRBcnJheVNwZWN1
bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVy
ZTogewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRo
ZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCkBAIC0xNDQ2
LDY1ICsxNDQzLDQ1IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90
IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZTogewotICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCkpOwotICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMigpXS5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpOwogICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMs
IGJ1dCB0aGlzIGlzIChhbG1vc3QpIGFsd2F5cyBmb2xsb3dlZCBieSBHZXRCeVZhbCwgd2hpY2gg
ZG9lcyBleGl0LiBTbyBubyBwb2ludCBpbiB0cnlpbmcgdG8gYmUgbW9yZSBwcmVjaXNlLgotICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMo
KSkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCkgPT0gU3BlY1N0cmluZykgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkp
IHsKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJy
YXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBjYXNlIEFycmF5
OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgZmlsdGVy
IGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2FudCB0byBhZGQKKyAgICAg
ICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9ucywgYnV0IHdl
IGRvbid0IGhhdmUgdGhhdCwgeWV0LgorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
YXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNJbnQ4QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNJbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVh
cigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjSW50MzJBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
Y2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgeworICAgICAg
ICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OENsYW1wZWRBcnJheSgp
KSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhD
bGFtcGVkQXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1VpbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICht
X2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXko
KSkgeworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxv
YXQ2NEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgogICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0NjRBcnJheSk7Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigp
OwogICAgICAgICBicmVhazsgCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR0FycmF5TW9kZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5TW9kZXMgbW9kZXMs
IGJvb2wgbWFrZVNhZmUpCit7CisgICAgLy8gRklYTUU6IHdlIG1heSB3YW50IHRvIGFkZCBzb21l
IHBvbHltb3JwaGljIHN1cHBvcnQgaW4gdGhlIGZ1dHVyZS4gVGhhdCdzIHdoeSB0aGlzCisgICAg
Ly8gaXMgYSBzd2l0Y2ggc3RhdGVtZW50IHJpZ2h0IG5vdy4KKyAgICAKKyAgICBzd2l0Y2ggKG1v
ZGVzKSB7CisgICAgY2FzZSAwOgorICAgICAgICByZXR1cm4gQXJyYXk6OkZvcmNlRXhpdDsKKyAg
ICBjYXNlIElzSlNBcnJheToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkpTQXJy
YXlPdXRPZkJvdW5kcyA6IEFycmF5OjpKU0FycmF5OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBVbmRlY2lkZWQ7CisgICAgfQorfQorCitBcnJheTo6TW9kZSByZWZpbmVBcnJheU1vZGUo
QXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlw
ZSBpbmRleCkKK3sKKyAgICBpZiAoIWJhc2UgfHwgIWluZGV4KSB7CisgICAgICAgIC8vIFRoZSBv
bmx5IGNhc2UgaW4gd2hpY2ggdGhlcmUgY2FuIGJlIG5vIHByZWRpY3Rpb25zIGlzIGlmIHRoaXMg
Y29kZSBoYXNuJ3QKKyAgICAgICAgLy8gZXhlY3V0ZWQsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxk
IGhhdmUgYWxyZWFkeSBzZXQgdGhpcyB0byBGb3JjZUV4aXQuCisgICAgICAgIEFTU0VSVChhcnJh
eU1vZGUgPT0gQXJyYXk6OkZvcmNlRXhpdCk7CisgICAgICAgIHJldHVybiBBcnJheTo6Rm9yY2VF
eGl0OworICAgIH0KKyAgICAKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihpbmRleCkgfHwg
IWlzQ2VsbFNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OkdlbmVyaWM7
CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6CisgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiBhcnJheU1vZGU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGJhc2Up
KQorICAgICAgICByZXR1cm4gQXJyYXk6OlN0cmluZzsKKyAgICAKKyAgICBpZiAoaXNBcmd1bWVu
dHNTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpBcmd1bWVudHM7Cisg
ICAgCisgICAgaWYgKGlzSW50OEFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVy
biBBcnJheTo6SW50OEFycmF5OworICAgIAorICAgIGlmIChpc0ludDE2QXJyYXlTcGVjdWxhdGlv
bihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpJbnQxNkFycmF5OworICAgIAorICAgIGlm
IChpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpJ
bnQzMkFycmF5OworICAgIAorICAgIGlmIChpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkK
KyAgICAgICAgcmV0dXJuIEFycmF5OjpVaW50OEFycmF5OworICAgIAorICAgIGlmIChpc1VpbnQ4
Q2xhbXBlZEFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6VWlu
dDhDbGFtcGVkQXJyYXk7CisgICAgCisgICAgaWYgKGlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihi
YXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVaW50MTZBcnJheTsKKyAgICAKKyAgICBpZiAo
aXNVaW50MzJBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OlVp
bnQzMkFycmF5OworICAgIAorICAgIGlmIChpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKGJhc2Up
KQorICAgICAgICByZXR1cm4gQXJyYXk6OkZsb2F0MzJBcnJheTsKKyAgICAKKyAgICBpZiAoaXNG
bG9hdDY0QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpGbG9h
dDY0QXJyYXk7CisgICAgCisgICAgcmV0dXJuIEFycmF5OjpHZW5lcmljOworfQorCitib29sIG1v
ZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgQXJyYXk6Ok1vZGUgYXJyYXlN
b2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBcnJheTo6R2VuZXJp
YzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkZvcmNl
RXhpdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpT
dHJpbmc6CisgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgY2FzZSBBcnJheTo6SlNB
cnJheU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gdmFsdWUubV9zdHJ1Y3R1cmUuaGFzU2lu
Z2xldG9uKCkKKyAgICAgICAgICAgICYmIHZhbHVlLm1fc3RydWN0dXJlLnNpbmdsZXRvbigpLT5j
bGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOworICAgICAgICAKKyAgICBjYXNlIEFycmF5
OjpBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVl
Lm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAg
cmV0dXJuIGlzSW50OEFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIGlzSW50MTZBcnJheVNw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkludDMy
QXJyYXk6CisgICAgICAgIHJldHVybiBpc0ludDMyQXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICByZXR1
cm4gaXNVaW50OEFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBpc1VpbnQ4QXJy
YXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpV
aW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIGlzVWludDE2QXJyYXlTcGVjdWxhdGlvbih2YWx1
ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAg
ICAgcmV0dXJuIGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworCisgICAg
Y2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gaXNGbG9hdDMyQXJyYXlT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworCisgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5
OgorICAgICAgICByZXR1cm4gaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUp
OworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2NvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2RlKQoreworICAg
IHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgcmV0
dXJuICJVbmRlY2lkZWQiOworICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgIHJldHVy
biAiR2VuZXJpYyI7CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICByZXR1cm4gIlN0
cmluZyI7CisgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgcmV0dXJuICJKU0FycmF5
IjsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAi
SlNBcnJheU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAg
IHJldHVybiAiQXJndW1lbnRzIjsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAg
IHJldHVybiAiSW50OEFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAg
ICByZXR1cm4gIkludDE2QXJyYXkiOworICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAg
ICAgIHJldHVybiAiSW50MzJBcnJheSI7CisgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAg
ICAgICAgcmV0dXJuICJVaW50OEFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToK
KyAgICAgICAgcmV0dXJuICJVaW50MTZBcnJheSI7CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJy
YXk6CisgICAgICAgIHJldHVybiAiVWludDMyQXJyYXkiOworICAgIGNhc2UgQXJyYXk6OkZsb2F0
MzJBcnJheToKKyAgICAgICAgcmV0dXJuICJGbG9hdDMyQXJyYXkiOworICAgIGNhc2UgQXJyYXk6
OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuICJGbG9hdDY0QXJyYXkiOworICAgIGRlZmF1
bHQ6CisgICAgICAgIC8vIEJldHRlciB0byByZXR1cm4gc29tZXRoaW5nIHRoZW4gaXQgaXMgdG8g
Y3Jhc2guIFJlbWVtYmVyLCB0aGlzIG1ldGhvZAorICAgICAgICAvLyBpcyBiZWluZyBjYWxsZWQg
ZnJvbSBvdXIgbWFpbiBkaWFnbm9zdGljIHRvb2wsIHRoZSBJUiBkdW1wZXIuIEl0J3MgbGlrZQor
ICAgICAgICAvLyBhIHN0YWNrIHRyYWNlLiBTbyBpZiB3ZSBnZXQgaGVyZSB0aGVuIHByb2JhYmx5
IHNvbWV0aGluZyBoYXMgYWxyZWFkeQorICAgICAgICAvLyBnb25lIHdyb25nLgorICAgICAgICBy
ZXR1cm4gIlVua25vd24hIjsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Fy
cmF5TW9kZV9oCisjZGVmaW5lIERGR0FycmF5TW9kZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgi
CisjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBBYnN0cmFjdFZhbHVlOworCisvLyBVc2UgYSBuYW1lc3BhY2UgKyBl
bnVtIGluc3RlYWQgb2YgZW51bSBhbG9uZSB0byBhdm9pZCB0aGUgbmFtZXNwYWNlIGNvbGxpc2lv
bgorLy8gdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIsIHNpbmNlIHdlIHNheSB0aGluZ3MgbGlr
ZSAiSW50OEFycmF5IiBhbmQgIkpTQXJyYXkiCisvLyBpbiBsb3RzIG9mIG90aGVyIHBsYWNlcywg
dG8gbWVhbiBzdWJ0bHkgZGlmZmVyZW50IHRoaW5ncy4KK25hbWVzcGFjZSBBcnJheSB7CitlbnVt
IE1vZGUgeworICAgIFVuZGVjaWRlZCwgLy8gSW1wbGllcyB0aGF0IHdlIG5lZWQgcHJlZGljdGlv
bnMgdG8gZGVjaWRlLiBXZSB3aWxsIG5ldmVyIGdldCB0byB0aGUgYmFja2VuZCBpbiB0aGlzIG1v
ZGUuCisgICAgRm9yY2VFeGl0LCAvLyBJbXBsaWVzIHRoYXQgd2UgaGF2ZSBubyBpZGVhIGhvdyB0
byBleGVjdXRlIHRoaXMgb3BlcmF0aW9uLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAg
IEdlbmVyaWMsCisgICAgU3RyaW5nLAorICAgIEpTQXJyYXksCisgICAgSlNBcnJheU91dE9mQm91
bmRzLAorICAgIEFyZ3VtZW50cywKKyAgICBJbnQ4QXJyYXksCisgICAgSW50MTZBcnJheSwKKyAg
ICBJbnQzMkFycmF5LAorICAgIFVpbnQ4QXJyYXksCisgICAgVWludDE2QXJyYXksCisgICAgVWlu
dDMyQXJyYXksCisgICAgRmxvYXQzMkFycmF5LAorICAgIEZsb2F0NjRBcnJheQorfTsKK30gLy8g
bmFtZXNwYWNlIEFycmF5CisKK0FycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheU1vZGVzIG1v
ZGVzLCBib29sIG1ha2VTYWZlKTsKKworQXJyYXk6Ok1vZGUgcmVmaW5lQXJyYXlNb2RlKEFycmF5
OjpNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBpbmRleCk7CisKK2Jv
b2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmLCBBcnJheTo6TW9kZSk7CisKK2Nv
bnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CisKK2lubGluZSBib29sIGNhbkNT
RVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2Rl
KSB7CisgICAgY2FzZSBVbmRlY2lkZWQ6CisgICAgY2FzZSBGb3JjZUV4aXQ6CisgICAgY2FzZSBH
ZW5lcmljOgorICAgIGNhc2UgQXJndW1lbnRzOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitpbmxpbmUgQXJyYXk6
Ok1vZGUgbW9kZUZvclB1dChBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIHJldHVybiBBcnJh
eTo6R2VuZXJpYzsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNhc2UgQXJyYXk6OkFyZ3Vt
ZW50czoKKyAgICAgICAgcmV0dXJuIEFycmF5OjpHZW5lcmljOworI2VuZGlmCisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGFycmF5TW9kZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
QXJyYXlNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyNTk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhbGxMaW5r
U3RhdHVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQXJyYXlNb2Rl
LmgiCiAjaW5jbHVkZSAiREZHQnl0ZUNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxp
dGllcy5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTgxNiw2ICs4MTcsMzQgQEAg
cHJpdmF0ZToKICAgICB7CiAgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6
ZSgpLCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCk7CiAgICAgfQorICAgIAorICAgIEFycmF5OjpN
b2RlIGdldEFycmF5TW9kZVdpdGhvdXRPU1JFeGl0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCisgICAgeworICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbigpOworICAgICAgICBpZiAocHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1
cmUoKSkKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChwcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIGJhc2Up
OworICAgICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisg
ICAgICAgIGRhdGFMb2coIlNsb3cgY2FzZSBwcm9maWxlIGZvciBiYyMldTogJXVcbiIsIG1fY3Vy
cmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyNlbmRp
ZgorICAgICAgICAKKyAgICAgICAgYm9vbCBtYWtlU2FmZSA9CisgICAgICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNsb3dDYXNlKG1fY3VycmVudElu
ZGV4KQorICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3V0T2ZCb3VuZHMpOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIGZyb21PYnNlcnZlZChwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSwgbWFrZVNh
ZmUpOworICAgIH0KKyAgICAKKyAgICBBcnJheTo6TW9kZSBnZXRBcnJheU1vZGUoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIEFycmF5OjpNb2RlIHJlc3Vs
dCA9IGdldEFycmF5TW9kZVdpdGhvdXRPU1JFeGl0KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgIAorICAgICAgICBpZiAocmVzdWx0ID09IEFycmF5OjpGb3JjZUV4aXQpCisgICAgICAgICAg
ICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KIAogICAgIE5vZGVJbmRleCBtYWtlU2FmZShOb2RlSW5kZXggbm9kZUluZGV4
KQogICAgIHsKQEAgLTE1NDgsOCArMTU3Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUludHJpbnNpYyhib28KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAg
ICAgIGludCBpbmRleE9wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDEpOwotICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQp
KTsKLSAgICAgICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29k
ZUF0LCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGluZGV4T3BlcmFuZCksIHN0b3JhZ2Up
OworICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJDb2Rl
QXQsIE9wSW5mbyhBcnJheTo6U3RyaW5nKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihp
bmRleE9wZXJhbmQpKTsKIAogICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHNl
dChyZXN1bHRPcGVyYW5kLCBjaGFyQ29kZSk7CkBAIC0xNTY1LDggKzE1OTMsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMSk7Ci0gICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gYWRkVG9HcmFwaChH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGlu
ZGV4T3BlcmFuZCkpOwotICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0
cmluZ0NoYXJBdCwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpLCBz
dG9yYWdlKTsKKyAgICAgICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdD
aGFyQXQsIE9wSW5mbyhBcnJheTo6U3RyaW5nKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQz
MihpbmRleE9wZXJhbmQpKTsKIAogICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAg
IHNldChyZXN1bHRPcGVyYW5kLCBjaGFyQ29kZSk7CkBAIC0yMTQ3LDQxICsyMTc0LDI2IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9n
ZXRfYnlfdmFsOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0
UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCisgICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJh
eU1vZGUgPSBnZXRBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uKTsKICAgICAgICAgICAgIE5v
ZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAg
ICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwotICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAocHJvZmlsZS0+aGFzRGVmaW5p
dGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJl
LCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1
cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2UgPSBh
ZGRUb0dyYXBoKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHByb3BlcnR5KTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5m
bygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlLCBwcm9wZXJ0eSwgcHJvcGVydHlTdG9yYWdl
KTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWws
IE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHByb3BlcnR5KTsK
ICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZh
bCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV92YWwpOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7CisgICAgICAgICAgICBBcnJheTo6TW9k
ZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggdmFs
dWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51LmFycmF5UHJvZmlsZTsKLSAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbigpOwotICAgICAgICAgICAgaWYgKHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJl
KCkpCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KHByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgYmFz
ZSk7Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAg
ICAgICBkYXRhTG9nKCJTbG93IGNhc2UgcHJvZmlsZSBmb3IgYmMjJXU6ICV1XG4iLCBtX2N1cnJl
bnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7Ci0jZW5kaWYK
LQotICAgICAgICAgICAgYm9vbCBtYWtlU2FmZSA9Ci0gICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRl
eCkKLSAgICAgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICAKICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQocHJvcGVydHkpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQodmFsdWUpOwotICAgICAg
ICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG1ha2VTYWZlID8gUHV0QnlWYWxTYWZlIDog
UHV0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKDApKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
Tm9kZTo6VmFyQXJnLCBQdXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbygwKSk7CiAK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV92YWwpOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9u
IDEyNTk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDk3ICs3NCw4NyBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAgICAg
IE5vZGUqIG5vZGVQdHIgPSAmbm9kZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFp
c0ludDMyU3BlY3VsYXRpb24obV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRl
bnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGJvb2wg
aXNBcnJheSA9IGlzQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRp
Y3Rpb24oKSk7Ci0gICAgICAgICAgICBib29sIGlzQXJndW1lbnRzID0gaXNBcmd1bWVudHNTcGVj
dWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAg
ICBib29sIGlzU3RyaW5nID0gaXNTdHJpbmdTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBib29sIGlzSW50OEFycmF5ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKTsKLSAgICAgICAgICAg
IGJvb2wgaXNJbnQxNkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVJbnQxNkFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlzSW50MzJBcnJheSA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpOwotICAgICAgICAgICAg
Ym9vbCBpc1VpbnQ4QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0
ZVVpbnQ4QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNVaW50OENsYW1wZWRBcnJheSA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKTsK
LSAgICAgICAgICAgIGJvb2wgaXNVaW50MTZBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
c2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNVaW50MzJB
cnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXko
KTsKLSAgICAgICAgICAgIGJvb2wgaXNGbG9hdDMyQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc0Zs
b2F0NjRBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2
NEFycmF5KCk7Ci0gICAgICAgICAgICBpZiAoIWlzQXJyYXkgJiYgIWlzQXJndW1lbnRzICYmICFp
c1N0cmluZyAmJiAhaXNJbnQ4QXJyYXkgJiYgIWlzSW50MTZBcnJheSAmJiAhaXNJbnQzMkFycmF5
ICYmICFpc1VpbnQ4QXJyYXkgJiYgIWlzVWludDhDbGFtcGVkQXJyYXkgJiYgIWlzVWludDE2QXJy
YXkgJiYgIWlzVWludDMyQXJyYXkgJiYgIWlzRmxvYXQzMkFycmF5ICYmICFpc0Zsb2F0NjRBcnJh
eSkKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlUHRyLT5pZGVu
dGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nKCIgIEAldSAtPiAlcyIs
IG1fY29tcGlsZUluZGV4LCBpc0FycmF5ID8gIkdldEFycmF5TGVuZ3RoIiA6ICJHZXRTdHJpbmdM
ZW5ndGgiKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKGlzQXJyYXkpIHsKLSAgICAgICAgICAg
ICAgICBub2RlLnNldE9wKEdldEFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5j
bGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVy
ZWYobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFy
cmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwot
ICAgICAgICAgICAgICAgIGlmICghYXJyYXlQcm9maWxlKQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCisgICAgICAg
ICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlUHRyLT5jb2RlT3JpZ2lu
KS0+Z2V0QXJyYXlQcm9maWxlKAorICAgICAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0g
QXJyYXk6OlVuZGVjaWRlZDsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsKICAgICAg
ICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwotICAg
ICAgICAgICAgICAgIGlmICghYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENoZWNr
U3RydWN0dXJlLCBub2RlLmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgbm9kZS5jaGlsZDEoKS5pbmRl
eCgpKTsKLSAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKLSAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggY2hlY2tTdHJ1Y3R1cmVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwotICAg
ICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrU3RydWN0dXJlKTsKLSAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGNoZWNrU3RydWN0dXJl
SW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3Ry
dWN0dXJlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobm9kZVB0ci0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENoZWNrU3Ry
dWN0dXJlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIG5vZGVQdHItPmNoaWxkMSgp
LmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dyYXBo
LnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1
cmUpOworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleElu
QmxvY2ssIGNoZWNrU3RydWN0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBub2RlUHRy
ID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBhcnJheU1vZGUgPSBmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLT5vYnNlcnZlZEFy
cmF5TW9kZXMoKSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJyYXlNb2Rl
ID0gcmVmaW5lQXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIGFycmF5TW9kZSwKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkdlbmVyaWM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldE9wKEdldEFycmF5TGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwor
ICAgICAgICAgICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7Cisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNBcmd1bWVudHMpCi0gICAg
ICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRBcmd1bWVudHNMZW5ndGgpOwotICAgICAgICAgICAg
ZWxzZSBpZiAoaXNTdHJpbmcpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRTdHJpbmdM
ZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQ4QXJyYXkpCi0gICAgICAgICAgICAg
ICAgbm9kZS5zZXRPcChHZXRJbnQ4QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAo
aXNJbnQxNkFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0SW50MTZBcnJheUxl
bmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0ludDMyQXJyYXkpCi0gICAgICAgICAgICAg
ICAgbm9kZS5zZXRPcChHZXRJbnQzMkFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KGlzVWludDhBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldFVpbnQ4QXJyYXlM
ZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50OENsYW1wZWRBcnJheSkKLSAgICAg
ICAgICAgICAgICBub2RlLnNldE9wKEdldFVpbnQ4Q2xhbXBlZEFycmF5TGVuZ3RoKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGlzVWludDE2QXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRP
cChHZXRVaW50MTZBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1VpbnQzMkFy
cmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0VWludDMyQXJyYXlMZW5ndGgpOwot
ICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG9hdDMyQXJyYXkpCi0gICAgICAgICAgICAgICAgbm9k
ZS5zZXRPcChHZXRGbG9hdDMyQXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNG
bG9hdDY0QXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRGbG9hdDY0QXJyYXlM
ZW5ndGgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgLy8gTm8gbG9uZ2VyIE11c3RHZW5lcmF0ZQotICAgICAgICAg
ICAgQVNTRVJUKG5vZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAgICAgICAg
bm9kZS5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgbV9ncmFwaC5k
ZXJlZihtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIGlmICgh
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkKLSAgICAgICAgICAgICAgICB8fCAh
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAg
ICAgICAgICB8fCBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50
cygpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwot
ICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDIobm9kZSk7Ci0gICAgICAgICAg
ICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQzKG5vZGUpOwotICAgICAgICAgICAgICAg
IG5vZGUuc2V0UmVmQ291bnQoMCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBub2RlLnNl
dEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICByZWZpbmVBcnJheU1vZGUoCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgLy8gUHJlZGljdGlv
bnMgc2hvdWxkIG9ubHkgYmVjb21lIG1vcmUsIHJhdGhlciB0aGFuIGxlc3MsIHJlZmluZWQuIEhl
bmNlCisgICAgICAgICAgICAvLyBpZiB3ZSB3ZXJlIGV2ZXIgYWJsZSB0byBDU0UgdGhlIHN0b3Jh
Z2UgcG9pbnRlciBmb3IgdGhpcyBvcGVyYXRpb24sCisgICAgICAgICAgICAvLyB0aGVuIHdlIHNo
b3VsZCBhbHdheXMgY29udGludWUgdG8gYmUgYWJsZSB0byBkbyBzby4KKyAgICAgICAgICAgIEFT
U0VSVChjYW5DU0VTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgU3RyaW5n
Q2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAgICAgICAgICAgIGlm
ICghIW5vZGUuY2hpbGQzKCkgJiYgbV9ncmFwaFtub2RlLmNoaWxkMygpXS5vcCgpID09IE5vcCkK
LSAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygpID0gRWRnZSgpOworICAgICAg
ICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgcmVmaW5lQXJyYXlNb2Rl
KAorICAgICAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLAorICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGNhbkNTRVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMygpXSkKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ub3AoKSA9PSBHZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHVzZSB0aGUgbm9kZSByZWZlcmVuY2UgYWZ0ZXIgd2Ug
ZG8gdGhlIGFwcGVuZC4KKyAgICAgICAgICAgICAgICAgICAgTm9kZSBnZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlKAorICAgICAgICAgICAgICAgICAgICAgICAgR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSwgbm9kZS5jb2RlT3JpZ2luLCBPcEluZm8obm9kZS5hcnJheU1vZGUoKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuY2hpbGQyKCkuaW5k
ZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5j
aGlsZHJlbi5jaGlsZDMoKSA9IEVkZ2UoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoZ2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2luZGV4
SW5CbG9jaywgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFNlZSBhYm92ZS4g
Q29udGludWVkIGZpeHVwIG9mIHRoZSBncmFwaCBzaG91bGQgbm90IHJlZ3Jlc3Mgb3VyIGFiaWxp
dHkKKyAgICAgICAgICAgICAgICAvLyB0byBzcGVjdWxhdGUuCisgICAgICAgICAgICAgICAgQVNT
RVJUKCFtX2dyYXBoW25vZGUuY2hpbGQzKCldKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyNTk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDg2LDQ4ICs0ODYsMjAgQEAgcHVi
bGljOgogICAgIAogICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKICAgICB7Ci0gICAg
ICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKLSAgICAg
ICAgICAgIGlmICghYXQodmFyQXJnQ2hpbGQobm9kZSwgMSkpLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gYXQodmFyQXJnQ2hpbGQobm9kZSwgMCkpLnByZWRpY3Rpb24o
KTsKLSAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24o
cHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFB1dEJ5
VmFsU2FmZTogewotICAgICAgICAgICAgaWYgKCFhdCh2YXJBcmdDaGlsZChub2RlLCAxKSkuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhdCh2YXJBcmdDaGlsZChub2Rl
LCAwKSkucHJlZGljdGlvbigpOwotICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVNdXRhYmxl
QXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBpZiAoaXNBcnJheVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAg
ICAgICAgICBpZiAoIWF0KHZhckFyZ0NoaWxkKG5vZGUsIDEpKS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IGF0KHZhckFyZ0NoaWxkKG5vZGUsIDApKS5wcmVkaWN0aW9u
KCk7Ci0gICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRC
eVZhbDogewotICAgICAgICAgICAgaWYgKCFhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24o
KTsKLSAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0
aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9k
ZSgpKSB7CisgICAgICAgIGNhc2UgR2VuZXJpYzoKKyAgICAgICAgY2FzZSBKU0FycmF5T3V0T2ZC
b3VuZHM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgU3RyaW5nOgor
ICAgICAgICAgICAgcmV0dXJuIG5vZGUub3AoKSA9PSBHZXRCeVZhbDsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBjYXNlIEFyZ3VtZW50czoKKyAgICAgICAgICAgIGlmIChub2RlLm9w
KCkgPT0gR2V0QnlWYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEyNTk3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MTgsNiArNzE4LDM0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvOwog
ICAgIH0KICAgICAKKyAgICBib29sIGhhc0FycmF5TW9kZSgpCisgICAgeworICAgICAgICBzd2l0
Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgorICAg
ICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGNh
c2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUo
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FycmF5TW9kZSgpKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEFycmF5OjpNb2RlPihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0QXJyYXlNb2RlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNBcnJheU1vZGUoKSk7CisgICAgICAgIG1fb3BJbmZvID0gYXJyYXlNb2RlOworICAg
IH0KKyAgICAKICAgICBib29sIGhhc1ZpcnR1YWxSZWdpc3RlcigpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEyNTk3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTEzLDcgKzExMyw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICAvKiBvcGNvZGVzIHVzZSBWYXJBcmdzIGJlYXVzZSB0aGV5IG1heSBoYXZlIHVwIHRvIDQgY2hp
bGRyZW4uICovXAogICAgIG1hY3JvKEdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKFB1dEJ5VmFsLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCi0gICAgbWFj
cm8oUHV0QnlWYWxTYWZlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2Rl
TWlnaHRDbG9iYmVyKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKEdldEJ5
SWQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkg
XAogICAgIG1hY3JvKEdldEJ5SWRGbHVzaCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCkBAIC0xNDIsMTcgKzE0MSw2IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpT
KSBcCiAgICAgbWFjcm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhHZXRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0QXJndW1l
bnRzTGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRTdHJpbmdMZW5ndGgs
IE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKEdldEludDhBcnJheUxlbmd0aCwgTm9kZVJl
c3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0SW50MTZBcnJheUxlbmd0aCwgTm9kZVJlc3VsdElu
dDMyKSBcCi0gICAgbWFjcm8oR2V0SW50MzJBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBc
Ci0gICAgbWFjcm8oR2V0VWludDhBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAg
bWFjcm8oR2V0VWludDhDbGFtcGVkQXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAg
IG1hY3JvKEdldFVpbnQxNkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNy
byhHZXRVaW50MzJBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0
RmxvYXQzMkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRGbG9h
dDY0QXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEdldFNjb3BlQ2hh
aW4sIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldFNjb3BlZFZhciwgTm9kZVJlc3VsdEpT
IHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dFNjb3BlZFZhciwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTI1OTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMiwxNyArNjEy
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6
CiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0QXJndW1lbnRz
TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEludDhBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBH
ZXRJbnQxNkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEludDMyQXJyYXlMZW5ndGg6Ci0g
ICAgICAgIGNhc2UgR2V0VWludDhBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50OENs
YW1wZWRBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50MTZBcnJheUxlbmd0aDoKLSAg
ICAgICAgY2FzZSBHZXRVaW50MzJBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRGbG9hdDMy
QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOgotICAgICAg
ICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgogICAg
ICAgICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoK
QEAgLTYzNyw3ICs2MjYsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwg
Tm9kZVVzZWRBc0ludCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAyKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxMjU5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc0LDEyICsyMzc0LDEzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IEdldEJ5VmFsOiB7Ci0gICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkgfHwgIWF0KG5vZGUu
Y2hpbGQxKCkpLnByZWRpY3Rpb24oKSB8fCAhYXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigp
KSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRl
Q292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS5h
cnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZHF1YXRlQ292ZXJh
Z2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKCFhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkgfHwgKCFub2RlLmNoaWxkMygpICYmICFhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzog
ewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwogICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtMjM5MiwxMjAg
KzIzOTMsOTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOworICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgorICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5j
aGlsZDIoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUu
Y2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJh
c2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugd2lsbCBoYXZlIGFscmVh
ZHkgc3BlY3VsYXRlZCB0aGF0IHRoZSBiYXNlIGlzIHNvbWUga2luZCBvZiBhcnJheSwKKyAgICAg
ICAgICAgIC8vIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAgICBBU1NFUlQobW9kZUFscmVhZHlD
aGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5j
aGlsZDEoKSkucHJlZGljdGlvbigpID09IFNwZWNTdHJpbmcpIHsKKyAgICAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7Ci0g
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIGlzSW50OEFycmF5U3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3Bl
Y0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Ci0g
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0
YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlzSW50
MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
ID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBT
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwg
c2l6ZW9mKGludDMyX3QpLCBpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxU
eXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhBcnJheVNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNw
ZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwot
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhf
dCksIGlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFy
cmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgQXJyYXk6
OkFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5
cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQu
Z2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZf
dCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNp
emVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChh
dChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51
aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgaXNVaW50MTZB
cnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8g
Tm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlVWludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
IHNpemVvZih1aW50MzJfdCksIGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSwgaXNGbG9hdDMy
QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/
IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcyk7Ci0g
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkg
ewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUp
LCBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVj
Q2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUuY2hpbGQzKCkpOwotCi0gICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBXZSB3aWxsIGhh
dmUgYWxyZWFkeSBzcGVjdWxhdGVkIHRoYXQgdGhlIGJhc2UgaXMgc29tZSBraW5kIG9mIGFycmF5
LAotICAgICAgICAvLyBhdCB0aGlzIHBvaW50LgotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0K
LSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7Ci0KLSAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBQdXRCeVZhbDoKLSAgICBjYXNlIFB1dEJ5VmFsU2FmZTogeworICAgIGNhc2UgUHV0
QnlWYWxBbGlhczogewogICAgICAgICBFZGdlIGNoaWxkMSA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2ppdC5ncmFwaCgpLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFhdChjaGlsZDEpLnBy
ZWRpY3Rpb24oKSB8fCAhYXQoY2hpbGQyKS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlID0gbW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKTsKKyAgICAgICAg
Ym9vbCBhbHJlYWR5SGFuZGxlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNl
IEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFn
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoIWF0KGNoaWxkMikuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6IHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlW
YWwpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMs
IGNoaWxkMSk7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIGNoaWxkMik7
CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIGNoaWxkMyk7CkBAIC0yNTE3
LDE5ICsyNDg5LDk3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuc3RyaWN0TW9kZUZvcihub2RlLmNvZGVP
cmlnaW4pID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdCwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGFscmVhZHlIYW5kbGVk
ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
YWxyZWFkeUhhbmRsZWQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsKICAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMik7Ci0gICAgICAgIGlmIChh
dChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBkYXRh
TG9nKCIgaW4gaGVyZSAiKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFz
ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisK
KyAgICAgICAgc3BlY3VsYXRlQXJyYXkoYXJyYXlNb2RlLCBjaGlsZDEsIGJhc2VSZWcpOworCisg
ICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6
CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkg
JiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgorICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVC
YXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOworCisgICAgICAgICAgICBpZiAo
bm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHNjcmF0Y2hSZWc7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBz
dG9yYWdlUmVnKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgdmFsdWUgdG8gdGhlIGFycmF5LgorICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZh
bHVlLmdwcigpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXkp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisKKyAgICAgICAgICAgIGJhc2UudXNl
KCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgp
OworICAgICAgICAKKyAgICAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KKyAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKKyAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6c3RvcmFn
ZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3Jl
IHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4K
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0
b3IpKSk7CisKKyAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1p
Z2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisKKyAgICAg
ICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
IG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2
YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpKTsKKworICAgICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheU91
dE9mQm91bmRzKSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJl
eW9uZEFycmF5Qm91bmRzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJv
dW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcs
IHZhbHVlUmVnKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAg
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVn
IGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0g
cHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIo
KTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gyLmdwcigpOwpAQCAtMjUzNywxNSAr
MjU4Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgICAgIGlmICghaXNBcmd1bWVudHNTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hp
bGQxKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAg
ICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJl
ZyksIGNoaWxkMSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpjbGFz
c0luZm9PZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cigmQXJndW1lbnRzOjpzX2luZm8pKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZEYXRhKCkpLAogICAgICAg
ICAgICAgICAgIHNjcmF0Y2hSZWcpOwpAQCAtMjU3OSwyMjUgKzI2MjAsNTEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEo
KS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKGludDhfdCksIGlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFy
cmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNo
b3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlz
SW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBO
b1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgaXNJbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChj
aGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWlu
dDhfdCksIGlzVWludDhBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1f
dHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVj
a3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50
OENsYW1wZWRBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWlu
dDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUp
ID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBV
bnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlw
ZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChh
dChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zih1aW50MTZfdCksIGlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hp
bGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlT
cGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91
bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBp
c1VpbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/
IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxv
YXQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5n
cHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCksIGlzRmxvYXQzMkFycmF5
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJh
eVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcyk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChj
aGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YoZG91YmxlKSwgaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hp
bGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlT
cGVjQ2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotCi0gICAgICAgIC8vIE1hcCBi
YXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2gg
cmVnaXN0ZXIuCi0gICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1
ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2gu
Z3ByKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUu
Z3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcp
OwotCi0gICAgICAgIHNwZWN1bGF0ZUFycmF5KGNoaWxkMSwgYmFzZVJlZyk7Ci0KLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAg
ICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMp
OwotCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgIHByb3BlcnR5LnVzZSgpOwotICAgICAg
ICB2YWx1ZS51c2UoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFn
ZS4KLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwotICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3Jh
Z2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdy
aXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotCi0g
ICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcg
dGhlIGFycmF5OyAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5l
ZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIo
MSksIHByb3BlcnR5UmVnKTsKLQotICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5r
KCZtX2ppdCk7Ci0gICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAg
Ly8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KLSAgICAgICAgbV9qaXQuc3RvcmVQdHIo
dmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbFNh
ZmUpIHsKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgYmV5b25kQXJyYXlCb3VuZHMsIHRo
aXMsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUo
KSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25Q
dXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAotICAgICAgICAgICAgICAgICAgICBO
b1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7
Ci0gICAgICAgIEVkZ2UgY2hpbGQxID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAw
KTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDEpOwotICAgICAgICBFZGdlIGNoaWxkMyA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMik7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWF0KGNoaWxkMSkucHJlZGljdGlvbigpIHx8
ICFhdChjaGlsZDIpLnByZWRpY3Rpb24oKSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUp
OworICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNj
cmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZf
dCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIEFTU0VSVChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlv
bihhdChjaGlsZDEpLnByZWRpY3Rpb24oKSkpOwotICAgICAgICBBU1NFUlQoYXQoY2hpbGQyKS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOwotCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIGNoaWxkMik7Ci0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNw
ZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIE5vVHlwZWRBcnJh
eVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3Vs
ZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIE5vVHlw
ZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEp
LnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCks
IE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChj
aGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWlu
dDhfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdChj
aGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKLSAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50
OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZih1aW50OF90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVk
QXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMkFycmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6
VWludDhBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6
VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2ln
bmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURl
c2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3Vi
bGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDE2
QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSht
X2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgTm9UeXBlZEFycmF5U3BlY0No
ZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
IAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVj
dWxhdGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBOb1R5cGVk
QXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEp
LnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxv
YXQpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRT
cGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
RmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSksIE5v
VHlwZWRBcnJheVNwZWNDaGVjayk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChhdChjaGlsZDEpLnNob3VsZFNwZWN1
bGF0ZUFycmF5KCkpOwotCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxk
Myk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAKLSAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJl
ZyA9IHNjcmF0Y2guZ3ByKCk7Ci0KLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZh
bHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNo
UmVnKTsKLQotICAgICAgICAvLyBHZXQgdGhlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9y
YWdlUmVnKTsKLQotICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgotICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgR1BSUmVn
IHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSkpOwotCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgICAgICAKKwogICAgIGNhc2UgUmVnRXhwRXhlYzogewogICAgICAg
ICBpZiAoY29tcGlsZVJlZ0V4cEV4ZWMobm9kZSkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0z
Mzg2LDgxICszMjUzLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewot
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9kZS5jaGlsZDEo
KSwgYmFzZUdQUik7Ci0KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRHUFIpOwotICAgICAg
ICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAKLSAgICAgICAg
aW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIEdldEFyZ3VtZW50c0xlbmd0aDogewotICAgICAg
ICBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKG5vZGUpOworICAgIGNhc2UgR2V0QXJyYXlMZW5n
dGg6CisgICAgICAgIGNvbXBpbGVHZXRBcnJheUxlbmd0aChub2RlKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6IHsKLSAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAg
Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7Ci0KLSAgICAgICAgaW50ZWdl
clJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgY2FzZSBHZXRJbnQ4QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5
cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCks
IG5vZGUsICFpc0ludDhBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0SW50MTZB
cnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5n
bG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0ludDE2QXJyYXlT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldEludDMyQXJyYXlMZW5ndGg6IHsKLSAgICAg
ICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNJbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBHZXRVaW50OEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFy
cmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgIWlzVWludDhBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0VWludDhDbGFt
cGVkQXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9q
aXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlz
VWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldFVpbnQxNkFy
cmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmds
b2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc1VpbnQxNkFycmF5
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRVaW50MzJBcnJheUxlbmd0aDogewotICAg
ICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQz
MkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNVaW50MzJBcnJheVNwZWN1bGF0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgR2V0RmxvYXQzMkFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRU
eXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCAhaXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdl
dEZsb2F0NjRBcnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0
aChtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlz
RmxvYXQ2NEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9CiAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOiB7
CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1bmN0aW9uKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBmdW5jdGlv
bi5ncHIoKSwgbm9kZS5mdW5jdGlvbigpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTI1OTcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1MCwxMyArMjUwLDgwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNsZWFyR2VuZXJh
dGlvbkluZm8KICAgICBtX2ZwcnMgPSBSZWdpc3RlckJhbms8RlBSSW5mbz4oKTsKIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQXJyYXkoRWRnZSBlZGdlLCBHUFJSZWcgYmFzZVJl
ZykKK2NvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVzY3JpcHRvcihBcnJh
eTo6TW9kZSBhcnJheU1vZGUpCiB7Ci0gICAgQWJzdHJhY3RWYWx1ZSYgYXJyYXlWYWx1ZSA9IG1f
c3RhdGUuZm9yTm9kZShlZGdlKTsKLSAgICBpZiAoYXJyYXlWYWx1ZS5tX3N0cnVjdHVyZS5oYXNT
aW5nbGV0b24oKQotICAgICAgICAmJiBhcnJheVZhbHVlLm1fc3RydWN0dXJlLnNpbmdsZXRvbigp
LT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvKQorICAgIHN3aXRjaCAoYXJyYXlNb2Rl
KSB7CisgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICByZXR1cm4gbV9qaXQuZ2xv
YmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV9jbGFzc0luZm87CisgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIG1faml0Lmdsb2JhbERhdGEoKS0+aW50
MTZBcnJheURlc2NyaXB0b3IoKS5tX2NsYXNzSW5mbzsKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFy
cmF5OgorICAgICAgICByZXR1cm4gbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3Jp
cHRvcigpLm1fY2xhc3NJbmZvOworICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5Ogor
ICAgICAgICByZXR1cm4gbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2Ny
aXB0b3IoKS5tX2NsYXNzSW5mbzsKKyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAg
ICAgcmV0dXJuIG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCkubV9j
bGFzc0luZm87CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBt
X2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLm1fY2xhc3NJbmZvOwor
ICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJuIG1faml0Lmdsb2Jh
bERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLm1fY2xhc3NJbmZvOworICAgIGNhc2Ug
QXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuIG1faml0Lmdsb2JhbERhdGEoKS0+
ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLm1fY2xhc3NJbmZvOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KK30KKworY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUsIEVkZ2Ug
ZWRnZSwgR1BSUmVnIGJhc2VSZWcpCit7CisgICAgVHlwZWRBcnJheURlc2NyaXB0b3IqIHJlc3Vs
dCA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKGFycmF5TW9kZSk7CisgICAgCisgICAgaWYgKG1vZGVB
bHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUoZWRnZSksIGFycmF5TW9kZSkpCiAgICAgICAg
IHJldHVybjsKICAgICAKKyAgICBDbGFzc0luZm8qIGV4cGVjdGVkQ2xhc3NJbmZvID0gMDsKKyAg
ICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKEluYWRxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICBleHBlY3Rl
ZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6c19pbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFycmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogewor
ICAgICAgICAvLyBUaGlzIGNvZGUgZHVwbGljYXRlcyB0aGUgY29kZSBiZWxvdyBpbiBhbnRpY2lw
YXRpb24gb2YgdGhpcyBjb2RlIGJlaW5nCisgICAgICAgIC8vIHN1YnN0YW50aWFsbHkgY2hhbmdl
ZCBpbiB0aGUgZnV0dXJlLgorICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAg
ICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2lu
Zm8pKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgorICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6OnNfaW5mbzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgIGNhc2UgQXJyYXk6Oklu
dDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpV
aW50OENsYW1wZWRBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICBjYXNl
IEFycmF5OjpVaW50MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9IHJl
c3VsdC0+bV9jbGFzc0luZm87CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCiAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHRlbXAuZ3ByKCkpOwpAQCAtMjY1LDcgKzMzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZUFycmF5KEVkZ2UKICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZXhwZWN0ZWRDbGFzc0lu
Zm8pKSk7CiB9CiAKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4
IG5vZGVJbmRleCkKQEAgLTE2MDEsMTEgKzE2NjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPblN0CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgaWYgKCFp
c1N0cmluZ1NwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KSB7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUpOwotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNTRVJUKG1vZGVBbHJlYWR5Q2hlY2tlZCht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIEFycmF5OjpTdHJpbmcpKTsKIAogICAgIC8v
IHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNl
cyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UKICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKQEAgLTE5OTksMjMgKzIw
NjIsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUCiAKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgoY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUmIG5vZGUsIGJvb2wgbmVlZHNTcGVj
dWxhdGlvbkNoZWNrKQotewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAKLSAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLSAgICAKLSAgICBpZiAobmVlZHNTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VH
UFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNz
SW5mbykpKTsKLSAgICAKLSAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCksIHJlc3VsdEdQUik7Ci0gICAgCi0g
ICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKLX0KLQotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNp
emUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlvblJlcXVpcmVt
ZW50cywgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcykKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFy
cmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMjAyOCwxMiArMjA3NSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CiAKLSAg
ICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVj
aykgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7Ci0g
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBBU1NFUlQobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAg
ICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKQEAgLTIwNzgsMTMgKzIxMjAs
MTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAgIGRvdWJs
ZVJlc3VsdChmcmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5v
ZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWly
ZW1lbnRzIHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWdu
ZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgcm91bmRpbmcpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2Rl
LCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5
cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKIHsKICAgICBFZGdlIGJhc2VVc2UgPSBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgIEVkZ2UgdmFsdWVVc2UgPSBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgIAotICAgIGlmIChzcGVjdWxhdGlvblJl
cXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKQotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNl
VXNlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKICAgICBHUFJU
ZW1wb3JhcnkgdmFsdWU7CiAgICAgR1BSUmVnIHZhbHVlR1BSOwogICAgIApAQCAtMjE1NSw3ICsy
MTk1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIEFT
U0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFn
ZVJlZyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHM7Ci0gICAgaWYgKHNw
ZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVNwZWNDaGVjaykKKyAgICBpZiAo
bm9kZS5vcCgpID09IFB1dEJ5VmFsKQogICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSk7CiAKICAgICBzd2l0
Y2ggKGVsZW1lbnRTaXplKSB7CkBAIC0yMTcxLDEyICsyMjExLDEyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9
IE5vVHlwZWRBcnJheVNwZWNDaGVjaykKKyAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsKQog
ICAgICAgICBvdXRPZkJvdW5kcy5saW5rKCZtX2ppdCk7CiAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0
VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgTm9kZSYg
bm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVu
dHMgc3BlY3VsYXRpb25SZXF1aXJlbWVudHMpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQogewogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMjE4NSwx
NyArMjIyNSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
LSAgICAKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlw
ZVNwZWNDaGVjaykgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSk7Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKworICAgIEFTU0VSVChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2h1bGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSk7CiAKICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogICAgIEZQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZnByKCk7Ci0gICAg
QVNTRVJUKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVNwZWNDaGVjayk7
CiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCkBAIC0yMjE5LDE1ICsyMjUzLDE0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwKICAgICBkb3VibGVS
ZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYg
bm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVu
dHMgc3BlY3VsYXRpb25SZXF1aXJlbWVudHMpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUmIG5vZGUsIHNpemVf
dCBlbGVtZW50U2l6ZSkKIHsKICAgICBFZGdlIGJhc2VVc2UgPSBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDApOwogICAgIEVkZ2UgdmFsdWVVc2UgPSBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDIpOwogICAgIAogICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVP
cCh0aGlzLCB2YWx1ZVVzZSk7CiAgICAgCi0gICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRz
ICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VVc2UuaW5kZXgo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7CisgICAgQVNTRVJU
KG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaHVsZDEoKSksIG5vZGUu
YXJyYXlNb2RlKCkpKTsKICAgICAKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
IApAQCAtMjIzNiw3ICsyMjY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5
VmFsRm9yRgogICAgIAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJl
bWVudHMgIT0gTm9UeXBlZEFycmF5U3BlY0NoZWNrKQorICAgIGlmIChub2RlLm9wKCkgPT0gUHV0
QnlWYWwpCiAgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2Us
IGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKTsKICAgICAKICAgICBzd2l0Y2ggKGVsZW1lbnRT
aXplKSB7CkBAIC0yMjUzLDcgKzIyODYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UHV0QnlWYWxGb3JGCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlT
cGVjQ2hlY2spCisgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZC
b3VuZHMubGluaygmbV9qaXQpOwogICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKIH0KQEAg
LTMwNDcsNiArMzA4MCw4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShO
b2QKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2UoTm9kZSYgbm9kZSkKIHsKKyAgICBGSVhNRQorICAgICAgICAKICAgICBBU1NFUlQoYXQobm9k
ZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKTsKICAgICBBU1NFUlQoYXQobm9kZS5jaGlsZDIoKSku
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKTsKICAgICAgICAgCkBAIC0zMjMzLDYgKzMyNjgsNTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogICAgIGludGVnZXJS
ZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2RlJiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAgIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0KKyAgICAgICAgc3BlY3VsYXRlQXJy
YXkobm9kZS5hcnJheU1vZGUoKSwgbm9kZS5jaGlsZDEoKSwgYmFzZUdQUik7CisKKyAgICBzd2l0
Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5CisgICAgY2Fz
ZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJl
c3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
TGVzc1RoYW4sIHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwor
ICAgICAgICAgICAgCisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpv
ZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6
SW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgY2Fz
ZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToK
KyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIGRl
c2NyaXB0b3ItPm1fbGVuZ3RoT2Zmc2V0KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlv
bk5vQ2hlY2soTm9kZSYgbm9kZSkKIHsKICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTI1OTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgyLDYgKzIwODIsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhOb2RlJik7CiAgICAgdm9pZCBjb21waWxl
R2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUmKTsKICAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRBcnJh
eUxlbmd0aChOb2RlJik7CisgICAgCiAgICAgdm9pZCBjb21waWxlVmFsdWVUb0ludDMyKE5vZGUm
KTsKICAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJlcihOb2RlJik7CiAgICAgdm9pZCBjb21w
aWxlRG91YmxlQXNJbnQzMihOb2RlJik7CkBAIC0yMDk1LDEyICsyMDk3LDYgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSYpOwogICAgIHZvaWQgY29tcGls
ZVNvZnRNb2R1bG8oTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgo
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlJiwgYm9vbCBuZWVkc1NwZWN1bGF0aW9u
Q2hlY2spOwotICAgIGVudW0gVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzIHsKLSAg
ICAgICAgTm9UeXBlZEFycmF5U3BlY0NoZWNrLAotICAgICAgICBOb1R5cGVkQXJyYXlUeXBlU3Bl
Y0NoZWNrLAotICAgICAgICBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcwotICAgIH07CiAgICAgZW51
bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7CiAgICAgICAgIFNpZ25lZFR5cGVkQXJyYXksCiAgICAg
ICAgIFVuc2lnbmVkVHlwZWRBcnJheQpAQCAtMjExMCwxMCArMjEwNiwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIENsYW1wUm91bmRpbmcKICAgICB9OwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50
U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVk
bmVzcyk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5
cGVkQXJyYXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYs
IHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBU
eXBlZEFycmF5U2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nID0gVHJ1bmNhdGVSb3VuZGlu
Zyk7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciYsIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlT
cGVjdWxhdGlvblJlcXVpcmVtZW50cyk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9h
dFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BS
UmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3Vs
YXRpb25SZXF1aXJlbWVudHMpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6
ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJS
ZWcgcHJvcGVydHksIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRu
ZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICB2b2lkIGNv
bXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgdm9pZCBjb21waWxlUHV0QnlWYWxG
b3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKICAgICB2b2lk
IGNvbXBpbGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1
bmN0aW9uRXhwcmVzc2lvbihOb2RlJik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2Rl
Jik7CkBAIC0yMTkxLDcgKzIxODcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCwgSlNWYWx1ZVJlZ3MsIEVkZ2UpOwogICAgIHZvaWQg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb25XaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oRXhp
dEtpbmQsIEpTVmFsdWVSZWdzLCBOb2RlSW5kZXgsIGJvb2wgaXNGb3J3YXJkKTsKICAgICAKLSAg
ICB2b2lkIHNwZWN1bGF0ZUFycmF5KEVkZ2UgYmFzZUVkZ2UsIEdQUlJlZyBiYXNlUmVnKTsKKyAg
ICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXk6
Ok1vZGUpOworICAgIAorICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBzcGVjdWxhdGVB
cnJheShBcnJheTo6TW9kZSwgRWRnZSBiYXNlRWRnZSwgR1BSUmVnIGJhc2VSZWcpOwogICAgIAog
ICAgIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgogICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50SW50
ZXJuYWwoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159846</attachid>
            <date>2012-08-21 19:46:21 -0700</date>
            <delta_ts>2012-08-21 20:23:13 -0700</delta_ts>
            <desc>almost there</desc>
            <filename>arraymode_patch_4.diff</filename>
            <type>text/plain</type>
            <size>109788</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2MjUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDEyLTA4LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgYWNjZXNzZXMgc2hvdWxkIHJlbWVtYmVyIHdoYXQga2luZCBvZiBhcnJheSB0aGV5IGFy
ZSBwcmVkaWN0ZWQgdG8gYWNjZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NDQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6OnJl
ZmluZUFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToK
KyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdBcnJh
eU1vZGUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNT
RVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVGb3JQdXQpOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9kZVdpdGhvdXRPU1JFeGl0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJyYXlNb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVw
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc0FycmF5TW9kZSk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjphcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldEFy
cmF5TW9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBl
ZEFycmF5RGVzY3JpcHRvcik6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
RmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTItMDgtMjEgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjaW5nIHRoZSBWTUluc3BlY3RvciBm
b3IgVk0gZGVidWdnaW5nIHVzZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTI1OTcxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU4
LDY1ICs4NTgsNjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7Ci0gICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRp
Y3Rpb24oKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAg
Y2FzZSBVbmRlY2lkZWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvcmNlRXhpdDoKICAgICAgICAgICAgIG1faXNW
YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KCFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSB8fCAoIW5v
ZGUuY2hpbGQzKCkgJiYgIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlQXJn
dW1lbnRzKCkpKSB7CisgICAgICAgIGNhc2UgR2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRz
KCkpIHsKKyAgICAgICAgY2FzZSBTdHJpbmc6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJndW1l
bnRzOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3Vt
ZW50cyk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnByZWRpY3Rpb24oKSA9PSBTcGVjU3RyaW5nKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgY2FzZSBKU0FycmF5OgorICAg
ICAgICBjYXNlIEpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgaGF2ZSBtb3JlIGNvbnNlcnZhdGl2ZSBoYW5kbGluZyBvZiB0aGUgb3V0LW9mLWJvdW5k
cworICAgICAgICAgICAgLy8gY2FzZS4KKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNw
ZWNTdHJpbmcpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgeworICAgICAgICBj
YXNlIEludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgeworICAgICAgICBj
YXNlIEludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7CisgICAgICAg
IGNhc2UgSW50MzJBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNJbnQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKKyAgICAg
ICAgY2FzZSBVaW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICht
X2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkp
IHsKKyAgICAgICAgY2FzZSBVaW50OENsYW1wZWRBcnJheToKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlVWludDE2QXJyYXkoKSkgeworICAgICAgICBjYXNlIFVpbnQxNkFycmF5OgogICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5KTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRT
cGVjdWxhdGVVaW50MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2UgVWludDMyQXJyYXk6CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGlmIChub2RlLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKQEAgLTkyNCw1NSAr
OTI1LDQ3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNE
b3VibGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKKyAgICAg
ICAgY2FzZSBGbG9hdDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkp
IHsKKyAgICAgICAgY2FzZSBGbG9hdDY0QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQ2NEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
ICAgICAKICAgICBjYXNlIFB1dEJ5VmFsOgotICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICBj
YXNlIFB1dEJ5VmFsU2FmZTogeworICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICBu
b2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0KICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIW1fZ3JhcGhbY2hpbGQxXS5w
cmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAg
c3dpdGNoIChtb2RlRm9yUHV0KG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6OkZvcmNlRXhpdDoKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX2dyYXBoW2NoaWxkMl0uc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIHx8
IG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKQotI2VuZGlmCi0gICAg
ICAgICAgICApIHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlWYWwgfHwg
bm9kZS5vcCgpID09IFB1dEJ5VmFsU2FmZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2sp
OwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFd
LnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJy
YXk6CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjQXJndW1lbnRzKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dy
YXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBB
cnJheTo6SW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
SW50OEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQpAQCAtOTgwLDggKzk3Myw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsK
KyAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQxKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC05ODksOCArOTgxLDcgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0
ZUludDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CiAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKQEAgLTk5OCw4ICs5ODksNyBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxk
MV0uc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OEFy
cmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpA
QCAtMTAwNyw4ICs5OTcsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkg
eworICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dy
YXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtMTAxNiw4ICsxMDA1LDcg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtjaGls
ZDFdLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
VWludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50
MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkKQEAgLTEwMjUsOCArMTAxMyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7
CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDEpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC0xMDM0LDIzICsxMDIxLDIwIEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRT
cGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3Vs
YXRlRmxvYXQ2NEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5Ogog
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjRmxvYXQ2NEFycmF5KTsKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbFNhZmUpCi0gICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzNDYsNjkgKzEzMzAsODIgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBHZXRBcmd1bWVudHNMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50
cyk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAg
c3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRl
ZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIG1faXNWYWxpZCA9
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQo
IWlzU3RyaW5nU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgICAgICBub2RlLnNl
dENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9m
Qm91bmRzOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0FyZ3VtZW50cyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNw
ZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0ludDhBcnJheVNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0lu
dDE2QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwor
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoIWlzSW50MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNw
ZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhB
cnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50OEFycmF5U3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCghaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjVWludDhDbGFtcGVkQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQxNkFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQxNkFycmF5U3Bl
Y3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7CisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgICAgICBub2RlLnNldENh
bkV4aXQoIWlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1Vp
bnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmxvYXQzMkFycmF5U3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgh
aXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0NjRB
cnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAotICAgIGNhc2Ug
R2V0U3RyaW5nTGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzU3RyaW5nU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2Ug
R2V0SW50OEFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzSW50OEFycmF5
U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhBcnJheSk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
ZXRJbnQxNkFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzSW50MTZBcnJh
eVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdldEludDMyQXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNJbnQzMkFy
cmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwotICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR2V0VWludDhBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQ4
QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KCFpc1VpbnQ4Q2xhbXBlZEFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4
Q2xhbXBlZEFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldFVpbnQxNkFycmF5TGVuZ3RoOgotICAgICAg
ICBub2RlLnNldENhbkV4aXQoIWlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjVWludDE2QXJyYXkpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR2V0VWludDMyQXJyYXlMZW5ndGg6Ci0g
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRGbG9hdDMyQXJyYXlMZW5n
dGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldEZsb2F0NjRB
cnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0Zsb2F0NjRBcnJheVNwZWN1
bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwotICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVy
ZTogewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRo
ZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCkBAIC0xNDQ2
LDY1ICsxNDQzLDQ1IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90
IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZTogewotICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCkpOwotICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMigpXS5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpOwogICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMs
IGJ1dCB0aGlzIGlzIChhbG1vc3QpIGFsd2F5cyBmb2xsb3dlZCBieSBHZXRCeVZhbCwgd2hpY2gg
ZG9lcyBleGl0LiBTbyBubyBwb2ludCBpbiB0cnlpbmcgdG8gYmUgbW9yZSBwcmVjaXNlLgotICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMo
KSkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCkgPT0gU3BlY1N0cmluZykgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkp
IHsKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJy
YXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBjYXNlIEFycmF5
OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgZmlsdGVy
IGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2FudCB0byBhZGQKKyAgICAg
ICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9ucywgYnV0IHdl
IGRvbid0IGhhdmUgdGhhdCwgeWV0LgorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
YXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNJbnQ4QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNJbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVh
cigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjSW50MzJBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
Y2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgeworICAgICAg
ICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OENsYW1wZWRBcnJheSgp
KSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhD
bGFtcGVkQXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1VpbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICht
X2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXko
KSkgeworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxv
YXQ2NEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgogICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0NjRBcnJheSk7Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigp
OwogICAgICAgICBicmVhazsgCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR0FycmF5TW9kZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5TW9kZXMgbW9kZXMs
IGJvb2wgbWFrZVNhZmUpCit7CisgICAgLy8gRklYTUU6IHdlIG1heSB3YW50IHRvIGFkZCBzb21l
IHBvbHltb3JwaGljIHN1cHBvcnQgaW4gdGhlIGZ1dHVyZS4gVGhhdCdzIHdoeSB0aGlzCisgICAg
Ly8gaXMgYSBzd2l0Y2ggc3RhdGVtZW50IHJpZ2h0IG5vdy4KKyAgICAKKyAgICBzd2l0Y2ggKG1v
ZGVzKSB7CisgICAgY2FzZSAwOgorICAgICAgICByZXR1cm4gQXJyYXk6OkZvcmNlRXhpdDsKKyAg
ICBjYXNlIElzSlNBcnJheToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkpTQXJy
YXlPdXRPZkJvdW5kcyA6IEFycmF5OjpKU0FycmF5OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBVbmRlY2lkZWQ7CisgICAgfQorfQorCitBcnJheTo6TW9kZSByZWZpbmVBcnJheU1vZGUo
QXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlw
ZSBpbmRleCkKK3sKKyAgICBpZiAoIWJhc2UgfHwgIWluZGV4KSB7CisgICAgICAgIC8vIFRoZSBv
bmx5IGNhc2UgaW4gd2hpY2ggdGhlcmUgY2FuIGJlIG5vIHByZWRpY3Rpb25zIGlzIGlmIHRoaXMg
Y29kZSBoYXNuJ3QKKyAgICAgICAgLy8gZXhlY3V0ZWQsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxk
IGhhdmUgYWxyZWFkeSBzZXQgdGhpcyB0byBGb3JjZUV4aXQuCisgICAgICAgIEFTU0VSVChhcnJh
eU1vZGUgPT0gQXJyYXk6OkZvcmNlRXhpdCk7CisgICAgICAgIHJldHVybiBBcnJheTo6Rm9yY2VF
eGl0OworICAgIH0KKyAgICAKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihpbmRleCkgfHwg
IWlzQ2VsbFNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OkdlbmVyaWM7
CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6CisgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiBhcnJheU1vZGU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGJhc2Up
KQorICAgICAgICByZXR1cm4gQXJyYXk6OlN0cmluZzsKKyAgICAKKyAgICBpZiAoaXNBcmd1bWVu
dHNTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpBcmd1bWVudHM7Cisg
ICAgCisgICAgaWYgKGlzSW50OEFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVy
biBBcnJheTo6SW50OEFycmF5OworICAgIAorICAgIGlmIChpc0ludDE2QXJyYXlTcGVjdWxhdGlv
bihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpJbnQxNkFycmF5OworICAgIAorICAgIGlm
IChpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpJ
bnQzMkFycmF5OworICAgIAorICAgIGlmIChpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkK
KyAgICAgICAgcmV0dXJuIEFycmF5OjpVaW50OEFycmF5OworICAgIAorICAgIGlmIChpc1VpbnQ4
Q2xhbXBlZEFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6VWlu
dDhDbGFtcGVkQXJyYXk7CisgICAgCisgICAgaWYgKGlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihi
YXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVaW50MTZBcnJheTsKKyAgICAKKyAgICBpZiAo
aXNVaW50MzJBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OlVp
bnQzMkFycmF5OworICAgIAorICAgIGlmIChpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKGJhc2Up
KQorICAgICAgICByZXR1cm4gQXJyYXk6OkZsb2F0MzJBcnJheTsKKyAgICAKKyAgICBpZiAoaXNG
bG9hdDY0QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpGbG9h
dDY0QXJyYXk7CisgICAgCisgICAgcmV0dXJuIEFycmF5OjpHZW5lcmljOworfQorCitib29sIG1v
ZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgQXJyYXk6Ok1vZGUgYXJyYXlN
b2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBcnJheTo6R2VuZXJp
YzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkZvcmNl
RXhpdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpT
dHJpbmc6CisgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgY2FzZSBBcnJheTo6SlNB
cnJheU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gdmFsdWUubV9zdHJ1Y3R1cmUuaGFzU2lu
Z2xldG9uKCkKKyAgICAgICAgICAgICYmIHZhbHVlLm1fc3RydWN0dXJlLnNpbmdsZXRvbigpLT5j
bGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOworICAgICAgICAKKyAgICBjYXNlIEFycmF5
OjpBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVl
Lm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAg
cmV0dXJuIGlzSW50OEFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIGlzSW50MTZBcnJheVNw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkludDMy
QXJyYXk6CisgICAgICAgIHJldHVybiBpc0ludDMyQXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICByZXR1
cm4gaXNVaW50OEFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBpc1VpbnQ4QXJy
YXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpV
aW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIGlzVWludDE2QXJyYXlTcGVjdWxhdGlvbih2YWx1
ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAg
ICAgcmV0dXJuIGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworCisgICAg
Y2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gaXNGbG9hdDMyQXJyYXlT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworCisgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5
OgorICAgICAgICByZXR1cm4gaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUp
OworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2NvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2RlKQoreworICAg
IHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgcmV0
dXJuICJVbmRlY2lkZWQiOworICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgIHJldHVy
biAiR2VuZXJpYyI7CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICByZXR1cm4gIlN0
cmluZyI7CisgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgcmV0dXJuICJKU0FycmF5
IjsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAi
SlNBcnJheU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAg
IHJldHVybiAiQXJndW1lbnRzIjsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAg
IHJldHVybiAiSW50OEFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAg
ICByZXR1cm4gIkludDE2QXJyYXkiOworICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAg
ICAgIHJldHVybiAiSW50MzJBcnJheSI7CisgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAg
ICAgICAgcmV0dXJuICJVaW50OEFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToK
KyAgICAgICAgcmV0dXJuICJVaW50MTZBcnJheSI7CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJy
YXk6CisgICAgICAgIHJldHVybiAiVWludDMyQXJyYXkiOworICAgIGNhc2UgQXJyYXk6OkZsb2F0
MzJBcnJheToKKyAgICAgICAgcmV0dXJuICJGbG9hdDMyQXJyYXkiOworICAgIGNhc2UgQXJyYXk6
OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuICJGbG9hdDY0QXJyYXkiOworICAgIGRlZmF1
bHQ6CisgICAgICAgIC8vIEJldHRlciB0byByZXR1cm4gc29tZXRoaW5nIHRoZW4gaXQgaXMgdG8g
Y3Jhc2guIFJlbWVtYmVyLCB0aGlzIG1ldGhvZAorICAgICAgICAvLyBpcyBiZWluZyBjYWxsZWQg
ZnJvbSBvdXIgbWFpbiBkaWFnbm9zdGljIHRvb2wsIHRoZSBJUiBkdW1wZXIuIEl0J3MgbGlrZQor
ICAgICAgICAvLyBhIHN0YWNrIHRyYWNlLiBTbyBpZiB3ZSBnZXQgaGVyZSB0aGVuIHByb2JhYmx5
IHNvbWV0aGluZyBoYXMgYWxyZWFkeQorICAgICAgICAvLyBnb25lIHdyb25nLgorICAgICAgICBy
ZXR1cm4gIlVua25vd24hIjsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Fy
cmF5TW9kZV9oCisjZGVmaW5lIERGR0FycmF5TW9kZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgi
CisjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBBYnN0cmFjdFZhbHVlOworCisvLyBVc2UgYSBuYW1lc3BhY2UgKyBl
bnVtIGluc3RlYWQgb2YgZW51bSBhbG9uZSB0byBhdm9pZCB0aGUgbmFtZXNwYWNlIGNvbGxpc2lv
bgorLy8gdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIsIHNpbmNlIHdlIHNheSB0aGluZ3MgbGlr
ZSAiSW50OEFycmF5IiBhbmQgIkpTQXJyYXkiCisvLyBpbiBsb3RzIG9mIG90aGVyIHBsYWNlcywg
dG8gbWVhbiBzdWJ0bHkgZGlmZmVyZW50IHRoaW5ncy4KK25hbWVzcGFjZSBBcnJheSB7CitlbnVt
IE1vZGUgeworICAgIFVuZGVjaWRlZCwgLy8gSW1wbGllcyB0aGF0IHdlIG5lZWQgcHJlZGljdGlv
bnMgdG8gZGVjaWRlLiBXZSB3aWxsIG5ldmVyIGdldCB0byB0aGUgYmFja2VuZCBpbiB0aGlzIG1v
ZGUuCisgICAgRm9yY2VFeGl0LCAvLyBJbXBsaWVzIHRoYXQgd2UgaGF2ZSBubyBpZGVhIGhvdyB0
byBleGVjdXRlIHRoaXMgb3BlcmF0aW9uLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAg
IEdlbmVyaWMsCisgICAgU3RyaW5nLAorICAgIEpTQXJyYXksCisgICAgSlNBcnJheU91dE9mQm91
bmRzLAorICAgIEFyZ3VtZW50cywKKyAgICBJbnQ4QXJyYXksCisgICAgSW50MTZBcnJheSwKKyAg
ICBJbnQzMkFycmF5LAorICAgIFVpbnQ4QXJyYXksCisgICAgVWludDE2QXJyYXksCisgICAgVWlu
dDMyQXJyYXksCisgICAgRmxvYXQzMkFycmF5LAorICAgIEZsb2F0NjRBcnJheQorfTsKK30gLy8g
bmFtZXNwYWNlIEFycmF5CisKK0FycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheU1vZGVzIG1v
ZGVzLCBib29sIG1ha2VTYWZlKTsKKworQXJyYXk6Ok1vZGUgcmVmaW5lQXJyYXlNb2RlKEFycmF5
OjpNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBpbmRleCk7CisKK2Jv
b2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmLCBBcnJheTo6TW9kZSk7CisKK2Nv
bnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CisKK2lubGluZSBib29sIGNhbkNT
RVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2Rl
KSB7CisgICAgY2FzZSBVbmRlY2lkZWQ6CisgICAgY2FzZSBGb3JjZUV4aXQ6CisgICAgY2FzZSBH
ZW5lcmljOgorICAgIGNhc2UgQXJndW1lbnRzOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitpbmxpbmUgQXJyYXk6
Ok1vZGUgbW9kZUZvclB1dChBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIHJldHVybiBBcnJh
eTo6R2VuZXJpYzsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNhc2UgQXJyYXk6OkFyZ3Vt
ZW50czoKKyAgICAgICAgcmV0dXJuIEFycmF5OjpHZW5lcmljOworI2VuZGlmCisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGFycmF5TW9kZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
QXJyYXlNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyNTk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhbGxMaW5r
U3RhdHVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQXJyYXlNb2Rl
LmgiCiAjaW5jbHVkZSAiREZHQnl0ZUNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxp
dGllcy5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTgxNiw2ICs4MTcsMzQgQEAg
cHJpdmF0ZToKICAgICB7CiAgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6
ZSgpLCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCk7CiAgICAgfQorICAgIAorICAgIEFycmF5OjpN
b2RlIGdldEFycmF5TW9kZVdpdGhvdXRPU1JFeGl0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCisgICAgeworICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbigpOworICAgICAgICBpZiAocHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1
cmUoKSkKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChwcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIGJhc2Up
OworICAgICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisg
ICAgICAgIGRhdGFMb2coIlNsb3cgY2FzZSBwcm9maWxlIGZvciBiYyMldTogJXVcbiIsIG1fY3Vy
cmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyNlbmRp
ZgorICAgICAgICAKKyAgICAgICAgYm9vbCBtYWtlU2FmZSA9CisgICAgICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNsb3dDYXNlKG1fY3VycmVudElu
ZGV4KQorICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3V0T2ZCb3VuZHMpOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIGZyb21PYnNlcnZlZChwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSwgbWFrZVNh
ZmUpOworICAgIH0KKyAgICAKKyAgICBBcnJheTo6TW9kZSBnZXRBcnJheU1vZGUoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIEFycmF5OjpNb2RlIHJlc3Vs
dCA9IGdldEFycmF5TW9kZVdpdGhvdXRPU1JFeGl0KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgIAorICAgICAgICBpZiAocmVzdWx0ID09IEFycmF5OjpGb3JjZUV4aXQpCisgICAgICAgICAg
ICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KIAogICAgIE5vZGVJbmRleCBtYWtlU2FmZShOb2RlSW5kZXggbm9kZUluZGV4
KQogICAgIHsKQEAgLTE1NDgsOCArMTU3Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUludHJpbnNpYyhib28KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAg
ICAgIGludCBpbmRleE9wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDEpOwotICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQp
KTsKLSAgICAgICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29k
ZUF0LCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGluZGV4T3BlcmFuZCksIHN0b3JhZ2Up
OworICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJDb2Rl
QXQsIE9wSW5mbyhBcnJheTo6U3RyaW5nKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihp
bmRleE9wZXJhbmQpKTsKIAogICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHNl
dChyZXN1bHRPcGVyYW5kLCBjaGFyQ29kZSk7CkBAIC0xNTY1LDggKzE1OTMsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMSk7Ci0gICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gYWRkVG9HcmFwaChH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGlu
ZGV4T3BlcmFuZCkpOwotICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0
cmluZ0NoYXJBdCwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpLCBz
dG9yYWdlKTsKKyAgICAgICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdD
aGFyQXQsIE9wSW5mbyhBcnJheTo6U3RyaW5nKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQz
MihpbmRleE9wZXJhbmQpKTsKIAogICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAg
IHNldChyZXN1bHRPcGVyYW5kLCBjaGFyQ29kZSk7CkBAIC0yMTQ3LDQxICsyMTc0LDI2IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9n
ZXRfYnlfdmFsOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0
UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCisgICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJh
eU1vZGUgPSBnZXRBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uKTsKICAgICAgICAgICAgIE5v
ZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAg
ICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwotICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAocHJvZmlsZS0+aGFzRGVmaW5p
dGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJl
LCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1
cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2UgPSBh
ZGRUb0dyYXBoKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHByb3BlcnR5KTsKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5m
bygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlLCBwcm9wZXJ0eSwgcHJvcGVydHlTdG9yYWdl
KTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWws
IE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHByb3BlcnR5KTsK
ICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZh
bCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV92YWwpOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7CisgICAgICAgICAgICBBcnJheTo6TW9k
ZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggdmFs
dWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51LmFycmF5UHJvZmlsZTsKLSAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbigpOwotICAgICAgICAgICAgaWYgKHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJl
KCkpCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KHByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgYmFz
ZSk7Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAg
ICAgICBkYXRhTG9nKCJTbG93IGNhc2UgcHJvZmlsZSBmb3IgYmMjJXU6ICV1XG4iLCBtX2N1cnJl
bnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7Ci0jZW5kaWYK
LQotICAgICAgICAgICAgYm9vbCBtYWtlU2FmZSA9Ci0gICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRl
eCkKLSAgICAgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICAKICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQocHJvcGVydHkpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQodmFsdWUpOwotICAgICAg
ICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG1ha2VTYWZlID8gUHV0QnlWYWxTYWZlIDog
UHV0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKDApKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
Tm9kZTo6VmFyQXJnLCBQdXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbygwKSk7CiAK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV92YWwpOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9u
IDEyNTk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDk3ICs3NCw4NyBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAgICAg
IE5vZGUqIG5vZGVQdHIgPSAmbm9kZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFp
c0ludDMyU3BlY3VsYXRpb24obV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRl
bnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGJvb2wg
aXNBcnJheSA9IGlzQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRp
Y3Rpb24oKSk7Ci0gICAgICAgICAgICBib29sIGlzQXJndW1lbnRzID0gaXNBcmd1bWVudHNTcGVj
dWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAg
ICBib29sIGlzU3RyaW5nID0gaXNTdHJpbmdTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBib29sIGlzSW50OEFycmF5ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKTsKLSAgICAgICAgICAg
IGJvb2wgaXNJbnQxNkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVJbnQxNkFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlzSW50MzJBcnJheSA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpOwotICAgICAgICAgICAg
Ym9vbCBpc1VpbnQ4QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0
ZVVpbnQ4QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNVaW50OENsYW1wZWRBcnJheSA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKTsK
LSAgICAgICAgICAgIGJvb2wgaXNVaW50MTZBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
c2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNVaW50MzJB
cnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXko
KTsKLSAgICAgICAgICAgIGJvb2wgaXNGbG9hdDMyQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc0Zs
b2F0NjRBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2
NEFycmF5KCk7Ci0gICAgICAgICAgICBpZiAoIWlzQXJyYXkgJiYgIWlzQXJndW1lbnRzICYmICFp
c1N0cmluZyAmJiAhaXNJbnQ4QXJyYXkgJiYgIWlzSW50MTZBcnJheSAmJiAhaXNJbnQzMkFycmF5
ICYmICFpc1VpbnQ4QXJyYXkgJiYgIWlzVWludDhDbGFtcGVkQXJyYXkgJiYgIWlzVWludDE2QXJy
YXkgJiYgIWlzVWludDMyQXJyYXkgJiYgIWlzRmxvYXQzMkFycmF5ICYmICFpc0Zsb2F0NjRBcnJh
eSkKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlUHRyLT5pZGVu
dGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nKCIgIEAldSAtPiAlcyIs
IG1fY29tcGlsZUluZGV4LCBpc0FycmF5ID8gIkdldEFycmF5TGVuZ3RoIiA6ICJHZXRTdHJpbmdM
ZW5ndGgiKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKGlzQXJyYXkpIHsKLSAgICAgICAgICAg
ICAgICBub2RlLnNldE9wKEdldEFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5j
bGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVy
ZWYobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFy
cmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwot
ICAgICAgICAgICAgICAgIGlmICghYXJyYXlQcm9maWxlKQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCisgICAgICAg
ICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlUHRyLT5jb2RlT3JpZ2lu
KS0+Z2V0QXJyYXlQcm9maWxlKAorICAgICAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0g
QXJyYXk6OlVuZGVjaWRlZDsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsKICAgICAg
ICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwotICAg
ICAgICAgICAgICAgIGlmICghYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENoZWNr
U3RydWN0dXJlLCBub2RlLmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgbm9kZS5jaGlsZDEoKS5pbmRl
eCgpKTsKLSAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKLSAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggY2hlY2tTdHJ1Y3R1cmVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwotICAg
ICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrU3RydWN0dXJlKTsKLSAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGNoZWNrU3RydWN0dXJl
SW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3Ry
dWN0dXJlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobm9kZVB0ci0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENoZWNrU3Ry
dWN0dXJlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIG5vZGVQdHItPmNoaWxkMSgp
LmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBtX2dyYXBo
LnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1
cmUpOworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleElu
QmxvY2ssIGNoZWNrU3RydWN0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBub2RlUHRy
ID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBhcnJheU1vZGUgPSBmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLT5vYnNlcnZlZEFy
cmF5TW9kZXMoKSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJyYXlNb2Rl
ID0gcmVmaW5lQXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIGFycmF5TW9kZSwKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkdlbmVyaWM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldE9wKEdldEFycmF5TGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwor
ICAgICAgICAgICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7Cisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNBcmd1bWVudHMpCi0gICAg
ICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRBcmd1bWVudHNMZW5ndGgpOwotICAgICAgICAgICAg
ZWxzZSBpZiAoaXNTdHJpbmcpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRTdHJpbmdM
ZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQ4QXJyYXkpCi0gICAgICAgICAgICAg
ICAgbm9kZS5zZXRPcChHZXRJbnQ4QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAo
aXNJbnQxNkFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0SW50MTZBcnJheUxl
bmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0ludDMyQXJyYXkpCi0gICAgICAgICAgICAg
ICAgbm9kZS5zZXRPcChHZXRJbnQzMkFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KGlzVWludDhBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldFVpbnQ4QXJyYXlM
ZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50OENsYW1wZWRBcnJheSkKLSAgICAg
ICAgICAgICAgICBub2RlLnNldE9wKEdldFVpbnQ4Q2xhbXBlZEFycmF5TGVuZ3RoKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGlzVWludDE2QXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRP
cChHZXRVaW50MTZBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1VpbnQzMkFy
cmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0VWludDMyQXJyYXlMZW5ndGgpOwot
ICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG9hdDMyQXJyYXkpCi0gICAgICAgICAgICAgICAgbm9k
ZS5zZXRPcChHZXRGbG9hdDMyQXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNG
bG9hdDY0QXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRGbG9hdDY0QXJyYXlM
ZW5ndGgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgLy8gTm8gbG9uZ2VyIE11c3RHZW5lcmF0ZQotICAgICAgICAg
ICAgQVNTRVJUKG5vZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAgICAgICAg
bm9kZS5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgbV9ncmFwaC5k
ZXJlZihtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIGlmICgh
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkKLSAgICAgICAgICAgICAgICB8fCAh
bV9ncmFwaFtub2RlLmNoaWxkMigpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAg
ICAgICAgICB8fCBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50
cygpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwot
ICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDIobm9kZSk7Ci0gICAgICAgICAg
ICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQzKG5vZGUpOwotICAgICAgICAgICAgICAg
IG5vZGUuc2V0UmVmQ291bnQoMCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBub2RlLnNl
dEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICByZWZpbmVBcnJheU1vZGUoCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgLy8gUHJlZGljdGlv
bnMgc2hvdWxkIG9ubHkgYmVjb21lIG1vcmUsIHJhdGhlciB0aGFuIGxlc3MsIHJlZmluZWQuIEhl
bmNlCisgICAgICAgICAgICAvLyBpZiB3ZSB3ZXJlIGV2ZXIgYWJsZSB0byBDU0UgdGhlIHN0b3Jh
Z2UgcG9pbnRlciBmb3IgdGhpcyBvcGVyYXRpb24sCisgICAgICAgICAgICAvLyB0aGVuIHdlIHNo
b3VsZCBhbHdheXMgY29udGludWUgdG8gYmUgYWJsZSB0byBkbyBzby4KKyAgICAgICAgICAgIEFT
U0VSVChjYW5DU0VTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgU3RyaW5n
Q2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAgICAgICAgICAgIGlm
ICghIW5vZGUuY2hpbGQzKCkgJiYgbV9ncmFwaFtub2RlLmNoaWxkMygpXS5vcCgpID09IE5vcCkK
LSAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygpID0gRWRnZSgpOworICAgICAg
ICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgcmVmaW5lQXJyYXlNb2Rl
KAorICAgICAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLAorICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGNhbkNTRVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMygpXSkKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ub3AoKSA9PSBHZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHVzZSB0aGUgbm9kZSByZWZlcmVuY2UgYWZ0ZXIgd2Ug
ZG8gdGhlIGFwcGVuZC4KKyAgICAgICAgICAgICAgICAgICAgTm9kZSBnZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlKAorICAgICAgICAgICAgICAgICAgICAgICAgR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSwgbm9kZS5jb2RlT3JpZ2luLCBPcEluZm8obm9kZS5hcnJheU1vZGUoKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuY2hpbGQyKCkuaW5k
ZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5j
aGlsZHJlbi5jaGlsZDMoKSA9IEVkZ2UoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoZ2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2luZGV4
SW5CbG9jaywgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFNlZSBhYm92ZS4g
Q29udGludWVkIGZpeHVwIG9mIHRoZSBncmFwaCBzaG91bGQgbm90IHJlZ3Jlc3Mgb3VyIGFiaWxp
dHkKKyAgICAgICAgICAgICAgICAvLyB0byBzcGVjdWxhdGUuCisgICAgICAgICAgICAgICAgQVNT
RVJUKCFtX2dyYXBoW25vZGUuY2hpbGQzKCldKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyNTk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDg2LDQ4ICs0ODYsMjAgQEAgcHVi
bGljOgogICAgIAogICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKICAgICB7Ci0gICAg
ICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKLSAgICAg
ICAgICAgIGlmICghYXQodmFyQXJnQ2hpbGQobm9kZSwgMSkpLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gYXQodmFyQXJnQ2hpbGQobm9kZSwgMCkpLnByZWRpY3Rpb24o
KTsKLSAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24o
cHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFB1dEJ5
VmFsU2FmZTogewotICAgICAgICAgICAgaWYgKCFhdCh2YXJBcmdDaGlsZChub2RlLCAxKSkuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhdCh2YXJBcmdDaGlsZChub2Rl
LCAwKSkucHJlZGljdGlvbigpOwotICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVNdXRhYmxl
QXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBpZiAoaXNBcnJheVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAg
ICAgICAgICBpZiAoIWF0KHZhckFyZ0NoaWxkKG5vZGUsIDEpKS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IGF0KHZhckFyZ0NoaWxkKG5vZGUsIDApKS5wcmVkaWN0aW9u
KCk7Ci0gICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRC
eVZhbDogewotICAgICAgICAgICAgaWYgKCFhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24o
KTsKLSAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0
aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9k
ZSgpKSB7CisgICAgICAgIGNhc2UgR2VuZXJpYzoKKyAgICAgICAgY2FzZSBKU0FycmF5T3V0T2ZC
b3VuZHM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgU3RyaW5nOgor
ICAgICAgICAgICAgcmV0dXJuIG5vZGUub3AoKSA9PSBHZXRCeVZhbDsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBjYXNlIEFyZ3VtZW50czoKKyAgICAgICAgICAgIGlmIChub2RlLm9w
KCkgPT0gR2V0QnlWYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEyNTk3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MTgsNiArNzE4LDM0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvOwog
ICAgIH0KICAgICAKKyAgICBib29sIGhhc0FycmF5TW9kZSgpCisgICAgeworICAgICAgICBzd2l0
Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgorICAg
ICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGNh
c2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUo
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FycmF5TW9kZSgpKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEFycmF5OjpNb2RlPihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0QXJyYXlNb2RlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNBcnJheU1vZGUoKSk7CisgICAgICAgIG1fb3BJbmZvID0gYXJyYXlNb2RlOworICAg
IH0KKyAgICAKICAgICBib29sIGhhc1ZpcnR1YWxSZWdpc3RlcigpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEyNTk3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTEzLDcgKzExMyw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICAvKiBvcGNvZGVzIHVzZSBWYXJBcmdzIGJlYXVzZSB0aGV5IG1heSBoYXZlIHVwIHRvIDQgY2hp
bGRyZW4uICovXAogICAgIG1hY3JvKEdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKFB1dEJ5VmFsLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCi0gICAgbWFj
cm8oUHV0QnlWYWxTYWZlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2Rl
TWlnaHRDbG9iYmVyKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKEdldEJ5
SWQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkg
XAogICAgIG1hY3JvKEdldEJ5SWRGbHVzaCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCkBAIC0xNDIsMTcgKzE0MSw2IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpT
KSBcCiAgICAgbWFjcm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhHZXRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0QXJndW1l
bnRzTGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRTdHJpbmdMZW5ndGgs
IE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKEdldEludDhBcnJheUxlbmd0aCwgTm9kZVJl
c3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0SW50MTZBcnJheUxlbmd0aCwgTm9kZVJlc3VsdElu
dDMyKSBcCi0gICAgbWFjcm8oR2V0SW50MzJBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBc
Ci0gICAgbWFjcm8oR2V0VWludDhBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAg
bWFjcm8oR2V0VWludDhDbGFtcGVkQXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAg
IG1hY3JvKEdldFVpbnQxNkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNy
byhHZXRVaW50MzJBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0
RmxvYXQzMkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRGbG9h
dDY0QXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEdldFNjb3BlQ2hh
aW4sIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldFNjb3BlZFZhciwgTm9kZVJlc3VsdEpT
IHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dFNjb3BlZFZhciwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTI1OTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMiwxNyArNjEy
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6
CiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0QXJndW1lbnRz
TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEludDhBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBH
ZXRJbnQxNkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEludDMyQXJyYXlMZW5ndGg6Ci0g
ICAgICAgIGNhc2UgR2V0VWludDhBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50OENs
YW1wZWRBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50MTZBcnJheUxlbmd0aDoKLSAg
ICAgICAgY2FzZSBHZXRVaW50MzJBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRGbG9hdDMy
QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOgotICAgICAg
ICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgogICAg
ICAgICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoK
QEAgLTYzNyw3ICs2MjYsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApXS5tZXJnZUZs
YWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwg
Tm9kZVVzZWRBc0ludCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAyKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxMjU5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc0LDEyICsyMzc0LDEzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IEdldEJ5VmFsOiB7Ci0gICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkgfHwgIWF0KG5vZGUu
Y2hpbGQxKCkpLnByZWRpY3Rpb24oKSB8fCAhYXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigp
KSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRl
Q292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS5h
cnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZHF1YXRlQ292ZXJh
Z2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKCFhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkgfHwgKCFub2RlLmNoaWxkMygpICYmICFhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzog
ewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwogICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtMjM5MiwxMjAg
KzIzOTMsOTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOworICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgorICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5j
aGlsZDIoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUu
Y2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJh
c2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugd2lsbCBoYXZlIGFscmVh
ZHkgc3BlY3VsYXRlZCB0aGF0IHRoZSBiYXNlIGlzIHNvbWUga2luZCBvZiBhcnJheSwKKyAgICAg
ICAgICAgIC8vIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAgICBBU1NFUlQobW9kZUFscmVhZHlD
aGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5j
aGlsZDEoKSkucHJlZGljdGlvbigpID09IFNwZWNTdHJpbmcpIHsKKyAgICAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7Ci0g
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIGlzSW50OEFycmF5U3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3Bl
Y0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Ci0g
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0
YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlzSW50
MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
ID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBT
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwg
c2l6ZW9mKGludDMyX3QpLCBpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxU
eXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhBcnJheVNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNw
ZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwot
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhf
dCksIGlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFy
cmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgQXJyYXk6
OkFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5
cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQu
Z2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZf
dCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNp
emVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChh
dChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51
aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgaXNVaW50MTZB
cnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8g
Tm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlVWludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
IHNpemVvZih1aW50MzJfdCksIGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSwgaXNGbG9hdDMy
QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/
IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcyk7Ci0g
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkg
ewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUp
LCBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVj
Q2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUuY2hpbGQzKCkpOwotCi0gICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBXZSB3aWxsIGhh
dmUgYWxyZWFkeSBzcGVjdWxhdGVkIHRoYXQgdGhlIGJhc2UgaXMgc29tZSBraW5kIG9mIGFycmF5
LAotICAgICAgICAvLyBhdCB0aGlzIHBvaW50LgotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0K
LSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7Ci0KLSAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBQdXRCeVZhbDoKLSAgICBjYXNlIFB1dEJ5VmFsU2FmZTogeworICAgIGNhc2UgUHV0
QnlWYWxBbGlhczogewogICAgICAgICBFZGdlIGNoaWxkMSA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2ppdC5ncmFwaCgpLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFhdChjaGlsZDEpLnBy
ZWRpY3Rpb24oKSB8fCAhYXQoY2hpbGQyKS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlID0gbW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKTsKKyAgICAgICAg
Ym9vbCBhbHJlYWR5SGFuZGxlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNl
IEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFn
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoIWF0KGNoaWxkMikuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6IHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlW
YWwpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMs
IGNoaWxkMSk7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIGNoaWxkMik7
CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIGNoaWxkMyk7CkBAIC0yNTE3
LDE5ICsyNDg5LDk3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuc3RyaWN0TW9kZUZvcihub2RlLmNvZGVP
cmlnaW4pID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdCwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGFscmVhZHlIYW5kbGVk
ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
YWxyZWFkeUhhbmRsZWQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsKICAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMik7Ci0gICAgICAgIGlmIChh
dChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBkYXRh
TG9nKCIgaW4gaGVyZSAiKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFz
ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisK
KyAgICAgICAgc3BlY3VsYXRlQXJyYXkoYXJyYXlNb2RlLCBjaGlsZDEsIGJhc2VSZWcpOworCisg
ICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6
CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkg
JiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgorICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVC
YXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOworCisgICAgICAgICAgICBpZiAo
bm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHNjcmF0Y2hSZWc7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBz
dG9yYWdlUmVnKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgdmFsdWUgdG8gdGhlIGFycmF5LgorICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZh
bHVlLmdwcigpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXkp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisKKyAgICAgICAgICAgIGJhc2UudXNl
KCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgp
OworICAgICAgICAKKyAgICAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KKyAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKKyAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6c3RvcmFn
ZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3Jl
IHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4K
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0
b3IpKSk7CisKKyAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1p
Z2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisKKyAgICAg
ICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
IG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2
YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpKTsKKworICAgICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheU91
dE9mQm91bmRzKSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJl
eW9uZEFycmF5Qm91bmRzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJv
dW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcs
IHZhbHVlUmVnKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAg
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVn
IGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0g
cHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIo
KTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gyLmdwcigpOwpAQCAtMjUzNywxNSAr
MjU4Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgICAgIGlmICghaXNBcmd1bWVudHNTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hp
bGQxKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAg
ICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJl
ZyksIGNoaWxkMSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpjbGFz
c0luZm9PZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cigmQXJndW1lbnRzOjpzX2luZm8pKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZEYXRhKCkpLAogICAgICAg
ICAgICAgICAgIHNjcmF0Y2hSZWcpOwpAQCAtMjU3OSwyMjUgKzI2MjAsNTEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEo
KS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKGludDhfdCksIGlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFy
cmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNo
b3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlz
SW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBO
b1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgaXNJbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChj
aGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWlu
dDhfdCksIGlzVWludDhBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1f
dHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVj
a3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50
OENsYW1wZWRBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWlu
dDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUp
ID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBV
bnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlw
ZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChh
dChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zih1aW50MTZfdCksIGlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hp
bGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlT
cGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91
bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBp
c1VpbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/
IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxv
YXQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5n
cHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCksIGlzRmxvYXQzMkFycmF5
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJh
eVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcyk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChj
aGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YoZG91YmxlKSwgaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hp
bGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlT
cGVjQ2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotCi0gICAgICAgIC8vIE1hcCBi
YXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2gg
cmVnaXN0ZXIuCi0gICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1
ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2gu
Z3ByKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUu
Z3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcp
OwotCi0gICAgICAgIHNwZWN1bGF0ZUFycmF5KGNoaWxkMSwgYmFzZVJlZyk7Ci0KLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAg
ICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMp
OwotCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgIHByb3BlcnR5LnVzZSgpOwotICAgICAg
ICB2YWx1ZS51c2UoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFn
ZS4KLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwotICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3Jh
Z2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdy
aXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotCi0g
ICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcg
dGhlIGFycmF5OyAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5l
ZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIo
MSksIHByb3BlcnR5UmVnKTsKLQotICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5r
KCZtX2ppdCk7Ci0gICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAg
Ly8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KLSAgICAgICAgbV9qaXQuc3RvcmVQdHIo
dmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbFNh
ZmUpIHsKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgYmV5b25kQXJyYXlCb3VuZHMsIHRo
aXMsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUo
KSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25Q
dXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAotICAgICAgICAgICAgICAgICAgICBO
b1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7
Ci0gICAgICAgIEVkZ2UgY2hpbGQxID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAw
KTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDEpOwotICAgICAgICBFZGdlIGNoaWxkMyA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMik7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWF0KGNoaWxkMSkucHJlZGljdGlvbigpIHx8
ICFhdChjaGlsZDIpLnByZWRpY3Rpb24oKSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUp
OworICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNj
cmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZf
dCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIEFTU0VSVChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlv
bihhdChjaGlsZDEpLnByZWRpY3Rpb24oKSkpOwotICAgICAgICBBU1NFUlQoYXQoY2hpbGQyKS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOwotCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIGNoaWxkMik7Ci0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNw
ZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIE5vVHlwZWRBcnJh
eVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3Vs
ZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIE5vVHlw
ZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEp
LnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCks
IE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChj
aGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWlu
dDhfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdChj
aGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKLSAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50
OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZih1aW50OF90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVk
QXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMkFycmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6
VWludDhBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6
VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2ln
bmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURl
c2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3Vi
bGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDE2
QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSht
X2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgTm9UeXBlZEFycmF5U3BlY0No
ZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
IAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVj
dWxhdGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBOb1R5cGVk
QXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEp
LnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxv
YXQpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRT
cGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
RmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSksIE5v
VHlwZWRBcnJheVNwZWNDaGVjayk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChhdChjaGlsZDEpLnNob3VsZFNwZWN1
bGF0ZUFycmF5KCkpOwotCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxk
Myk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAKLSAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJl
ZyA9IHNjcmF0Y2guZ3ByKCk7Ci0KLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZh
bHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNo
UmVnKTsKLQotICAgICAgICAvLyBHZXQgdGhlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9y
YWdlUmVnKTsKLQotICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgotICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgR1BSUmVn
IHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSkpOwotCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgICAgICAKKwogICAgIGNhc2UgUmVnRXhwRXhlYzogewogICAgICAg
ICBpZiAoY29tcGlsZVJlZ0V4cEV4ZWMobm9kZSkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0z
Mzg2LDgxICszMjUzLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewot
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9kZS5jaGlsZDEo
KSwgYmFzZUdQUik7Ci0KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRHUFIpOwotICAgICAg
ICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAKLSAgICAgICAg
aW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIEdldEFyZ3VtZW50c0xlbmd0aDogewotICAgICAg
ICBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKG5vZGUpOworICAgIGNhc2UgR2V0QXJyYXlMZW5n
dGg6CisgICAgICAgIGNvbXBpbGVHZXRBcnJheUxlbmd0aChub2RlKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6IHsKLSAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAg
Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7Ci0KLSAgICAgICAgaW50ZWdl
clJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgY2FzZSBHZXRJbnQ4QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5
cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCks
IG5vZGUsICFpc0ludDhBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0SW50MTZB
cnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5n
bG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0ludDE2QXJyYXlT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldEludDMyQXJyYXlMZW5ndGg6IHsKLSAgICAg
ICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNJbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBHZXRVaW50OEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFy
cmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgIWlzVWludDhBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0VWludDhDbGFt
cGVkQXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9q
aXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlz
VWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldFVpbnQxNkFy
cmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmds
b2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc1VpbnQxNkFycmF5
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRVaW50MzJBcnJheUxlbmd0aDogewotICAg
ICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQz
MkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNVaW50MzJBcnJheVNwZWN1bGF0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgR2V0RmxvYXQzMkFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRU
eXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCAhaXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdl
dEZsb2F0NjRBcnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0
aChtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlz
RmxvYXQ2NEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9CiAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOiB7
CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1bmN0aW9uKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBmdW5jdGlv
bi5ncHIoKSwgbm9kZS5mdW5jdGlvbigpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTI1OTcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1MCwxMyArMjUwLDgwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNsZWFyR2VuZXJh
dGlvbkluZm8KICAgICBtX2ZwcnMgPSBSZWdpc3RlckJhbms8RlBSSW5mbz4oKTsKIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQXJyYXkoRWRnZSBlZGdlLCBHUFJSZWcgYmFzZVJl
ZykKK2NvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVzY3JpcHRvcihBcnJh
eTo6TW9kZSBhcnJheU1vZGUpCiB7Ci0gICAgQWJzdHJhY3RWYWx1ZSYgYXJyYXlWYWx1ZSA9IG1f
c3RhdGUuZm9yTm9kZShlZGdlKTsKLSAgICBpZiAoYXJyYXlWYWx1ZS5tX3N0cnVjdHVyZS5oYXNT
aW5nbGV0b24oKQotICAgICAgICAmJiBhcnJheVZhbHVlLm1fc3RydWN0dXJlLnNpbmdsZXRvbigp
LT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvKQorICAgIHN3aXRjaCAoYXJyYXlNb2Rl
KSB7CisgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICByZXR1cm4gbV9qaXQuZ2xv
YmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV9jbGFzc0luZm87CisgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIG1faml0Lmdsb2JhbERhdGEoKS0+aW50
MTZBcnJheURlc2NyaXB0b3IoKS5tX2NsYXNzSW5mbzsKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFy
cmF5OgorICAgICAgICByZXR1cm4gbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3Jp
cHRvcigpLm1fY2xhc3NJbmZvOworICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5Ogor
ICAgICAgICByZXR1cm4gbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2Ny
aXB0b3IoKS5tX2NsYXNzSW5mbzsKKyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAg
ICAgcmV0dXJuIG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCkubV9j
bGFzc0luZm87CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBt
X2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLm1fY2xhc3NJbmZvOwor
ICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJuIG1faml0Lmdsb2Jh
bERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLm1fY2xhc3NJbmZvOworICAgIGNhc2Ug
QXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuIG1faml0Lmdsb2JhbERhdGEoKS0+
ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLm1fY2xhc3NJbmZvOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KK30KKworY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUsIEVkZ2Ug
ZWRnZSwgR1BSUmVnIGJhc2VSZWcpCit7CisgICAgVHlwZWRBcnJheURlc2NyaXB0b3IqIHJlc3Vs
dCA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKGFycmF5TW9kZSk7CisgICAgCisgICAgaWYgKG1vZGVB
bHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUoZWRnZSksIGFycmF5TW9kZSkpCiAgICAgICAg
IHJldHVybjsKICAgICAKKyAgICBDbGFzc0luZm8qIGV4cGVjdGVkQ2xhc3NJbmZvID0gMDsKKyAg
ICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKEluYWRxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICBleHBlY3Rl
ZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6c19pbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFycmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogewor
ICAgICAgICAvLyBUaGlzIGNvZGUgZHVwbGljYXRlcyB0aGUgY29kZSBiZWxvdyBpbiBhbnRpY2lw
YXRpb24gb2YgdGhpcyBjb2RlIGJlaW5nCisgICAgICAgIC8vIHN1YnN0YW50aWFsbHkgY2hhbmdl
ZCBpbiB0aGUgZnV0dXJlLgorICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAg
ICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2lu
Zm8pKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgorICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6OnNfaW5mbzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgIGNhc2UgQXJyYXk6Oklu
dDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpV
aW50OENsYW1wZWRBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICBjYXNl
IEFycmF5OjpVaW50MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9IHJl
c3VsdC0+bV9jbGFzc0luZm87CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCiAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHRlbXAuZ3ByKCkpOwpAQCAtMjY1LDcgKzMzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZUFycmF5KEVkZ2UKICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZXhwZWN0ZWRDbGFzc0lu
Zm8pKSk7CiB9CiAKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4
IG5vZGVJbmRleCkKQEAgLTE2MDEsMTEgKzE2NjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPblN0CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgaWYgKCFp
c1N0cmluZ1NwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KSB7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUpOwotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNTRVJUKG1vZGVBbHJlYWR5Q2hlY2tlZCht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIEFycmF5OjpTdHJpbmcpKTsKIAogICAgIC8v
IHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNl
cyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UKICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKQEAgLTE5OTksMjMgKzIw
NjIsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUCiAKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgoY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUmIG5vZGUsIGJvb2wgbmVlZHNTcGVj
dWxhdGlvbkNoZWNrKQotewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAKLSAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLSAgICAKLSAgICBpZiAobmVlZHNTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VH
UFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNz
SW5mbykpKTsKLSAgICAKLSAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCksIHJlc3VsdEdQUik7Ci0gICAgCi0g
ICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKLX0KLQotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNp
emUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlvblJlcXVpcmVt
ZW50cywgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcykKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFy
cmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMjAyOCwxMiArMjA3NSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CiAKLSAg
ICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVj
aykgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7Ci0g
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBBU1NFUlQobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAg
ICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKQEAgLTIwNzgsMTMgKzIxMjAs
MTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAgIGRvdWJs
ZVJlc3VsdChmcmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5v
ZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWly
ZW1lbnRzIHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWdu
ZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgcm91bmRpbmcpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2Rl
LCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5
cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKIHsKICAgICBFZGdlIGJhc2VVc2UgPSBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgIEVkZ2UgdmFsdWVVc2UgPSBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgIAotICAgIGlmIChzcGVjdWxhdGlvblJl
cXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKQotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNl
VXNlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKICAgICBHUFJU
ZW1wb3JhcnkgdmFsdWU7CiAgICAgR1BSUmVnIHZhbHVlR1BSOwogICAgIApAQCAtMjE1NSw3ICsy
MTk1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIEFT
U0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFn
ZVJlZyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHM7Ci0gICAgaWYgKHNw
ZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVNwZWNDaGVjaykKKyAgICBpZiAo
bm9kZS5vcCgpID09IFB1dEJ5VmFsKQogICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSk7CiAKICAgICBzd2l0
Y2ggKGVsZW1lbnRTaXplKSB7CkBAIC0yMTcxLDEyICsyMjExLDEyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9
IE5vVHlwZWRBcnJheVNwZWNDaGVjaykKKyAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsKQog
ICAgICAgICBvdXRPZkJvdW5kcy5saW5rKCZtX2ppdCk7CiAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0
VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgTm9kZSYg
bm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVu
dHMgc3BlY3VsYXRpb25SZXF1aXJlbWVudHMpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQogewogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMjE4NSwx
NyArMjIyNSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
LSAgICAKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlw
ZVNwZWNDaGVjaykgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSk7Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKworICAgIEFTU0VSVChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2h1bGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSk7CiAKICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogICAgIEZQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZnByKCk7Ci0gICAg
QVNTRVJUKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVNwZWNDaGVjayk7
CiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCkBAIC0yMjE5LDE1ICsyMjUzLDE0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwKICAgICBkb3VibGVS
ZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYg
bm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVu
dHMgc3BlY3VsYXRpb25SZXF1aXJlbWVudHMpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUmIG5vZGUsIHNpemVf
dCBlbGVtZW50U2l6ZSkKIHsKICAgICBFZGdlIGJhc2VVc2UgPSBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDApOwogICAgIEVkZ2UgdmFsdWVVc2UgPSBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDIpOwogICAgIAogICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVP
cCh0aGlzLCB2YWx1ZVVzZSk7CiAgICAgCi0gICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRz
ICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VVc2UuaW5kZXgo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7CisgICAgQVNTRVJU
KG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaHVsZDEoKSksIG5vZGUu
YXJyYXlNb2RlKCkpKTsKICAgICAKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
IApAQCAtMjIzNiw3ICsyMjY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5
VmFsRm9yRgogICAgIAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJl
bWVudHMgIT0gTm9UeXBlZEFycmF5U3BlY0NoZWNrKQorICAgIGlmIChub2RlLm9wKCkgPT0gUHV0
QnlWYWwpCiAgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2Us
IGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKTsKICAgICAKICAgICBzd2l0Y2ggKGVsZW1lbnRT
aXplKSB7CkBAIC0yMjUzLDcgKzIyODYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UHV0QnlWYWxGb3JGCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlT
cGVjQ2hlY2spCisgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZC
b3VuZHMubGluaygmbV9qaXQpOwogICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKIH0KQEAg
LTMwNDcsNzUgKzMwODAsMzYgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVx
KE5vZAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZShOb2RlJiBub2RlKQogewotICAgIEFTU0VSVChhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0
aW9uKCkpOwotICAgIEFTU0VSVChhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpOwotICAgICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAKICAg
ICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7Ci0gICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFy
Z3VtZW50cygpKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0gZWxzZSBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpID09IFNwZWNTdHJpbmcpIHsKLSAgICAg
ICAgaWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotCisg
ICAgCisgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPQorICAgICAg
ICBzcGVjdWxhdGVBcnJheShub2RlLmFycmF5TW9kZSgpLCBub2RlLmNoaWxkMSgpLCBiYXNlUmVn
KTsKKyAgICAKKyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICBjYXNlIEFycmF5
OjpTdHJpbmc6CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHN0b3JhZ2VSZWcpOwogICAgICAg
ICAKICAgICAgICAgLy8gU3BlY3VsYXRlIHRoYXQgd2UncmUgbm90IGFjY2Vzc2luZyBhIHJvcGUK
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VSZWcp
KTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxz
ZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKLSAg
ICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9i
YWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgaWYgKCFpc0ludDhBcnJh
eVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpj
bGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0
b3IubV9jbGFzc0luZm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVn
KTsKLSAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDE2
QXJyYXkoKSkgewotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAg
aWYgKCFpc0ludDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zm
c2V0KSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlw
dG9yKCk7Ci0gICAgICAgIGlmICghaXNJbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxk
MSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlw
dG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxzZSBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7Ci0gICAgICAgIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT51
aW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICBpZiAoIWlzVWludDhBcnJheVNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNl
UmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpjbGFzc0luZm9P
ZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFz
c0luZm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9
IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFy
cmF5KCkpIHsKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ig
PSBtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpOwotICAg
ICAgICBpZiAoIWlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCks
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlw
dG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJl
Zyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50
MTZBcnJheSgpKSB7Ci0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICAg
ICAgaWYgKCFpc1VpbnQxNkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFn
ZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSku
c2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkgewotICAgICAgICBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlE
ZXNjcmlwdG9yKCk7Ci0gICAgICAgIGlmICghaXNVaW50MzJBcnJheVNwZWN1bGF0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
ZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9IGVsc2UgaWYg
KGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7Ci0gICAg
ICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFs
RGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgIGlmICghaXNGbG9hdDMy
QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2Vs
bDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNj
cmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFn
ZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVG
bG9hdDY0QXJyYXkoKSkgewotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpOwot
ICAgICAgICBpZiAoIWlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1f
c3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNwZWN1
bGF0ZUFycmF5KG5vZGUuY2hpbGQxKCksIGJhc2VSZWcpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQoZGVzY3JpcHRv
cik7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZiwgZGVzY3JpcHRvci0+bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgICAgIGJy
ZWFrOwogICAgIH0KKyAgICAKICAgICBzdG9yYWdlUmVzdWx0KHN0b3JhZ2VSZWcsIG1fY29tcGls
ZUluZGV4KTsKIH0KIApAQCAtMzIzMyw2ICszMjI3LDQyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRBcmd1bWVudHMKICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbV9jb21w
aWxlSW5kZXgpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5n
dGgoTm9kZSYgbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIAor
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciog
ZGVzY3JpcHRvciA9CisgICAgICAgIHNwZWN1bGF0ZUFycmF5KG5vZGUuYXJyYXlNb2RlKCksIG5v
ZGUuY2hpbGQxKCksIGJhc2VHUFIpOworCisgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7
CisgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZC
b3VuZHM6CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
aW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1
bHRHUFIpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGNv
bXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIGRlc2NyaXB0b3ItPm1fbGVuZ3RoT2Zmc2V0
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTmV3RnVuY3Rpb25Ob0NoZWNrKE5vZGUmIG5vZGUpCiB7CiAgICAgR1BSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEyNTk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjA4Miw2ICsyMDgy
LDggQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMoTm9kZSYp
OwogICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChOb2RlJik7CiAgICAgCisgICAg
dm9pZCBjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSYpOworICAgIAogICAgIHZvaWQgY29tcGls
ZVZhbHVlVG9JbnQzMihOb2RlJik7CiAgICAgdm9pZCBjb21waWxlVUludDMyVG9OdW1iZXIoTm9k
ZSYpOwogICAgIHZvaWQgY29tcGlsZURvdWJsZUFzSW50MzIoTm9kZSYpOwpAQCAtMjA5NSwxMiAr
MjA5Nyw2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQgY29tcGlsZUFyaXRoTW9kKE5vZGUm
KTsKICAgICB2b2lkIGNvbXBpbGVTb2Z0TW9kdWxvKE5vZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVH
ZXRUeXBlZEFycmF5TGVuZ3RoKGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIGJv
b2wgbmVlZHNTcGVjdWxhdGlvbkNoZWNrKTsKLSAgICBlbnVtIFR5cGVkQXJyYXlTcGVjdWxhdGlv
blJlcXVpcmVtZW50cyB7Ci0gICAgICAgIE5vVHlwZWRBcnJheVNwZWNDaGVjaywKLSAgICAgICAg
Tm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaywKLSAgICAgICAgQWxsVHlwZWRBcnJheVNwZWNDaGVj
a3MKLSAgICB9OwogICAgIGVudW0gVHlwZWRBcnJheVNpZ25lZG5lc3MgewogICAgICAgICBTaWdu
ZWRUeXBlZEFycmF5LAogICAgICAgICBVbnNpZ25lZFR5cGVkQXJyYXkKQEAgLTIxMTAsMTAgKzIx
MDYsMTAgQEAgcHVibGljOgogICAgICAgICBDbGFtcFJvdW5kaW5nCiAgICAgfTsKICAgICB2b2lk
IGNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKLSAgICB2b2lkIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIE5v
ZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50
cywgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJS
ZWcgcHJvcGVydHksIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxh
dGlvblJlcXVpcmVtZW50cywgVHlwZWRBcnJheVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGlu
ZyA9IFRydW5jYXRlUm91bmRpbmcpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlJiwgc2l6ZV90IGVsZW1l
bnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMpOwotICAgIHZvaWQgY29t
cGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6
ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzKTsKKyAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIE5vZGUm
LCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzKTsKKyAgICB2b2lkIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Im
LCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXpl
LCBUeXBlZEFycmF5U2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nID0gVHJ1bmNhdGVSb3Vu
ZGluZyk7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciYsIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUpOworICAgIHZv
aWQgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYsIHNpemVfdCBlbGVt
ZW50U2l6ZSk7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25Ob0NoZWNrKE5vZGUmKTsKICAg
ICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbkV4cHJlc3Npb24oTm9kZSYpOwogICAgIGJvb2wgY29t
cGlsZVJlZ0V4cEV4ZWMoTm9kZSYpOwpAQCAtMjE5MSw3ICsyMTg3LDkgQEAgcHVibGljOgogICAg
IHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdz
LCBFZGdlKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uV2l0aENvbmRp
dGlvbmFsRGlyZWN0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9kZUluZGV4LCBib29sIGlz
Rm9yd2FyZCk7CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVBcnJheShFZGdlIGJhc2VFZGdlLCBH
UFJSZWcgYmFzZVJlZyk7CisgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJy
YXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlKTsKKyAgICAKKyAgICBjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciogc3BlY3VsYXRlQXJyYXkoQXJyYXk6Ok1vZGUsIEVkZ2UgYmFzZUVkZ2UsIEdQUlJl
ZyBiYXNlUmVnKTsKICAgICAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcg
ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9y
bWF0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159851</attachid>
            <date>2012-08-21 20:23:13 -0700</date>
            <delta_ts>2012-08-22 00:51:26 -0700</delta_ts>
            <desc>getting there</desc>
            <filename>arraymode_patch_5.diff</filename>
            <type>text/plain</type>
            <size>120849</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDEyLTA4LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgYWNjZXNzZXMgc2hvdWxkIHJlbWVtYmVyIHdoYXQga2luZCBvZiBhcnJheSB0aGV5IGFy
ZSBwcmVkaWN0ZWQgdG8gYWNjZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NDQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgor
ICAgICAgICAoSlNDOjpERkc6OnJlZmluZUFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
bW9kZUFscmVhZHlDaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgor
ICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAg
ICAgICAoSlNDOjpERkc6OmNhbkNTRVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVG
b3JQdXQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChC
eXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFy
cmF5TW9kZVdpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Z2V0QXJyYXlNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FycmF5TW9kZSk6CisgICAgICAg
IChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjphcnJheU1vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnNldEFycmF5TW9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBl
Lmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjp0eXBlZEFycmF5RGVzY3JpcHRvcik6CisgICAgICAgIChERkcpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAg
ICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTIt
MDgtMjEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVj
aW5nIHRoZSBWTUluc3BlY3RvciBmb3IgVk0gZGVidWdnaW5nIHVzZS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBA
QCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogCiAgICAgZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCiAgICAgZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCisgICAgZGZn
L0RGR0FycmF5TW9kZS5jcHAKICAgICBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAogICAgIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKICAgICBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEy
NjI1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudFBvc2l0aW9uLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJ
KHJldmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3
b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRlYnVnZ2Vy
L0RlYnVnZ2VyLmNwcCBcCiAgICAgZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwIFwKICAgICBkZmcv
REZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgXAorICAgIGRmZy9ERkdBcnJheU1v
ZGUuY3BwIFwKICAgICBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcCBcCiAgICAgZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcCBcCiAgICAgZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDggQEAKIAkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1
OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQzQzE1Qzc1RjE0MDA2QTU5N0Mg
LyogREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEY2Mzk0NTQx
NUQwNzA1NTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJy
YXlQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5
UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjM5NDg0MTVFNDgxMTgwMDZB
NTk3QyAvKiBERkdBcnJheU1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2Mzk0ODExNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5j
cHAgKi87IH07CisJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDgyMTVF
NDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZH
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjgxNERG
M0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyog
REZHRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODk2LDYgKzg5OCw4IEBACiAJCTBGNjM5
NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBB
cnJheVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJy
YXlQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0NTIxNUQw
NzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBcnJheVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
Mzk0ODExNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcnJheU1vZGUuY3BwOyBwYXRoID0gZGZnL0RGR0Fy
cmF5TW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjM5NDgyMTVFNDgx
MTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQXJyYXlNb2RlLmg7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY4MTRERjNGMTMw
MEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRmZy9ERkdBZGphY2VuY3lMaXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAv
KiBERkdFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0VkZ2UuaDsg
cGF0aCA9IGRmZy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjU3
LDEyICsyMjYxLDE1IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBGMUUzQTQzMTUzNENC
QUQwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggKi8sCi0JCQkJMEYxNjAxNUExNTYx
OThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovLAot
CQkJCTBGMTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmggKi8sCiAJCQkJMEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0
U3RhdGUuY3BwICovLAogCQkJCTBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFj
dFN0YXRlLmggKi8sCiAJCQkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0
VmFsdWUuaCAqLywKKwkJCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovLAorCQkJCTBGMUUzQTQzMTUzNENCQUQwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBv
c2l0aW9uLmggKi8sCisJCQkJMEYxNjAxNUExNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGMTYwMTVCMTU2MTk4QkYwMEMyNTg3
QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggKi8sCisJCQkJMEY2Mzk0ODEx
NUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgKi8sCisJCQkJMEY2Mzk0ODIxNUU0
ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovLAogCQkJCTBGQzA5NzZCMTQ2OEFCNEEw
MENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovLAogCQkJCTBGQzA5NzZDMTQ2OEFC
NEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLywKIAkJCQkwRjYyMDE3MDE0M0ZD
RDJGMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovLApAQCAtMjMwNiw3ICsyMzEzLDYgQEAK
IAkJCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovLAogCQkJCTBGQTU4
MUI3MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwICovLAogCQkJCTBGQTU4MUI4
MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKLQkJCQkwRjY2RTE2ODE0REYz
RjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovLAogCQkJCTBGQTU4MUI5MTUwRTk1
MkEwMEI5QTJEOSAvKiBERkdOb2RlVHlwZS5oICovLAogCQkJCTBGNjZFMTY5MTRERjNGMTMwMEI3
QjJFNCAvKiBERkdFZGdlLmggKi8sCiAJCQkJODZFQzlEQkYxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R09wZXJhdGlvbnMuY3BwICovLApAQCAtMjg4NCw2ICsyODkwLDcgQEAKIAkJCQlGRTRBMzMyMDE1
QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5
NDNGMTVDNzVGMTkwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdB
cnJheU1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAv
KiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTM0ODUsNiArMzQ5Miw3
IEBACiAJCQkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVD
aGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NTQxNUQwNzA1
NTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYzOTQ4
NDE1RTQ4MTE4MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShy
ZXZpc2lvbiAxMjYyNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjgsNjUgKzg2OCw2NiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIEdl
dEJ5VmFsOiB7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKCFu
b2RlLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkg
fHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKSB7CisgICAgICAgIHN3aXRj
aCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgfHwgKCFub2RlLmNoaWxkMygp
ICYmICFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSkg
eworICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkg
eworICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgPT0gU3BlY1N0cmluZykgewotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgIGNhc2UgQXJy
YXk6OkpTQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBtb3JlIGNvbnNlcnZhdGl2ZSBoYW5k
bGluZyBvZiB0aGUgb3V0LW9mLWJvdW5kcworICAgICAgICAgICAgLy8gY2FzZS4KKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNTdHJpbmcpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJ
bnQ4QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFycmF5KTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVJbnQxNkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5z
aG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzJB
cnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQz
MkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNVaW50OEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OENsYW1wZWRBcnJheSgpKSB7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVVaW50MTZBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5Ogog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y1VpbnQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCkBAIC05MzQsNTUgKzkzNSw0NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJB
cnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKICAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOwogICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRT
cGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQ2
NEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dEJ5VmFsOgot
ICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICBjYXNlIFB1dEJ5VmFsU2FmZTogeworICAgIGNh
c2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0KICAg
ICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAg
ICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVk
Z2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgICAgIAot
ICAgICAgICBpZiAoIW1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbY2hp
bGQyXS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgc3dpdGNoIChtb2RlRm9yUHV0KG5vZGUuYXJy
YXlNb2RlKCkpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICAgICAgICAg
IG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKCFtX2dyYXBoW2NoaWxkMl0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0jaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIHx8IG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVj
dWxhdGVBcmd1bWVudHMoKQotI2VuZGlmCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgIEFT
U0VSVChub2RlLm9wKCkgPT0gUHV0QnlWYWwgfHwgbm9kZS5vcCgpID09IFB1dEJ5VmFsU2FmZSk7
CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygp
KSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0
ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpK
U0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNw
ZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsK
KyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQXJndW1lbnRzKTsKICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRl
SW50OEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgogICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjSW50OEFycmF5KTsKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBo
W2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtOTkwLDggKzk4Myw3IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5z
aG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MTZB
cnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC05
OTksOCArOTkxLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIo
U3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjSW50MzJBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKQEAgLTEwMDgsOCArOTk5LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJy
YXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgogICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDEpLmZpbHRlcihTcGVjVWludDhBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGls
ZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKQEAgLTEwMTcsOCArMTAwNyw3IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91
bGRTcGVjdWxhdGVVaW50OENsYW1wZWRBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQ4Q2xhbXBlZEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
VWludDhDbGFtcGVkQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihT
cGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCkBAIC0xMDI2LDggKzEwMTUsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDE2
QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBo
W2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtMTAzNSw4ICsxMDIzLDcgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFd
LnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50MzJB
cnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
QEAgLTEwNDQsMjMgKzEwMzEsMjAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7
CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQxKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmls
dGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgeworICAg
ICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihT
cGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9y
Tm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICBpZiAobm9kZS5vcCgpID09
IFB1dEJ5VmFsU2FmZSkKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4s
IGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAt
MTM1Niw2OSArMTM0MCw4MiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0
aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdldEFyZ3VtZW50c0xl
bmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQXJndW1lbnRzKTsKLSAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkp
IHsKKyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OgorICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNTdHJpbmdTcGVjdWxhdGlvbihmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJh
eTo6SlNBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5
OjpBcmd1bWVudHM6CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgICAgICBub2RlLnNl
dENhbkV4aXQoIWlzSW50OEFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJ
bnQ4QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Cisg
ICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzSW50MTZBcnJheVNwZWN1bGF0aW9uKGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB
cnJheTo6SW50MzJBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNJbnQzMkFy
cmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMkFycmF5KTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KCFpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y1VpbnQ4QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50
MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBl
ZEFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQ4Q2xhbXBlZEFycmF5
U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoIWlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1VpbnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpVaW50
MzJBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50MzJBcnJheVNwZWN1
bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCghaXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zs
b2F0MzJBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5
OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQ2NEFycmF5KTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCghaXNTdHJpbmdTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
U3RyaW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAg
ICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBHZXRJbnQ4QXJyYXlMZW5ndGg6Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjSW50OEFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50
MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldEludDE2QXJyYXlMZW5ndGg6Ci0gICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNJbnQxNkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0ludDE2QXJyYXkpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR2V0SW50MzJBcnJheUxlbmd0aDoKLSAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjSW50MzJBcnJheSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3Bl
Y0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRVaW50OEFycmF5TGVuZ3RoOgot
ICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzVWludDhBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldFVpbnQ4Q2xhbXBlZEFycmF5
TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzVWludDhDbGFtcGVkQXJyYXlTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOwotICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR2V0VWludDE2QXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50
MTZBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHZXRVaW50MzJBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFp
c1VpbnQzMkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsK
LSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQzMkFycmF5KTsK
LSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdldEZsb2F0MzJBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KCFpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMy
QXJyYXkpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOgotICAgICAgICBub2Rl
LnNldENhbkV4aXQoIWlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0Zsb2F0NjRBcnJheSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMy
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJl
OgogICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0
YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KQEAgLTE0ODksNjUgKzE0ODYsNDUgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgIEFTU0VS
VChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgIEFTU0VSVCht
X2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7CiAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGllcywgYnV0IHRoaXMgaXMgKGFsbW9zdCkgYWx3
YXlzIGZvbGxvd2VkIGJ5IEdldEJ5VmFsLCB3aGljaCBkb2VzIGV4aXQuIFNvIG5vIHBvaW50IGlu
IHRyeWluZyB0byBiZSBtb3JlIHByZWNpc2UuCi0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSA9PSBTcGVjU3RyaW5nKSB7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpT
dHJpbmc6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3Ry
aW5nKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6OkpTQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAg
ICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1bCByaWdo
dCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAorICAgICAgICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9m
IGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgogICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhBcnJheSk7Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0
ZUludDE2QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgogICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwotICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVJbnQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMkFycmF5KTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxk
U3BlY3VsYXRlVWludDhBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJh
eSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNo
b3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVp
bnQxNkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOwotICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjT3RoZXIpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hv
dWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50
MzJBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6
OkZsb2F0MzJBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNGbG9hdDMyQXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFy
KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjRmxvYXQ2NEFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5jbGVhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgIGJyZWFrOyAKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQXJy
YXlNb2RlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitBcnJheTo6TW9k
ZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9vbCBtYWtlU2FmZSkKK3sKKyAgICAv
LyBGSVhNRTogd2UgbWF5IHdhbnQgdG8gYWRkIHNvbWUgcG9seW1vcnBoaWMgc3VwcG9ydCBpbiB0
aGUgZnV0dXJlLiBUaGF0J3Mgd2h5IHRoaXMKKyAgICAvLyBpcyBhIHN3aXRjaCBzdGF0ZW1lbnQg
cmlnaHQgbm93LgorICAgIAorICAgIHN3aXRjaCAobW9kZXMpIHsKKyAgICBjYXNlIDA6CisgICAg
ICAgIHJldHVybiBBcnJheTo6Rm9yY2VFeGl0OworICAgIGNhc2UgSXNKU0FycmF5OgorICAgICAg
ICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzIDogQXJyYXk6OkpT
QXJyYXk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFVuZGVjaWRlZDsKKyAgICB9Cit9
CisKK0FycmF5OjpNb2RlIHJlZmluZUFycmF5TW9kZShBcnJheTo6TW9kZSBhcnJheU1vZGUsIFNw
ZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KQoreworICAgIGlmICghYmFz
ZSB8fCAhaW5kZXgpIHsKKyAgICAgICAgLy8gVGhlIG9ubHkgY2FzZSBpbiB3aGljaCB0aGVyZSBj
YW4gYmUgbm8gcHJlZGljdGlvbnMgaXMgaWYgdGhpcyBjb2RlIGhhc24ndAorICAgICAgICAvLyBl
eGVjdXRlZCwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IHNldCB0aGlzIHRv
IEZvcmNlRXhpdC4KKyAgICAgICAgQVNTRVJUKGFycmF5TW9kZSA9PSBBcnJheTo6Rm9yY2VFeGl0
KTsKKyAgICAgICAgcmV0dXJuIEFycmF5OjpGb3JjZUV4aXQ7CisgICAgfQorICAgIAorICAgIGlm
ICghaXNJbnQzMlNwZWN1bGF0aW9uKGluZGV4KSB8fCAhaXNDZWxsU3BlY3VsYXRpb24oYmFzZSkp
CisgICAgICAgIHJldHVybiBBcnJheTo6R2VuZXJpYzsKKyAgICAKKyAgICBzd2l0Y2ggKGFycmF5
TW9kZSkgeworICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJu
IGFycmF5TW9kZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6
U3RyaW5nOworICAgIAorICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKQorICAg
ICAgICByZXR1cm4gQXJyYXk6OkFyZ3VtZW50czsKKyAgICAKKyAgICBpZiAoaXNJbnQ4QXJyYXlT
cGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpJbnQ4QXJyYXk7CisgICAg
CisgICAgaWYgKGlzSW50MTZBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4g
QXJyYXk6OkludDE2QXJyYXk7CisgICAgCisgICAgaWYgKGlzSW50MzJBcnJheVNwZWN1bGF0aW9u
KGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OkludDMyQXJyYXk7CisgICAgCisgICAgaWYg
KGlzVWludDhBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OlVp
bnQ4QXJyYXk7CisgICAgCisgICAgaWYgKGlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihi
YXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVaW50OENsYW1wZWRBcnJheTsKKyAgICAKKyAg
ICBpZiAoaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJy
YXk6OlVpbnQxNkFycmF5OworICAgIAorICAgIGlmIChpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24o
YmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6VWludDMyQXJyYXk7CisgICAgCisgICAgaWYg
KGlzRmxvYXQzMkFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6
RmxvYXQzMkFycmF5OworICAgIAorICAgIGlmIChpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKGJh
c2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OkZsb2F0NjRBcnJheTsKKyAgICAKKyAgICByZXR1
cm4gQXJyYXk6OkdlbmVyaWM7Cit9CisKK2Jvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0
VmFsdWUmIHZhbHVlLCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJh
eU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgcmV0dXJuIGlz
U3RyaW5nU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJh
eTo6SlNBcnJheToKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAg
IHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAg
ICAgICAgICAgJiYgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmNs
YXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm87CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6
OkFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIGlzQXJndW1lbnRzU3BlY3VsYXRpb24odmFsdWUu
bV90eXBlKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICBy
ZXR1cm4gaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAg
ICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gaXNJbnQxNkFycmF5U3Bl
Y3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6SW50MzJB
cnJheToKKyAgICAgICAgcmV0dXJuIGlzSW50MzJBcnJheVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlw
ZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgIHJldHVy
biBpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBj
YXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgcmV0dXJuIGlzVWludDhBcnJh
eVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVp
bnQxNkFycmF5OgorICAgICAgICByZXR1cm4gaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKHZhbHVl
Lm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAg
ICByZXR1cm4gaXNVaW50MzJBcnJheVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisKKyAgICBj
YXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgIHJldHVybiBpc0Zsb2F0MzJBcnJheVNw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6
CisgICAgICAgIHJldHVybiBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1vZGUpCit7CisgICAg
c3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICByZXR1
cm4gIlVuZGVjaWRlZCI7CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgcmV0dXJu
ICJHZW5lcmljIjsKKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIHJldHVybiAiU3Ry
aW5nIjsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICByZXR1cm4gIkpTQXJyYXki
OworICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJK
U0FycmF5T3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAg
cmV0dXJuICJBcmd1bWVudHMiOworICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAg
cmV0dXJuICJJbnQ4QXJyYXkiOworICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAg
IHJldHVybiAiSW50MTZBcnJheSI7CisgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAg
ICAgcmV0dXJuICJJbnQzMkFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAg
ICAgICByZXR1cm4gIlVpbnQ4QXJyYXkiOworICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5Ogor
ICAgICAgICByZXR1cm4gIlVpbnQxNkFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJh
eToKKyAgICAgICAgcmV0dXJuICJVaW50MzJBcnJheSI7CisgICAgY2FzZSBBcnJheTo6RmxvYXQz
MkFycmF5OgorICAgICAgICByZXR1cm4gIkZsb2F0MzJBcnJheSI7CisgICAgY2FzZSBBcnJheTo6
RmxvYXQ2NEFycmF5OgorICAgICAgICByZXR1cm4gIkZsb2F0NjRBcnJheSI7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgLy8gQmV0dGVyIHRvIHJldHVybiBzb21ldGhpbmcgdGhlbiBpdCBpcyB0byBj
cmFzaC4gUmVtZW1iZXIsIHRoaXMgbWV0aG9kCisgICAgICAgIC8vIGlzIGJlaW5nIGNhbGxlZCBm
cm9tIG91ciBtYWluIGRpYWdub3N0aWMgdG9vbCwgdGhlIElSIGR1bXBlci4gSXQncyBsaWtlCisg
ICAgICAgIC8vIGEgc3RhY2sgdHJhY2UuIFNvIGlmIHdlIGdldCBoZXJlIHRoZW4gcHJvYmFibHkg
c29tZXRoaW5nIGhhcyBhbHJlYWR5CisgICAgICAgIC8vIGdvbmUgd3JvbmcuCisgICAgICAgIHJl
dHVybiAiVW5rbm93biEiOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQXJy
YXlNb2RlX2gKKyNkZWZpbmUgREZHQXJyYXlNb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIK
KyNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3N0cnVjdCBBYnN0cmFjdFZhbHVlOworCisvLyBVc2UgYSBuYW1lc3BhY2UgKyBl
bnVtIGluc3RlYWQgb2YgZW51bSBhbG9uZSB0byBhdm9pZCB0aGUgbmFtZXNwYWNlIGNvbGxpc2lv
bgorLy8gdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIsIHNpbmNlIHdlIHNheSB0aGluZ3MgbGlr
ZSAiSW50OEFycmF5IiBhbmQgIkpTQXJyYXkiCisvLyBpbiBsb3RzIG9mIG90aGVyIHBsYWNlcywg
dG8gbWVhbiBzdWJ0bHkgZGlmZmVyZW50IHRoaW5ncy4KK25hbWVzcGFjZSBBcnJheSB7CitlbnVt
IE1vZGUgeworICAgIFVuZGVjaWRlZCwgLy8gSW1wbGllcyB0aGF0IHdlIG5lZWQgcHJlZGljdGlv
bnMgdG8gZGVjaWRlLiBXZSB3aWxsIG5ldmVyIGdldCB0byB0aGUgYmFja2VuZCBpbiB0aGlzIG1v
ZGUuCisgICAgRm9yY2VFeGl0LCAvLyBJbXBsaWVzIHRoYXQgd2UgaGF2ZSBubyBpZGVhIGhvdyB0
byBleGVjdXRlIHRoaXMgb3BlcmF0aW9uLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAg
IEdlbmVyaWMsCisgICAgU3RyaW5nLAorICAgIEpTQXJyYXksCisgICAgSlNBcnJheU91dE9mQm91
bmRzLAorICAgIEFyZ3VtZW50cywKKyAgICBJbnQ4QXJyYXksCisgICAgSW50MTZBcnJheSwKKyAg
ICBJbnQzMkFycmF5LAorICAgIFVpbnQ4QXJyYXksCisgICAgVWludDE2QXJyYXksCisgICAgVWlu
dDMyQXJyYXksCisgICAgRmxvYXQzMkFycmF5LAorICAgIEZsb2F0NjRBcnJheQorfTsKK30gLy8g
bmFtZXNwYWNlIEFycmF5CisKK0FycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheU1vZGVzIG1v
ZGVzLCBib29sIG1ha2VTYWZlKTsKKworQXJyYXk6Ok1vZGUgcmVmaW5lQXJyYXlNb2RlKEFycmF5
OjpNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBpbmRleCk7CisKK2Jv
b2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmLCBBcnJheTo6TW9kZSk7CisKK2Nv
bnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CisKK2lubGluZSBib29sIGNhbkNT
RVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2Rl
KSB7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KK30KKworaW5saW5lIEFycmF5OjpNb2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBcnJheTo6
U3RyaW5nOgorICAgICAgICByZXR1cm4gQXJyYXk6OkdlbmVyaWM7CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBBcnJheTo6
R2VuZXJpYzsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBhcnJheU1vZGU7
CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FycmF5TW9kZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAx
MjYyNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIkRGR0FycmF5TW9kZS5oIgogI2luY2x1ZGUgIkRGR0J5dGVDb2RlQ2Fj
aGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJHZXRCeUlkU3Rh
dHVzLmgiCkBAIC04MTYsNiArODE3LDM0IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICByZXR1
cm4gZ2V0UHJlZGljdGlvbihtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgp
OwogICAgIH0KKyAgICAKKyAgICBBcnJheTo6TW9kZSBnZXRBcnJheU1vZGVXaXRob3V0T1NSRXhp
dChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwor
ICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYg
KHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpCisgICAgICAgICAgICBhZGRUb0dyYXBo
KENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHJvZmlsZS0+
ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKKyAgICAgICAgCisjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCJTbG93IGNhc2UgcHJv
ZmlsZSBmb3IgYmMjJXU6ICV1XG4iLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJl
bnRJbmRleCktPm1fY291bnRlcik7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGJvb2wgbWFr
ZVNhZmUgPQorICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5j
b3VsZFRha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgIHx8IG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE91dE9m
Qm91bmRzKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmcm9tT2JzZXJ2ZWQocHJvZmlsZS0+
b2JzZXJ2ZWRBcnJheU1vZGVzKCksIG1ha2VTYWZlKTsKKyAgICB9CisgICAgCisgICAgQXJyYXk6
Ok1vZGUgZ2V0QXJyYXlNb2RlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCisgICAg
eworICAgICAgICBBcnJheTo6TW9kZSByZXN1bHQgPSBnZXRBcnJheU1vZGVXaXRob3V0T1NSRXhp
dChjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBB
cnJheTo6Rm9yY2VFeGl0KQorICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKICAgICBOb2RlSW5kZXgg
bWFrZVNhZmUoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBAIC0xNTQ4LDggKzE1NzcsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpbnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsKLSAgICAgICAgTm9kZUluZGV4IHN0b3Jh
Z2UgPSBhZGRUb0dyYXBoKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGdldCh0aGlzT3BlcmFu
ZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7Ci0gICAgICAgIE5vZGVJbmRleCBjaGFyQ29k
ZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9J
bnQzMihpbmRleE9wZXJhbmQpLCBzdG9yYWdlKTsKKyAgICAgICAgTm9kZUluZGV4IGNoYXJDb2Rl
ID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8oQXJyYXk6OlN0cmluZyksIGdl
dCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CiAKICAgICAgICAgaWYg
KHVzZXNSZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUpOwpA
QCAtMTU2NSw4ICsxNTkzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KGJvbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGludCBpbmRleE9wZXJh
bmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpOwotICAgICAgICBOb2Rl
SW5kZXggc3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgZ2V0
KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKLSAgICAgICAgTm9kZUlu
ZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQXQsIGdldCh0aGlzT3BlcmFuZCks
IGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSwgc3RvcmFnZSk7CisgICAgICAgIE5vZGVJbmRleCBj
aGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBPcEluZm8oQXJyYXk6OlN0cmluZyks
IGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CiAKICAgICAgICAg
aWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUp
OwpAQCAtMjE0Nyw0MSArMjE3NCwyNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDogewogICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAor
ICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJlbnRJ
bnN0cnVjdGlvbik7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsK
LSAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwotICAgICAg
ICAgICAgaWYgKHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpCi0gICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KHByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAgICAgICBO
b2RlSW5kZXggcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlLCBiYXNlLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggZ2V0QnlWYWwg
PSBhZGRUb0dyYXBoKEdldEJ5VmFsLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFz
ZSwgcHJvcGVydHksIHByb3BlcnR5U3RvcmFnZSk7CisgICAgICAgICAgICBOb2RlSW5kZXggZ2V0
QnlWYWwgPSBhZGRUb0dyYXBoKEdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBiYXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlWYWwpOwogCiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9nZXRfYnlfdmFsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bDogeworICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGVJbmRleCBi
YXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAg
Tm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OwogICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7Ci0gICAgICAgICAg
ICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChw
cm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwcm9maWxl
LT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotCi0jaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZygiU2xvdyBjYXNlIHByb2Zp
bGUgZm9yIGJjIyV1OiAldVxuIiwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50
SW5kZXgpLT5tX2NvdW50ZXIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIGJvb2wgbWFrZVNhZmUg
PQotICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Y291
bGRUYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCi0gICAgICAgICAgICAgICAgfHwgbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3V0
T2ZCb3VuZHMpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNl
KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKICAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKHZhbHVlKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBtYWtlU2FmZSA/IFB1dEJ5VmFsU2FmZSA6IFB1dEJ5VmFsLCBPcEluZm8oMCksIE9wSW5mbygw
KSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgUHV0QnlWYWwsIE9wSW5m
byhhcnJheU1vZGUpLCBPcEluZm8oMCkpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9w
dXRfYnlfdmFsKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsOCArMjg0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2Ug
UHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxTYWZlOiB7CisgICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgu
YnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkgPT0gY2hpbGQx
ICYmIGNhbm9uaWNhbGl6ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSA9PSBjYW5vbmlj
YWxpemUoY2hpbGQyKSkKQEAgLTM2NSw3ICszNjQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxTYWZlOgogICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRo
IGFuCiAgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBv
c3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQpAQCAtNDA5LDcgKzQwNyw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAg
ICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbFNh
ZmU6CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNj
ZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBp
bmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCkBA
IC01MTUsNyArNTEyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZh
bElzUHVyZShub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVj
dWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAgICAg
ICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8g
Y2F1c2UgYSBzdHJ1Y3R1cmUKQEAgLTU2MCw3ICs1NTYsNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAg
ICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3Npbmcg
YW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0
aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKQEAgLTYxMyw3
ICs2MDgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxTYWZlOgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJl
KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMg
dGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAgICAgICAgICAg
IC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBh
IHN0cnVjdHVyZQpAQCAtMTEwMyw4ICsxMDk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBzZXRSZXBsYWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmlu
ZGV4KCksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgY2FzZSBQdXRCeVZhbFNh
ZmU6IHsKKyAgICAgICAgY2FzZSBQdXRCeVZhbDogewogICAgICAgICAgICAgRWRnZSBjaGlsZDEg
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICAgICAgRWRnZSBjaGlsZDIg
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwogICAgICAgICAgICAgaWYgKGlzQWN0aW9u
YWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDk3ICs3NCw4NyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbm9kZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlv
bigpKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2so
KS0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGJvb2wgaXNBcnJheSA9IGlzQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBib29sIGlzQXJndW1lbnRzID0gaXNBcmd1bWVu
dHNTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAg
ICAgICAgICBib29sIGlzU3RyaW5nID0gaXNTdHJpbmdTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBib29sIGlzSW50OEFycmF5ID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKTsKLSAgICAg
ICAgICAgIGJvb2wgaXNJbnQxNkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRT
cGVjdWxhdGVJbnQxNkFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlzSW50MzJBcnJheSA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpOwotICAgICAg
ICAgICAgYm9vbCBpc1VpbnQ4QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNw
ZWN1bGF0ZVVpbnQ4QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNVaW50OENsYW1wZWRBcnJh
eSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJy
YXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNVaW50MTZBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNV
aW50MzJBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDMy
QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNGbG9hdDMyQXJyYXkgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpOwotICAgICAgICAgICAgYm9v
bCBpc0Zsb2F0NjRBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRl
RmxvYXQ2NEFycmF5KCk7Ci0gICAgICAgICAgICBpZiAoIWlzQXJyYXkgJiYgIWlzQXJndW1lbnRz
ICYmICFpc1N0cmluZyAmJiAhaXNJbnQ4QXJyYXkgJiYgIWlzSW50MTZBcnJheSAmJiAhaXNJbnQz
MkFycmF5ICYmICFpc1VpbnQ4QXJyYXkgJiYgIWlzVWludDhDbGFtcGVkQXJyYXkgJiYgIWlzVWlu
dDE2QXJyYXkgJiYgIWlzVWludDMyQXJyYXkgJiYgIWlzRmxvYXQzMkFycmF5ICYmICFpc0Zsb2F0
NjRBcnJheSkKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlUHRy
LT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nKCIgIEAldSAt
PiAlcyIsIG1fY29tcGlsZUluZGV4LCBpc0FycmF5ID8gIkdldEFycmF5TGVuZ3RoIiA6ICJHZXRT
dHJpbmdMZW5ndGgiKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKGlzQXJyYXkpIHsKLSAgICAg
ICAgICAgICAgICBub2RlLnNldE9wKEdldEFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICAgICAg
bm9kZS5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgICAgIG1fZ3Jh
cGguZGVyZWYobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCi0gICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9m
aWxlKAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpOwotICAgICAgICAgICAgICAgIGlmICghYXJyYXlQcm9maWxlKQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlUHRyLT5jb2Rl
T3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAorICAgICAgICAgICAgICAgICAgICBub2RlUHRyLT5j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlN
b2RlID0gQXJyYXk6OlVuZGVjaWRlZDsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsK
ICAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigp
OwotICAgICAgICAgICAgICAgIGlmICghYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVy
ZSgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBtX2dyYXBo
LnJlZihub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJl
KENoZWNrU3RydWN0dXJlLCBub2RlLmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgbm9kZS5jaGlsZDEo
KS5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKLSAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggY2hlY2tTdHJ1Y3R1cmVJbmRleCA9IG1fZ3JhcGguc2l6ZSgp
OwotICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrU3RydWN0dXJlKTsKLSAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGNoZWNrU3Ry
dWN0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUtPmhhc0RlZmlu
aXRlU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobm9kZVB0
ci0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENo
ZWNrU3RydWN0dXJlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIG5vZGVQdHItPmNo
aWxkMSgpLmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYo
KTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXggPSBt
X2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tT
dHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9p
bmRleEluQmxvY2ssIGNoZWNrU3RydWN0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBu
b2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBhcnJheU1vZGUgPSBmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLT5vYnNl
cnZlZEFycmF5TW9kZXMoKSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJy
YXlNb2RlID0gcmVmaW5lQXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIGFycmF5TW9kZSwKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpOworICAgICAg
ICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVj
aWRlZDoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIG5vZGVQdHItPnNldE9wKEdldEFycmF5TGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJh
dGUpOworICAgICAgICAgICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0
ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNBcmd1bWVudHMp
Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRBcmd1bWVudHNMZW5ndGgpOwotICAgICAg
ICAgICAgZWxzZSBpZiAoaXNTdHJpbmcpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRT
dHJpbmdMZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQ4QXJyYXkpCi0gICAgICAg
ICAgICAgICAgbm9kZS5zZXRPcChHZXRJbnQ4QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgZWxz
ZSBpZiAoaXNJbnQxNkFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0SW50MTZB
cnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0ludDMyQXJyYXkpCi0gICAgICAg
ICAgICAgICAgbm9kZS5zZXRPcChHZXRJbnQzMkFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGlzVWludDhBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldFVpbnQ4
QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50OENsYW1wZWRBcnJheSkK
LSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldFVpbnQ4Q2xhbXBlZEFycmF5TGVuZ3RoKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGlzVWludDE2QXJyYXkpCi0gICAgICAgICAgICAgICAgbm9k
ZS5zZXRPcChHZXRVaW50MTZBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1Vp
bnQzMkFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0VWludDMyQXJyYXlMZW5n
dGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNGbG9hdDMyQXJyYXkpCi0gICAgICAgICAgICAg
ICAgbm9kZS5zZXRPcChHZXRGbG9hdDMyQXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBp
ZiAoaXNGbG9hdDY0QXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRGbG9hdDY0
QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgLy8gTm8gbG9uZ2VyIE11c3RHZW5lcmF0ZQotICAg
ICAgICAgICAgQVNTRVJUKG5vZGUuZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAg
ICAgICAgbm9kZS5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAg
IGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkKLSAgICAgICAgICAgICAg
ICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMigpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAg
ICAgICAgICAgICAgICB8fCBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUFy
Z3VtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhO
b3ApOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsK
LSAgICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDIobm9kZSk7Ci0gICAg
ICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQzKG5vZGUpOwotICAgICAgICAg
ICAgICAgIG5vZGUuc2V0UmVmQ291bnQoMCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBu
b2RlLnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICByZWZpbmVBcnJheU1vZGUoCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgLy8gUHJl
ZGljdGlvbnMgc2hvdWxkIG9ubHkgYmVjb21lIG1vcmUsIHJhdGhlciB0aGFuIGxlc3MsIHJlZmlu
ZWQuIEhlbmNlCisgICAgICAgICAgICAvLyBpZiB3ZSB3ZXJlIGV2ZXIgYWJsZSB0byBDU0UgdGhl
IHN0b3JhZ2UgcG9pbnRlciBmb3IgdGhpcyBvcGVyYXRpb24sCisgICAgICAgICAgICAvLyB0aGVu
IHdlIHNob3VsZCBhbHdheXMgY29udGludWUgdG8gYmUgYWJsZSB0byBkbyBzby4KKyAgICAgICAg
ICAgIEFTU0VSVChjYW5DU0VTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2Ug
U3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAgICAgICAg
ICAgIGlmICghIW5vZGUuY2hpbGQzKCkgJiYgbV9ncmFwaFtub2RlLmNoaWxkMygpXS5vcCgpID09
IE5vcCkKLSAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygpID0gRWRnZSgpOwor
ICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgcmVmaW5lQXJy
YXlNb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLAorICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKKyAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKGNhbkNTRVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMygpXSkKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ub3AoKSA9PSBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHVzZSB0aGUgbm9kZSByZWZlcmVuY2UgYWZ0
ZXIgd2UgZG8gdGhlIGFwcGVuZC4KKyAgICAgICAgICAgICAgICAgICAgTm9kZSBnZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlKAorICAgICAgICAgICAgICAgICAgICAgICAgR2V0SW5kZXhlZFByb3Bl
cnR5U3RvcmFnZSwgbm9kZS5jb2RlT3JpZ2luLCBPcEluZm8obm9kZS5hcnJheU1vZGUoKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuY2hpbGQy
KCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IEVkZ2UoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoZ2V0SW5kZXhlZFByb3Bl
cnR5U3RvcmFnZSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZCht
X2luZGV4SW5CbG9jaywgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFNlZSBh
Ym92ZS4gQ29udGludWVkIGZpeHVwIG9mIHRoZSBncmFwaCBzaG91bGQgbm90IHJlZ3Jlc3Mgb3Vy
IGFiaWxpdHkKKyAgICAgICAgICAgICAgICAvLyB0byBzcGVjdWxhdGUuCisgICAgICAgICAgICAg
ICAgQVNTRVJUKCFtX2dyYXBoW25vZGUuY2hpbGQzKCldKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDg4LDQ4ICs0ODgsMjAg
QEAgcHVibGljOgogICAgIAogICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKICAgICB7
Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgIGNhc2UgUHV0QnlWYWw6IHsK
LSAgICAgICAgICAgIGlmICghYXQodmFyQXJnQ2hpbGQobm9kZSwgMSkpLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gYXQodmFyQXJnQ2hpbGQobm9kZSwgMCkpLnByZWRp
Y3Rpb24oKTsKLSAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlTXV0YWJsZUFycmF5U3BlY3Vs
YXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IFB1dEJ5VmFsU2FmZTogewotICAgICAgICAgICAgaWYgKCFhdCh2YXJBcmdDaGlsZChub2RlLCAx
KSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhdCh2YXJBcmdDaGls
ZChub2RlLCAwKSkucHJlZGljdGlvbigpOwotICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVN
dXRhYmxlQXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoaXNBcnJheVNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7
Ci0gICAgICAgICAgICBpZiAoIWF0KHZhckFyZ0NoaWxkKG5vZGUsIDEpKS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGF0KHZhckFyZ0NoaWxkKG5vZGUsIDApKS5wcmVk
aWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBHZXRCeVZhbDogewotICAgICAgICAgICAgaWYgKCFhdChub2RlLmNoaWxkMigpKS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRp
Y3Rpb24oKTsKLSAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgc3dpdGNoIChub2RlLmFy
cmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgIGNhc2Ug
QXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAgICAgcmV0dXJuIG5vZGUub3AoKSA9
PSBHZXRCeVZhbDsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBjYXNlIEFycmF5OjpB
cmd1bWVudHM6CisgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldEJ5VmFsKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
IC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTU0OSw3ICs1MjEsNiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gIWlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpOwogICAg
ICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNl
IFB1dEJ5VmFsU2FmZToKICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgogICAgICAgICAgICAg
cmV0dXJuICFieVZhbElzUHVyZShub2RlKTsKICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMjYyNTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNs
dWRlICJERkdBZGphY2VuY3lMaXN0LmgiCisjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5j
bHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAi
REZHTm9kZVR5cGUuaCIKQEAgLTczMiw2ICs3MzMsMzQgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICByZXR1cm4gbV9vcEluZm87CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzQXJyYXlNb2RlKCkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgIGNh
c2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGNhc2UgU3RyaW5n
Q2hhckNvZGVBdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFy
cmF5OjpNb2RlIGFycmF5TW9kZSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzQXJyYXlNb2Rl
KCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk6Ok1vZGU+KG1fb3BJbmZvKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzZXRBcnJheU1vZGUoQXJyYXk6Ok1vZGUgYXJyYXlNb2Rl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FycmF5TW9kZSgpKTsKKyAgICAgICAgbV9vcElu
Zm8gPSBhcnJheU1vZGU7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzVmlydHVhbFJlZ2lzdGVy
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAhPSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDYgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogICAgIC8qIG9wY29kZXMgdXNlIFZhckFyZ3MgYmVhdXNlIHRoZXkg
bWF5IGhhdmUgdXAgdG8gNCBjaGlsZHJlbi4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgbWFj
cm8oUHV0QnlWYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNaWdo
dENsb2JiZXIpIFwKLSAgICBtYWNybyhQdXRCeVZhbFNhZmUsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSGFzVmFyQXJncyB8IE5vZGVNaWdodENsb2JiZXIpIFwKICAgICBtYWNybyhQdXRCeVZhbEFs
aWFzLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTWlnaHRDbG9iYmVy
KSBcCiAgICAgbWFjcm8oR2V0QnlJZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oR2V0QnlJZEZsdXNoLCBOb2RlUmVzdWx0
SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKQEAgLTE0MywxNyAr
MTQyLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEJ5
T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldEFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwK
LSAgICBtYWNybyhHZXRBcmd1bWVudHNMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1h
Y3JvKEdldFN0cmluZ0xlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0SW50
OEFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRJbnQxNkFycmF5
TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRJbnQzMkFycmF5TGVuZ3Ro
LCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRVaW50OEFycmF5TGVuZ3RoLCBOb2Rl
UmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aCwgTm9k
ZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0VWludDE2QXJyYXlMZW5ndGgsIE5vZGVSZXN1
bHRJbnQzMikgXAotICAgIG1hY3JvKEdldFVpbnQzMkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50
MzIpIFwKLSAgICBtYWNybyhHZXRGbG9hdDMyQXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikg
XAotICAgIG1hY3JvKEdldEZsb2F0NjRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAg
ICAgbWFjcm8oR2V0U2NvcGVDaGFpbiwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0U2Nv
cGVkVmFyLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0
U2NvcGVkVmFyLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMjYyNTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjEyLDE3ICs2MTIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAg
ICAgY2FzZSBHZXRBcmd1bWVudHNMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0SW50OEFycmF5TGVu
Z3RoOgotICAgICAgICBjYXNlIEdldEludDE2QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0
SW50MzJBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50OEFycmF5TGVuZ3RoOgotICAg
ICAgICBjYXNlIEdldFVpbnQ4Q2xhbXBlZEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVp
bnQxNkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQzMkFycmF5TGVuZ3RoOgotICAg
ICAgICBjYXNlIEdldEZsb2F0MzJBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRGbG9hdDY0
QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0U3RyaW5nTGVuZ3RoOgogICAgICAgICBjYXNl
IEludDMyVG9Eb3VibGU6CiAgICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKICAgICAgICAgY2Fz
ZSBHZXRMb2NhbFVubGlua2VkOgpAQCAtNjM3LDcgKzYyNiw2IEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0QnlW
YWxTYWZlOgogICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpXS5tZXJnZUZsYWdz
KE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzSW50KTsKICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpXS5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
NzQsMTIgKzIzNzQsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgaWYgKCFub2RlLnByZWRp
Y3Rpb24oKSB8fCAhYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpIHx8ICFhdChub2RlLmNo
aWxkMigpKS5wcmVkaWN0aW9uKCkpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAg
ICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVu
ZGVjaWRlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihJbmFkcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWF0KG5vZGUuY2hp
bGQyKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSB8fCAoIW5vZGUuY2hpbGQzKCkgJiYgIWF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpHZW5lcmljOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHko
dGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CkBAIC0yMzkyLDEyMCArMjM5Myw5MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMo
KSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
dG9yYWdlLmdwcigpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBXZSB3aWxsIGhhdmUgYWxyZWFkeSBzcGVjdWxhdGVkIHRoYXQgdGhlIGJhc2UgaXMgc29tZSBr
aW5kIG9mIGFycmF5LAorICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludC4KKyAgICAgICAgICAg
IEFTU0VSVChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LCBub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgPT0gU3BlY1N0cmluZykg
eworICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgewot
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgaXNJbnQ4
QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/
IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVJbnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNp
emVvZihpbnQxNl90KSwgaXNJbnQxNkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlw
ZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5j
aGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIGlzSW50MzJBcnJheVNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5
VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKLSAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50
OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkg
PyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVu
c2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWlu
dDhDbGFtcGVkQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCks
IG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNw
ZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwot
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25Bcmd1bWVudHMobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB
cnJheTo6SW50OEFycmF5OgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXpl
b2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCks
IG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlE
ZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRU
eXBlZEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpVaW50
OENsYW1wZWRBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2Rl
LCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURl
c2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNp
Z25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6
OkZsb2F0MzJBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFy
cmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YoZmxvYXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpG
bG9hdDY0QXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6
ZW9mKGRvdWJsZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQx
NkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheSht
X2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
dWludDE2X3QpLCBpc1VpbnQxNkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRB
cnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgaXNVaW50MzJBcnJheVNwZWN1
bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQz
MkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5
KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXpl
b2YoZmxvYXQpLCBpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVk
QXJyYXlTcGVjQ2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKGRvdWJsZSksIGlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNr
IDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7Ci0KLSAgICAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCB0aGUgYmFzZSBp
cyBzb21lIGtpbmQgb2YgYXJyYXksCi0gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQuCi0gICAgICAg
IAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwot
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKLQotICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5VmFsOgotICAgIGNhc2UgUHV0QnlWYWxT
YWZlOiB7CisgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgIEVkZ2UgY2hpbGQxID0g
bV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgRWRnZSBjaGlsZDIg
PSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwogICAgICAgICBFZGdlIGNoaWxk
MyA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgICAgIAotICAgICAg
ICBpZiAoIWF0KGNoaWxkMSkucHJlZGljdGlvbigpIHx8ICFhdChjaGlsZDIpLnByZWRpY3Rpb24o
KSkgeworICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBtb2RlRm9yUHV0KG5vZGUuYXJy
YXlNb2RlKCkpOworICAgICAgICBib29sIGFscmVhZHlIYW5kbGVkID0gZmFsc2U7CisgICAgICAg
IAorICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICBjYXNlIEFycmF5OjpVbmRl
Y2lkZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAg
ICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmICghYXQoY2hpbGQyKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICAgICAgQVNTRVJU
KG5vZGUub3AoKSA9PSBQdXRCeVZhbCk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzEodGhpcywgY2hpbGQxKTsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzIodGhpcywgY2hpbGQyKTsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzModGhp
cywgY2hpbGQzKTsKQEAgLTI1MTcsMTkgKzI0ODksOTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5zdHJp
Y3RNb2RlRm9yKG5vZGUuY29kZU9yaWdpbikgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdCA6IG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBhcmcxR1BSLCBhcmcyR1BSLCBhcmczR1BSKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAg
ICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChhbHJlYWR5SGFuZGxlZCkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEp
OwogICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hp
bGQyKTsKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkp
IHsKLSAgICAgICAgICAgIGRhdGFMb2coIiBpbiBoZXJlICIpOworICAgICAgICAKKyAgICAgICAg
R1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKKworICAgICAgICBzcGVjdWxhdGVBcnJheShhcnJheU1vZGUsIGNo
aWxkMSwgYmFzZVJlZyk7CisKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICAgICAg
Y2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91
bmRzOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwor
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAgICAgIC8v
IE1hcCBiYXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNj
cmF0Y2ggcmVnaXN0ZXIuCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICAg
ICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5n
cHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaFJlZyk7
CisKKyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgeworICAgICAg
ICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6
OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAgICAg
R1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgaWYgKGFycmF5TW9k
ZSA9PSBBcnJheTo6SlNBcnJheSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKKwor
ICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAg
ICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgIAorICAgICAgICAgICAgLy8gR2V0IHRoZSBh
cnJheSBzdG9yYWdlLgorICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVn
OworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKworICAgICAgICAg
ICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBt
X251bVZhbHVlc0luVmVjdG9yLgorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90
SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKworICAgICAgICAgICAgLy8gSWYgd2UncmUgd3Jp
dGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xl
bmd0aCkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVy
dHlSZWcpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHBy
b3BlcnR5UmVnKTsKKworICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygm
bV9qaXQpOworICAgICAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKKworICAgICAg
ICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICAgICAgICAgIG1faml0
LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworCisgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
ID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAg
ICAgICAgICAgICAgICAgICAgYmV5b25kQXJyYXlCb3VuZHMsIHRoaXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25Q
dXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRB
cnJheUJvdW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OkFyZ3VtZW50czogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgY2hpbGQzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBz
Y3JhdGNoLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gc2NyYXRjaDIu
Z3ByKCk7CkBAIC0yNTM3LDE1ICsyNTg3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgaWYgKCFpc0FyZ3VtZW50c1NwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChiYXNlUmVnKSwgY2hpbGQxLAotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZBcmd1bWVudHM6OnNfaW5mbykpKTsK
LSAgICAgICAgICAgIH0KLSAgICAKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJndW1lbnRzOjpvZmZz
ZXRPZkRhdGEoKSksCiAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZyk7CkBAIC0yNTc5LDIyNSAr
MjYyMCw1MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRl
SW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJy
YXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgaXNJbnQ4QXJyYXlTcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNw
ZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsKLSAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+
aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUs
IHNpemVvZihpbnQxNl90KSwgaXNJbnQxNkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFy
cmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVj
dWxhdGVJbnQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5
cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBpc0ludDMyQXJy
YXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdChjaGlsZDEp
LnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1w
ZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZih1aW50OF90KSwgaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9y
Tm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlw
ZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
ZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXko
KSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgaXNVaW50MTZBcnJheVNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0No
ZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51
aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUs
IHNpemVvZih1aW50MzJfdCksIGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVk
QXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQx
KS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZs
b2F0KSwgaXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5t
X3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hl
Y2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkp
IHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpLCBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0No
ZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgIAotICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgY2hpbGQzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
Ci0KLSAgICAgICAgLy8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFsdWUgaW50byByZWdpc3RlcnMs
IGFsbG9jYXRlIGEgc2NyYXRjaCByZWdpc3Rlci4KLSAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
LSAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBz
Y3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHdyaXRlQmFy
cmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0
eUFjY2Vzcywgc2NyYXRjaFJlZyk7Ci0KLSAgICAgICAgc3BlY3VsYXRlQXJyYXkoY2hpbGQxLCBi
YXNlUmVnKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOwotICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsKQotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBiZXlvbmRBcnJheUJvdW5kcyk7Ci0KLSAgICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgcHJv
cGVydHkudXNlKCk7Ci0gICAgICAgIHZhbHVlLnVzZSgpOwotICAgICAgICAKLSAgICAgICAgLy8g
R2V0IHRoZSBhcnJheSBzdG9yYWdlLgotICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHNjcmF0
Y2hSZWc7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0KLSAgICAgICAg
Ly8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251
bVZhbHVlc0luVmVjdG9yLgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFs
dWUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkp
OwotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFs
dWVzSW5WZWN0b3IpKSk7Ci0KLSAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUg
d2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwotICAgICAgICBt
X2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgbV9qaXQu
c3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7Ci0gICAgICAgIG1faml0
LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwotCi0gICAgICAgIGxlbmd0aERv
ZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKLSAgICAgICAgbm90SG9sZVZhbHVlLmxpbmso
Jm1faml0KTsKLQotICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgotICAg
ICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLQotICAgICAgICBpZiAobm9k
ZS5vcCgpID09IFB1dEJ5VmFsU2FmZSkgewotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBi
ZXlvbmRBcnJheUJvdW5kcywgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJs
b2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5k
c1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCi0g
ICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVS
ZWcpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBj
YXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2ppdC5ncmFwaCgp
LnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICBFZGdlIGNoaWxkMiA9IG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgICAgIEVkZ2UgY2hpbGQzID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghYXQoY2hp
bGQxKS5wcmVkaWN0aW9uKCkgfHwgIWF0KGNoaWxkMikucHJlZGljdGlvbigpKSB7Ci0gICAgICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Cisg
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGlzQWN0aW9uYWJsZU11
dGFibGVBcnJheVNwZWN1bGF0aW9uKGF0KGNoaWxkMSkucHJlZGljdGlvbigpKSk7Ci0gICAgICAg
IEFTU0VSVChhdChjaGlsZDIpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7Ci0KLSAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEpOwotICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQyKTsKLSAgICAgICAgaWYg
KGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
aW50OF90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Ci0gICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50
MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZihpbnQxNl90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBTaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEo
KS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZihpbnQzMl90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBTaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJy
YXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBOb1R5cGVkQXJyYXlTcGVj
Q2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90
KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCks
IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1w
ZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFy
cmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9w
ZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkZs
b2F0MzJBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5z
aG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3Qp
LCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChh
dChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zih1aW50MzJfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZihmbG9hdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjayk7Ci0gICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5m
bG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YoZG91YmxlKSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrKTsKLSAgICAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGF0
KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlQXJyYXkoKSk7Ci0KLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgY2hpbGQzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAg
ICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLQotICAgICAgICB3cml0ZUJh
cnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJv
cGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwotCi0gICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3Rv
cmFnZS4KLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwotICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0
b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCi0gICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1
ZSB0byB0aGUgYXJyYXkuCi0gICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdw
cigpOwotICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgbV9q
aXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAorCiAgICAgY2FzZSBS
ZWdFeHBFeGVjOiB7CiAgICAgICAgIGlmIChjb21waWxlUmVnRXhwRXhlYyhub2RlKSkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTMzODYsODEgKzMyNTMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxh
dGVBcnJheShub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKLQotICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQo
KSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSks
IHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7
Ci0gICAgICAgIAotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgR2V0QXJndW1l
bnRzTGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7Cisg
ICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgY29tcGlsZUdldEFycmF5TGVuZ3RoKG5v
ZGUpOwogICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDog
ewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAKLSAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BS
KTsKLQotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdldEludDhBcnJheUxlbmd0aDogewot
ICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPmlu
dDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBHZXRJbnQxNkFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBl
ZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgIWlzSW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0SW50MzJB
cnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5n
bG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0ludDMyQXJyYXlT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6IHsKLSAgICAg
ICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNVaW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0
VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVz
Y3JpcHRvcigpLCBub2RlLCAhaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgR2V0VWludDE2QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVk
QXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgIWlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldFVpbnQz
MkFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0
Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc1VpbnQzMkFy
cmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRGbG9hdDMyQXJyYXlMZW5ndGg6IHsK
LSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT5m
bG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBp
bGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVz
Y3JpcHRvcigpLCBub2RlLCAhaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KICAgICBj
YXNlIENoZWNrRnVuY3Rpb246IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rp
b24odGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2Fj
aGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxl
cjo6Tm90RXF1YWwsIGZ1bmN0aW9uLmdwcigpLCBub2RlLmZ1bmN0aW9uKCkpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiAxMjYyNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDEzICsyNjksODAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2xlYXJHZW5lcmF0aW9uSW5mbwogICAgIG1fZnBycyA9IFJlZ2lzdGVyQmFuazxG
UFJJbmZvPigpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheShFZGdl
IGVkZ2UsIEdQUlJlZyBiYXNlUmVnKQorY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVk
QXJyYXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKLSAgICBBYnN0cmFjdFZh
bHVlJiBhcnJheVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOwotICAgIGlmIChhcnJheVZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICYmIGFy
cmF5VmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmNsYXNzSW5mbygp
ID09ICZKU0FycmF5OjpzX2luZm8pCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNl
IEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBtX2ppdC5nbG9iYWxEYXRhKCktPmlu
dDhBcnJheURlc2NyaXB0b3IoKS5tX2NsYXNzSW5mbzsKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFy
cmF5OgorICAgICAgICByZXR1cm4gbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3Jp
cHRvcigpLm1fY2xhc3NJbmZvOworICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAg
IHJldHVybiBtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCkubV9jbGFz
c0luZm87CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVy
biBtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLm1fY2xh
c3NJbmZvOworICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gbV9q
aXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX2NsYXNzSW5mbzsKKyAg
ICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIG1faml0Lmdsb2JhbERh
dGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCkubV9jbGFzc0luZm87CisgICAgY2FzZSBBcnJh
eTo6RmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gbV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9h
dDMyQXJyYXlEZXNjcmlwdG9yKCkubV9jbGFzc0luZm87CisgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgorICAgICAgICByZXR1cm4gbV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlE
ZXNjcmlwdG9yKCkubV9jbGFzc0luZm87CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorfQorCitjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKSVQ6
OnNwZWN1bGF0ZUFycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSwgRWRnZSBlZGdlLCBHUFJSZWcg
YmFzZVJlZykKK3sKKyAgICBUeXBlZEFycmF5RGVzY3JpcHRvciogcmVzdWx0ID0gdHlwZWRBcnJh
eURlc2NyaXB0b3IoYXJyYXlNb2RlKTsKKyAgICAKKyAgICBpZiAobW9kZUFscmVhZHlDaGVja2Vk
KG1fc3RhdGUuZm9yTm9kZShlZGdlKSwgYXJyYXlNb2RlKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAorICAgIENsYXNzSW5mbyogZXhwZWN0ZWRDbGFzc0luZm8gPSAwOworICAgIAorICAgIHN3aXRj
aCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
SW5hZHF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0g
JkpTU3RyaW5nOjpzX2luZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkpTQXJy
YXk6CisgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgICAgIC8vIFRo
aXMgY29kZSBkdXBsaWNhdGVzIHRoZSBjb2RlIGJlbG93IGluIGFudGljaXBhdGlvbiBvZiB0aGlz
IGNvZGUgYmVpbmcKKyAgICAgICAgLy8gc3Vic3RhbnRpYWxseSBjaGFuZ2VkIGluIHRoZSBmdXR1
cmUuCisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAg
ICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVt
cC5ncHIoKSwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGV4
cGVjdGVkQ2xhc3NJbmZvID0gJkFyZ3VtZW50czo6c19pbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAg
ICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFy
cmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpG
bG9hdDY0QXJyYXk6CisgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNz
SW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKICAgICBHUFJUZW1wb3Jhcnkg
dGVtcCh0aGlzKTsKICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7
CkBAIC0yODQsNyArMzUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQXJyYXko
RWRnZQogICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdw
cigpLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihleHBlY3RlZENsYXNzSW5mbykpKTsKIH0KIAog
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4KQpA
QCAtMTYyMCwxMSArMTY4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZh
bE9uU3QKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBpZiAoIWlzU3RyaW5nU3BlY3Vs
YXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSk7Ci0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBBU1NFUlQobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKSwgQXJyYXk6OlN0cmluZykpOwogCiAgICAgLy8gdW5zaWduZWQgY29t
cGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2Vz
IHRoYXQgYXJlIHRvbyBsYXJnZQogICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
U3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSkpOwpAQCAtMjAxOCwyMyArMjA4MSw3IEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVDbGFtcERvdWJsZVRvQnl0ZShKSVQKIAogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgTm9kZSYgbm9kZSwgYm9vbCBuZWVkc1NwZWN1bGF0aW9uQ2hlY2sp
Ci17Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
LSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIAotICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAg
IAotICAgIGlmIChuZWVkc1NwZWN1bGF0aW9uQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZUdQUiksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAg
IAotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBkZXNj
cmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSwgcmVzdWx0R1BSKTsKLSAgICAKLSAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIE5vZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJh
eVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzIHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFy
cmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNz
IHNpZ25lZG5lc3MpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS5jaGlsZDIoKSk7CkBAIC0yMDQ3LDEyICsyMDk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGlmIChzcGVjdWxh
dGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKSB7Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKLSAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVCht
b2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFy
cmF5TW9kZSgpKSk7CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLApAQCAtMjA5NywxMyArMjEzOSwxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZG91YmxlUmVzdWx0KGZyZXN1
bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYgbm9kZSwgc2l6
ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMgc3BlY3Vs
YXRpb25SZXF1aXJlbWVudHMsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVk
QXJyYXlSb3VuZGluZyByb3VuZGluZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUmIG5vZGUsIHNpemVfdCBlbGVt
ZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5k
aW5nIHJvdW5kaW5nKQogewogICAgIEVkZ2UgYmFzZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMCk7CiAgICAgRWRnZSB2YWx1ZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMik7CiAgICAgCi0gICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9
IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VVc2UsIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwogICAgIEdQUlRlbXBvcmFyeSB2YWx1
ZTsKICAgICBHUFJSZWcgdmFsdWVHUFI7CiAgICAgCkBAIC0yMTc0LDcgKzIyMTQsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgQVNTRVJUKHZhbHVlR1BS
ICE9IHN0b3JhZ2VSZWcpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1
aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5U3BlY0NoZWNrKQorICAgIGlmIChub2RlLm9wKCkgPT0g
UHV0QnlWYWwpCiAgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKTsKIAogICAgIHN3aXRjaCAoZWxlbWVudFNp
emUpIHsKQEAgLTIxOTAsMTIgKzIyMzAsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9ySQogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5
U3BlY0NoZWNrKQorICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWwpCiAgICAgICAgIG91dE9m
Qm91bmRzLmxpbmsoJm1faml0KTsKICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiB9CiAK
LXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlJiBub2RlLCBzaXplX3Qg
ZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlv
blJlcXVpcmVtZW50cykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxv
YXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2Rl
JiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0yMjA0LDE3ICsyMjQ0LDExIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwKICAgICBHUFJSZWcgYmFz
ZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgIAotICAgIGlm
IChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKLSAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorCisg
ICAgQVNTRVJUKG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaHVsZDEo
KSksIG5vZGUuYXJyYXlNb2RlKCkpKTsKIAogICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKLSAgICBBU1NFUlQoc3BlY3Vs
YXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5U3BlY0NoZWNrKTsKICAgICBzcGVjdWxh
dGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAog
ICAgICAgICBtX2ppdC5icmFuY2gzMigKQEAgLTIyMzgsMTUgKzIyNzIsMTQgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbAogICAgIGRvdWJsZVJlc3VsdChyZXN1bHRS
ZWcsIG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3Qg
ZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlv
blJlcXVpcmVtZW50cykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZs
b2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BS
UmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXpl
KQogewogICAgIEVkZ2UgYmFzZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
MCk7CiAgICAgRWRnZSB2YWx1ZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
Mik7CiAgICAgCiAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVl
VXNlKTsKICAgICAKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZVVzZS5pbmRleCgpLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKKyAgICBBU1NFUlQobW9kZUFscmVhZHlD
aGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNodWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkp
OwogICAgIAogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCkBAIC0yMjU1LDcg
KzIyODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAg
CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlw
dG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG91dE9mQm91bmRzOwotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5
cGVkQXJyYXlTcGVjQ2hlY2spCisgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKICAgICAg
ICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5t
X2xlbmd0aE9mZnNldCkpOwogICAgIAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKQEAgLTIy
NzIsNyArMjMwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckYK
ICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAg
aWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVNwZWNDaGVjaykKKyAg
ICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsKQogICAgICAgICBvdXRPZkJvdW5kcy5saW5rKCZt
X2ppdCk7CiAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogfQpAQCAtMzA2Niw3NSArMzA5
OSwzNiBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEoTm9kCiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKE5vZGUmIG5v
ZGUpCiB7Ci0gICAgQVNTRVJUKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSk7Ci0gICAg
QVNTRVJUKGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7Ci0gICAg
ICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIAogICAgIEdQUlRlbXBvcmFy
eSBzdG9yYWdlKHRoaXMpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
LSAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNo
aWxkMSgpKS5wcmVkaWN0aW9uKCkgPT0gU3BlY1N0cmluZykgewotICAgICAgICBpZiAoIWlzU3Ry
aW5nU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0KKyAgICAKKyAgICBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9CisgICAgICAgIHNwZWN1bGF0ZUFy
cmF5KG5vZGUuYXJyYXlNb2RlKCksIG5vZGUuY2hpbGQxKCksIGJhc2VSZWcpOworICAgIAorICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0
cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIAogICAgICAgICAv
LyBTcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWNjZXNzaW5nIGEgcm9wZQogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZVJlZykpOwogCiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3RyaW5n
SW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2Rl
LmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgewotICAgICAgICBjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50
OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICBpZiAoIWlzSW50OEFycmF5U3BlY3VsYXRpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcp
LCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNl
dCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5m
bykpKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxz
ZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Ci0g
ICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xv
YmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICBpZiAoIWlzSW50MTZB
cnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxs
OjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV9jbGFzc0luZm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdl
UmVnKTsKLSAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUlu
dDMyQXJyYXkoKSkgewotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAg
ICAgaWYgKCFpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdl
T2Zmc2V0KSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5z
aG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNj
cmlwdG9yKCk7Ci0gICAgICAgIGlmICghaXNVaW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNo
aWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNj
cmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxzZSBpZiAoYXQo
bm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkgewotICAg
ICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgIGlmICghaXNV
aW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0lu
Zm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9IGVs
c2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsK
LSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5n
bG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICBpZiAoIWlzVWlu
dDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
Q2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihk
ZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3Rv
cmFnZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKTsK
LSAgICAgICAgaWYgKCFpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1f
c3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKLSAgICAgICAgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0
MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgaWYgKCFpc0Zsb2F0MzJBcnJheVNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNl
UmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpjbGFzc0luZm9P
ZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFz
c0luZm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9
IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgp
KSB7Ci0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9q
aXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgIGlmICgh
aXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0
KSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9k
ZS5jaGlsZDEoKSwgYmFzZVJlZyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNl
IEFycmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Fy
cmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yKTsKKyAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVmLCBkZXNjcmlwdG9y
LT5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQor
ICAgIAogICAgIHN0b3JhZ2VSZXN1bHQoc3RvcmFnZVJlZywgbV9jb21waWxlSW5kZXgpOwogfQog
CkBAIC0zMjUyLDYgKzMyNDYsNDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFy
Z3VtZW50cwogICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiB9
CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2RlJiBub2Rl
KQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIAorICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0K
KyAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9kZS5hcnJheU1vZGUoKSwgbm9kZS5jaGlsZDEoKSwg
YmFzZUdQUik7CisKKyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICBjYXNlIEFy
cmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5
OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX2xlbmd0aCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgCisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFy
cmF5OjpTdHJpbmc6CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEFyZ3Vt
ZW50c0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUKGRlc2NyaXB0b3IpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIp
OworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdG
dW5jdGlvbk5vQ2hlY2soTm9kZSYgbm9kZSkKIHsKICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgyLDYgKzIwODIsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhOb2RlJik7CiAgICAgdm9pZCBj
b21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUmKTsKICAgICAKKyAgICB2b2lkIGNvbXBpbGVH
ZXRBcnJheUxlbmd0aChOb2RlJik7CisgICAgCiAgICAgdm9pZCBjb21waWxlVmFsdWVUb0ludDMy
KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJlcihOb2RlJik7CiAgICAgdm9p
ZCBjb21waWxlRG91YmxlQXNJbnQzMihOb2RlJik7CkBAIC0yMDk1LDEyICsyMDk3LDYgQEAgcHVi
bGljOgogI2VuZGlmCiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSYpOwogICAgIHZvaWQg
Y29tcGlsZVNvZnRNb2R1bG8oTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldFR5cGVkQXJyYXlM
ZW5ndGgoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlJiwgYm9vbCBuZWVkc1NwZWN1
bGF0aW9uQ2hlY2spOwotICAgIGVudW0gVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRz
IHsKLSAgICAgICAgTm9UeXBlZEFycmF5U3BlY0NoZWNrLAotICAgICAgICBOb1R5cGVkQXJyYXlU
eXBlU3BlY0NoZWNrLAotICAgICAgICBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcwotICAgIH07CiAg
ICAgZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7CiAgICAgICAgIFNpZ25lZFR5cGVkQXJyYXks
CiAgICAgICAgIFVuc2lnbmVkVHlwZWRBcnJheQpAQCAtMjExMCwxMCArMjEwNiwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIENsYW1wUm91bmRpbmcKICAgICB9OwogICAgIHZvaWQgY29tcGlsZUdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBl
bGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5
U2lnbmVkbmVzcyk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwg
Tm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1l
bnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nID0gVHJ1bmNhdGVS
b3VuZGluZyk7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVk
QXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxG
b3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5
U3BlY3VsYXRpb25SZXF1aXJlbWVudHMpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVt
ZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNl
LCBHUFJSZWcgcHJvcGVydHksIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlT
aWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgdm9pZCBjb21waWxlUHV0
QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKICAg
ICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSYpOwogICAgIHZvaWQgY29tcGls
ZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihOb2RlJik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhl
YyhOb2RlJik7CkBAIC0yMTk5LDcgKzIxOTUsOSBAQCBwdWJsaWM6CiAgICAgSnVtcFJlcGxhY2Vt
ZW50V2F0Y2hwb2ludCogZm9yd2FyZFNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCA9IFVu
Y291bnRhYmxlV2F0Y2hwb2ludCk7CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogc3Bl
Y3VsYXRpb25XYXRjaHBvaW50V2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKEV4aXRLaW5kLCBib29s
IGlzRm9yd2FyZCk7CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVBcnJheShFZGdlIGJhc2VFZGdl
LCBHUFJSZWcgYmFzZVJlZyk7CisgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVk
QXJyYXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlKTsKKyAgICAKKyAgICBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciogc3BlY3VsYXRlQXJyYXkoQXJyYXk6Ok1vZGUsIEVkZ2UgYmFzZUVkZ2UsIEdQ
UlJlZyBiYXNlUmVnKTsKICAgICAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJS
ZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJu
Rm9ybWF0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159875</attachid>
            <date>2012-08-22 00:51:26 -0700</date>
            <delta_ts>2012-08-22 14:22:29 -0700</delta_ts>
            <desc>it runs simple things</desc>
            <filename>arraymode_patch_6.diff</filename>
            <type>text/plain</type>
            <size>134951</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2MjcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBA
CisyMDEyLTA4LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgYWNjZXNzZXMgc2hvdWxkIHJlbWVtYmVyIHdoYXQga2luZCBvZiBhcnJheSB0aGV5IGFy
ZSBwcmVkaWN0ZWQgdG8gYWNjZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NDQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0
aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAg
ICAoSlNDOjpERkc6OnJlZmluZUFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFs
cmVhZHlDaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgorICAgICAg
ICAqIGRmZy9ERkdBcnJheU1vZGUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6OmNhbkNTRVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVGb3JQdXQp
OgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29k
ZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9k
ZVdpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
QXJyYXlNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQ
aGFzZTo6Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Q1NFUGhhc2U6OnN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5hdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YnlWYWxJc1B1cmUpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpjbG9iYmVyc1dvcmxkKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FycmF5TW9kZSk6CisgICAgICAgIChOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjphcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OnNldEFycmF5TW9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6dHlwZWRBcnJheURlc2NyaXB0b3IpOgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAg
ICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKwogMjAxMi0wOC0yMSAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgSW50cm9kdWNpbmcgdGhl
IFZNSW5zcGVjdG9yIGZvciBWTSBkZWJ1Z2dpbmcgdXNlLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIFNFVChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAKICAgICBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKICAg
ICBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKKyAgICBkZmcvREZHQXJy
YXlNb2RlLmNwcAogICAgIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCiAgICAgZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAogICAgIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTI2MjU0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE1NSw2ICsxNTUsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnBy
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNp
b24gMTI2MjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcg
Y29weSkKQEAgLTk1LDYgKzk1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZGVidWdnZXIvRGVidWdn
ZXIuY3BwIFwKICAgICBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAgXAogICAgIGRmZy9ERkdBcmd1
bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBcCisgICAgZGZnL0RGR0FycmF5TW9kZS5jcHAg
XAogICAgIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwIFwKICAgICBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwIFwKICAgICBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Miw2ICsxNDIsOCBAQAogCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyog
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDNDMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdT
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovOyB9OwogCQkwRjYzOTQ1NDE1RDA3MDU1
MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuY3BwICovOyB9OwogCQkwRjYzOTQ1NTE1RDA3MDU3MDA2QTU5N0MgLyogQXJyYXlQcm9maWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ1
MjE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2Mzk0ODQxNUU0ODExODAwNkE1OTdDIC8q
IERGR0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCAqLzsg
fTsKKwkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0ODIxNUU0ODExNDAw
NkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBC
N0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2
OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04OTYsNiArODk4LDggQEAKIAkJMEY2Mzk0M0QxNUM3
NUYxNDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJv
ZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheVByb2Zp
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQ1MjE1RDA3MDUxMDA2
QTU5N0MgLyogQXJyYXlQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFycmF5UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYzOTQ4MTE1
RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0FycmF5TW9kZS5jcHA7IHBhdGggPSBkZmcvREZHQXJyYXlNb2Rl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1
OTdDIC8qIERGR0FycmF5TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdBcnJheU1vZGUuaDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0
IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFjZW5jeUxpc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0Vk
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRWRnZS5oOyBwYXRoID0g
ZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNTcsMTIgKzIy
NjEsMTUgQEAKIAkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMEYxRTNBNDMxNTM0Q0JBRDAwMEY5
NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCAqLywKLQkJCQkwRjE2MDE1QTE1NjE5OEJGMDBD
MjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi8sCi0JCQkJMEYx
NjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aCAqLywKIAkJCQkwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5j
cHAgKi8sCiAJCQkJMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUu
aCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5o
ICovLAorCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0Lmgg
Ki8sCisJCQkJMEYxRTNBNDMxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24u
aCAqLywKKwkJCQkwRjE2MDE1QTE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAgKi8sCisJCQkJMEYxNjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjYzOTQ4MTE1RTQ4MTE0
MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCAqLywKKwkJCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2
QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8sCiAJCQkJMEZDMDk3NkIxNDY4QUI0QTAwQ0YyNDQy
IC8qIERGR0Fzc2VtYmx5SGVscGVycy5jcHAgKi8sCiAJCQkJMEZDMDk3NkMxNDY4QUI0QTAwQ0Yy
NDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5oICovLAogCQkJCTBGNjIwMTcwMTQzRkNEMkYwMDY4
Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8sCkBAIC0yMzA2LDcgKzIzMTMsNiBAQAogCQkJCTg2
RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8sCiAJCQkJMEZBNTgxQjcxNTBF
OTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgKi8sCiAJCQkJMEZBNTgxQjgxNTBFOTUy
QTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovLAotCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3
QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUyQTAwQjlB
MkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCiAJCQkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8q
IERGR0VkZ2UuaCAqLywKIAkJCQk4NkVDOURCRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0
aW9ucy5jcHAgKi8sCkBAIC0yODg0LDYgKzI4OTAsNyBAQAogCQkJCUZFNEEzMzIwMTVCRDJFMDcw
MDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0M0YxNUM3
NUYxOTAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMzQ4NSw2ICszNDkyLDcgQEAKIAkJ
CQlGRTRBMzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ1NDE1RDA3MDU1MDA2QTU5
N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjM5NDg0MTVFNDgx
MTgwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg2OCw2NSArODY4LDY2IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6
IHsKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBpZiAoIW5vZGUucHJl
ZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSB8fCAhbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2Rl
LmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hp
bGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSB8fCAoIW5vZGUuY2hpbGQzKCkgJiYgIW1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpKSB7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5j
b2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
Lm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICht
X2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAg
ICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Fy
Z3VtZW50cyk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKSA9PSBTcGVjU3RyaW5nKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgY2FzZSBBcnJheTo6SlNB
cnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIG1vcmUgY29uc2VydmF0aXZlIGhhbmRsaW5nIG9m
IHRoZSBvdXQtb2YtYm91bmRzCisgICAgICAgICAgICAvLyBjYXNlLgorICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDhBcnJh
eSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUlu
dDE2QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgogICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwogICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNw
ZWN1bGF0ZUludDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5Ogog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50
OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1Vp
bnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKKyAgICAgICAg
Y2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVp
bnQxNkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMy
QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKQEAg
LTkzNCw1NSArOTM1LDQ3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkp
IHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0
ZUZsb2F0NjRBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgY2Fz
ZSBQdXRCeVZhbEFsaWFzOgotICAgIGNhc2UgUHV0QnlWYWxTYWZlOiB7CisgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOiB7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLQogICAgICAgICBF
ZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2Ug
Y2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGls
ZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgCi0gICAgICAg
IGlmICghbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtjaGlsZDJdLnBy
ZWRpY3Rpb24oKSkgeworICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUo
KSkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1Zh
bGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAo
IW1fZ3JhcGhbY2hpbGQyXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgICAgICAgICAgfHwgbV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUFy
Z3VtZW50cygpCi0jZW5kaWYKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgQVNTRVJUKG5v
ZGUub3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLm9wKCkgPT0gUHV0QnlWYWxTYWZlKTsKKyAgICAg
ICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5m
aWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kczoKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwp
OworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJy
YXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQz
XS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC05OTAsOCArOTgzLDcgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNw
ZWN1bGF0ZUludDE2QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5Ogog
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7CiAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBp
ZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKQEAgLTk5OSw4ICs5
OTEsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVt
YmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBo
W2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJ
bnQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQpAQCAtMTAwOCw4ICs5OTksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7
CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtMTAxNyw4ICsxMDA3LDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1
bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFt
cGVkQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OENs
YW1wZWRBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKQEAgLTEwMjYsOCArMTAxNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgp
KSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDEpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQz
XS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC0xMDM1LDggKzEwMjMsNyBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxk
U3BlY3VsYXRlVWludDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJh
eToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY1VpbnQzMkFycmF5KTsK
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtMTA0
NCwyMyArMTAzMSwyMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKKyAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3Bl
Y051bWJlcik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0NjRBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0
ZXIoU3BlY0Zsb2F0NjRBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1i
ZXIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlW
YWxTYWZlKQotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC0xMzU2LDY5
ICsxMzQwLDgyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAg
ICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
SW50MzIpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgR2V0QXJndW1lbnRzTGVuZ3RoOgot
ICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNJbnQzMik7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAg
ICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CisgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1N0cmluZ1NwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3Vt
ZW50czoKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCghaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhBcnJh
eSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNJbnQxNkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMkFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0ludDMyQXJyYXlTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQoIWlzVWludDhBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhB
cnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6
CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCghaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
VWludDE2QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50
MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5
OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFp
c0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQzMkFy
cmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KCFpc1N0cmluZ1NwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcp
OwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgICAKLSAgICBjYXNlIEdldEludDhBcnJheUxlbmd0aDoKLSAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KCFpc0ludDhBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJ
bnQ4QXJyYXkpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR2V0SW50MTZBcnJheUxlbmd0aDoKLSAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KCFpc0ludDE2QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
SW50MTZBcnJheSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRJbnQzMkFycmF5TGVuZ3RoOgotICAgICAgICBu
b2RlLnNldENhbkV4aXQoIWlzSW50MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNJbnQzMkFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50OEFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1VpbnQ4QXJyYXkpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR2V0VWludDhDbGFtcGVkQXJyYXlMZW5ndGg6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRV
aW50MTZBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQxNkFycmF5
U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5KTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdldFVpbnQzMkFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzVWludDMy
QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwotICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR2V0RmxvYXQzMkFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
RmxvYXQzMkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsK
LSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHZXRGbG9hdDY0QXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCghaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQ2
NEFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAg
Y2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRzIChp
LmUuIHByb3RvdHlwZXMpLgpAQCAtMTQ4OSw2NSArMTQ4Niw0NSBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVh
cigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgQVNTRVJUKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKTsKICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyAoYWxtb3N0KSBhbHdheXMgZm9s
bG93ZWQgYnkgR2V0QnlWYWwsIHdoaWNoIGRvZXMgZXhpdC4gU28gbm8gcG9pbnQgaW4gdHJ5aW5n
IHRvIGJlIG1vcmUgcHJlY2lzZS4KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
c2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpID09IFNwZWNTdHJpbmcpIHsKKyAgICAgICAg
c3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwot
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0uc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SlNB
cnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICAg
ICAgLy8gVGhpcyBkb2Vzbid0IGZpbHRlciBhbnl0aGluZyBtZWFuaW5nZnVsIHJpZ2h0IG5vdy4g
V2UgbWF5IHdhbnQgdG8gYWRkCisgICAgICAgICAgICAvLyBDRkEgdHJhY2tpbmcgb2YgYXJyYXkg
bW9kZSBzcGVjdWxhdGlvbnMsIGJ1dCB3ZSBkb24ndCBoYXZlIHRoYXQsIHlldC4KKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFycmF5KTsKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MTZB
cnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUlu
dDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgogICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVVaW50OEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3Bl
Y3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDE2QXJy
YXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNPdGhlcik7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVVaW50MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5Ogog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQzMkFycmF5
KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hv
dWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQz
MkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zs
b2F0MzJBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6OkZsb2F0NjRBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNGbG9hdDY0QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNs
ZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgYnJlYWs7IAogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2YXJpYWJsZXMgYWxpYXMgdGhlIGFyZ3Vt
ZW50cyBhbmQgbm90aGluZyBlbHNlLCBhbmQgYXJlCi0gICAgICAgIC8vIHVzZWQgb25seSBmb3Ig
R2V0QnlWYWwgYW5kIEdldEFyZ3VtZW50c0xlbmd0aCBhY2Nlc3Nlcy4gQXQgdGhlIHNhbWUgdGlt
ZSwKKyAgICAgICAgLy8gdXNlZCBvbmx5IGZvciBHZXRCeVZhbCBhbmQgR2V0QXJyYXlMZW5ndGgg
YWNjZXNzZXMuIEF0IHRoZSBzYW1lIHRpbWUsCiAgICAgICAgIC8vIGlkZW50aWZ5IHVzZXMgb2Yg
Q3JlYXRlQXJndW1lbnRzIHRoYXQgYXJlIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIGFyZ3VtZW50
cwogICAgICAgICAvLyBiZWluZyBhbGlhc2VkIG9ubHkgdG8gdmFyaWFibGVzIHRoYXQgc2F0aXNm
eSB0aGVzZSBjb25zdHJhaW50cy4KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkg
ewpAQCAtMjc3LDM0ICsyNzcsMjUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUucHJlZGljdGlvbigpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKSAhPSBBcnJheTo6QXJndW1l
bnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyhu
b2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhhdCdzIHNvIGF3ZnVsIGFuZCBwcmV0dHkg
bXVjaCBpbXBvc3NpYmxlIHNpbmNlIGl0IHdvdWxkCisgICAgICAgICAgICAgICAgICAgIC8vIGlt
cGx5IHRoYXQgdGhlIGFyZ3VtZW50cyB3ZXJlIHByZWRpY3RlZCBpbnRlZ2VyLCBidXQgaXQncwor
ICAgICAgICAgICAgICAgICAgICAvLyBnb29kIHRvIGJlIGRlZmVuc2l2ZSBhbmQgdGhvcm91Z2gu
CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDIo
KSk7CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNB
Y3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCld
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJy
YXlMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkgIT0g
QXJyYXk6OkFyZ3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFy
Z3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGFyZ3VtZW50cyBpcyB1c2VkIGFzIGFu
IGluZGV4LCB0aGVuIGl0J3MgYW4gZXNjYXBpbmcgdXNlLgotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhhdCdzIHNvIGF3ZnVsIGFuZCBwcmV0dHkgbXVjaCBpbXBvc3NpYmxlIHNpbmNlIGl0
IHdvdWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBseSB0aGF0IHRoZSBhcmd1bWVu
dHMgd2VyZSBwcmVkaWN0ZWQgaW50ZWdlciwgYnV0IGl0J3MKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGdvb2QgdG8gYmUgZGVmZW5zaXZlIGFuZCB0aG9yb3VnaC4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVC
YWRBcmd1bWVudHNVc2VzKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2Ug
R2V0QXJndW1lbnRzTGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgb2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDk2
LDM4ICs0ODcsMzIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUucHJlZGljdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAh
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc0FjdGlvbmFibGVBcnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgc2ltcGxpZmllZCB0byBH
ZXRNeUFyZ3VtZW50QnlWYWwgaWYgd2Uga25vdyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpdCBzYXRpc2ZpZXMgZWl0aGVyIGNvbmRpdGlvbiAoMSkgb3IgKDIpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gMSkgSXRzIGZpcnN0IGNoaWxkIGlzIGEgdmFsaWQgQXJndW1lbnRz
QWxpYXNpbmdEYXRhIGFuZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIElubGlu
ZUNhbGxGcmFtZSogaXMgbm90IG1hcmtlZCBhcyBjcmVhdGluZyBhcmd1bWVudHMuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyAyKSBJdHMgZmlyc3QgY2hpbGQgaXMgQ3JlYXRlQXJndW1lbnRz
IGFuZCBpdHMgSW5saW5lQ2FsbEZyYW1lKgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
aXMgbm90IG1hcmtlZCBhcyBjcmVhdGluZyBhcmd1bWVudHMuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFw
aFtub2RlLmNoaWxkMSgpXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxk
cmVuLmNoaWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1lbnRCeVZhbCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBv
cCBub3cgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudEJ5VmFsLgorICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS5hcnJheU1vZGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIGNhbiBiZSBzaW1wbGlmaWVkIHRvIEdldE15QXJndW1lbnRCeVZhbCBp
ZiB3ZSBrbm93IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgLy8gaXQgc2F0aXNmaWVzIGVpdGhl
ciBjb25kaXRpb24gKDEpIG9yICgyKToKKyAgICAgICAgICAgICAgICAgICAgLy8gMSkgSXRzIGZp
cnN0IGNoaWxkIGlzIGEgdmFsaWQgQXJndW1lbnRzQWxpYXNpbmdEYXRhIGFuZCB0aGUKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgSW5saW5lQ2FsbEZyYW1lKiBpcyBub3QgbWFya2VkIGFzIGNy
ZWF0aW5nIGFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgLy8gMikgSXRzIGZpcnN0IGNo
aWxkIGlzIENyZWF0ZUFyZ3VtZW50cyBhbmQgaXRzIElubGluZUNhbGxGcmFtZSoKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgaXMgbm90IG1hcmtlZCBhcyBjcmVhdGluZyBhcmd1bWVudHMuCisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGlt
aXplKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRl
cmVmKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNo
aWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5z
ZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7
IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vdyB0aGF0IGl0J3MgYSBHZXRN
eUFyZ3VtZW50QnlWYWwuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1
bWVudHNMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpICE9IEFycmF5OjpBcmd1bWVu
dHMpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNo
aWxkMSgpXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHQXJyYXlNb2RlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fi
c3RyYWN0VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitBcnJh
eTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9vbCBtYWtlU2FmZSkKK3sK
KyAgICAvLyBGSVhNRTogd2UgbWF5IHdhbnQgdG8gYWRkIHNvbWUgcG9seW1vcnBoaWMgc3VwcG9y
dCBpbiB0aGUgZnV0dXJlLiBUaGF0J3Mgd2h5IHRoaXMKKyAgICAvLyBpcyBhIHN3aXRjaCBzdGF0
ZW1lbnQgcmlnaHQgbm93LgorICAgIAorICAgIHN3aXRjaCAobW9kZXMpIHsKKyAgICBjYXNlIDA6
CisgICAgICAgIHJldHVybiBBcnJheTo6Rm9yY2VFeGl0OworICAgIGNhc2UgSXNKU0FycmF5Ogor
ICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzIDogQXJy
YXk6OkpTQXJyYXk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lk
ZWQ7CisgICAgfQorfQorCitBcnJheTo6TW9kZSByZWZpbmVBcnJheU1vZGUoQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBpbmRleCkKK3sK
KyAgICBpZiAoIWJhc2UgfHwgIWluZGV4KSB7CisgICAgICAgIC8vIFRoZSBvbmx5IGNhc2UgaW4g
d2hpY2ggdGhlcmUgY2FuIGJlIG5vIHByZWRpY3Rpb25zIGlzIGlmIHRoaXMgY29kZSBoYXNuJ3QK
KyAgICAgICAgLy8gZXhlY3V0ZWQsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIGhhdmUgYWxyZWFk
eSBzZXQgdGhpcyB0byBGb3JjZUV4aXQuCisgICAgICAgIEFTU0VSVChhcnJheU1vZGUgPT0gQXJy
YXk6OkZvcmNlRXhpdCk7CisgICAgICAgIHJldHVybiBBcnJheTo6Rm9yY2VFeGl0OworICAgIH0K
KyAgICAKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihpbmRleCkgfHwgIWlzQ2VsbFNwZWN1
bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OkdlbmVyaWM7CisgICAgCisgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgY2Fz
ZSBBcnJheTo6SlNBcnJheToKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Cisg
ICAgICAgIHJldHVybiBhcnJheU1vZGU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICBy
ZXR1cm4gQXJyYXk6OlN0cmluZzsKKyAgICAKKyAgICBpZiAoaXNBcmd1bWVudHNTcGVjdWxhdGlv
bihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpBcmd1bWVudHM7CisgICAgCisgICAgaWYg
KGlzSW50OEFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6SW50
OEFycmF5OworICAgIAorICAgIGlmIChpc0ludDE2QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAg
ICAgICAgcmV0dXJuIEFycmF5OjpJbnQxNkFycmF5OworICAgIAorICAgIGlmIChpc0ludDMyQXJy
YXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpJbnQzMkFycmF5Owor
ICAgIAorICAgIGlmIChpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0
dXJuIEFycmF5OjpVaW50OEFycmF5OworICAgIAorICAgIGlmIChpc1VpbnQ4Q2xhbXBlZEFycmF5
U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6VWludDhDbGFtcGVkQXJy
YXk7CisgICAgCisgICAgaWYgKGlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAg
ICAgcmV0dXJuIEFycmF5OjpVaW50MTZBcnJheTsKKyAgICAKKyAgICBpZiAoaXNVaW50MzJBcnJh
eVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OlVpbnQzMkFycmF5Owor
ICAgIAorICAgIGlmIChpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICBy
ZXR1cm4gQXJyYXk6OkZsb2F0MzJBcnJheTsKKyAgICAKKyAgICBpZiAoaXNGbG9hdDY0QXJyYXlT
cGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpGbG9hdDY0QXJyYXk7Cisg
ICAgCisgICAgcmV0dXJuIEFycmF5OjpHZW5lcmljOworfQorCitib29sIG1vZGVBbHJlYWR5Q2hl
Y2tlZChBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAg
IHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAg
ICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91
bmRzOgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2lu
Z2xldG9uKCkKKyAgICAgICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOworICAgICAgICAKKyAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1NwZWN1
bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKKyAgICAgICAgcmV0dXJuIGlzSW50OEFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsK
KyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIGlz
SW50MTZBcnJheVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2Ug
QXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBpc0ludDMyQXJyYXlTcGVjdWxhdGlv
bih2YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5Ogor
ICAgICAgICByZXR1cm4gaXNVaW50OEFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAg
ICAgICAgCisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVy
biBpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBj
YXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIGlzVWludDE2QXJyYXlTcGVj
dWxhdGlvbih2YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKKyAgICAgICAgcmV0dXJuIGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpOworCisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gaXNG
bG9hdDMyQXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworCisgICAgY2FzZSBBcnJheTo6
RmxvYXQ2NEFycmF5OgorICAgICAgICByZXR1cm4gaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbih2
YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBt
b2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoK
KyAgICAgICAgcmV0dXJuICJVbmRlY2lkZWQiOworICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Cisg
ICAgICAgIHJldHVybiAiR2VuZXJpYyI7CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAg
ICByZXR1cm4gIlN0cmluZyI7CisgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgcmV0
dXJuICJKU0FycmF5IjsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAg
ICAgIHJldHVybiAiSlNBcnJheU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6CisgICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6CisgICAgICAgIHJldHVybiAiSW50OEFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFy
cmF5OgorICAgICAgICByZXR1cm4gIkludDE2QXJyYXkiOworICAgIGNhc2UgQXJyYXk6OkludDMy
QXJyYXk6CisgICAgICAgIHJldHVybiAiSW50MzJBcnJheSI7CisgICAgY2FzZSBBcnJheTo6VWlu
dDhBcnJheToKKyAgICAgICAgcmV0dXJuICJVaW50OEFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpV
aW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuICJVaW50MTZBcnJheSI7CisgICAgY2FzZSBBcnJh
eTo6VWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiAiVWludDMyQXJyYXkiOworICAgIGNhc2Ug
QXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJuICJGbG9hdDMyQXJyYXkiOworICAg
IGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuICJGbG9hdDY0QXJyYXki
OworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEJldHRlciB0byByZXR1cm4gc29tZXRoaW5nIHRo
ZW4gaXQgaXMgdG8gY3Jhc2guIFJlbWVtYmVyLCB0aGlzIG1ldGhvZAorICAgICAgICAvLyBpcyBi
ZWluZyBjYWxsZWQgZnJvbSBvdXIgbWFpbiBkaWFnbm9zdGljIHRvb2wsIHRoZSBJUiBkdW1wZXIu
IEl0J3MgbGlrZQorICAgICAgICAvLyBhIHN0YWNrIHRyYWNlLiBTbyBpZiB3ZSBnZXQgaGVyZSB0
aGVuIHByb2JhYmx5IHNvbWV0aGluZyBoYXMgYWxyZWFkeQorICAgICAgICAvLyBnb25lIHdyb25n
LgorICAgICAgICByZXR1cm4gIlVua25vd24hIjsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR0FycmF5TW9kZV9oCisjZGVmaW5lIERGR0FycmF5TW9kZV9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQXJy
YXlQcm9maWxlLmgiCisjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgQWJzdHJhY3RWYWx1ZTsKKworLy8gVXNlIGEg
bmFtZXNwYWNlICsgZW51bSBpbnN0ZWFkIG9mIGVudW0gYWxvbmUgdG8gYXZvaWQgdGhlIG5hbWVz
cGFjZSBjb2xsaXNpb24KKy8vIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLCBzaW5jZSB3ZSBz
YXkgdGhpbmdzIGxpa2UgIkludDhBcnJheSIgYW5kICJKU0FycmF5IgorLy8gaW4gbG90cyBvZiBv
dGhlciBwbGFjZXMsIHRvIG1lYW4gc3VidGx5IGRpZmZlcmVudCB0aGluZ3MuCituYW1lc3BhY2Ug
QXJyYXkgeworZW51bSBNb2RlIHsKKyAgICBVbmRlY2lkZWQsIC8vIEltcGxpZXMgdGhhdCB3ZSBu
ZWVkIHByZWRpY3Rpb25zIHRvIGRlY2lkZS4gV2Ugd2lsbCBuZXZlciBnZXQgdG8gdGhlIGJhY2tl
bmQgaW4gdGhpcyBtb2RlLgorICAgIEZvcmNlRXhpdCwgLy8gSW1wbGllcyB0aGF0IHdlIGhhdmUg
bm8gaWRlYSBob3cgdG8gZXhlY3V0ZSB0aGlzIG9wZXJhdGlvbiwgc28gd2Ugc2hvdWxkIGp1c3Qg
Z2l2ZSB1cC4KKyAgICBHZW5lcmljLAorICAgIFN0cmluZywKKyAgICBKU0FycmF5LAorICAgIEpT
QXJyYXlPdXRPZkJvdW5kcywKKyAgICBBcmd1bWVudHMsCisgICAgSW50OEFycmF5LAorICAgIElu
dDE2QXJyYXksCisgICAgSW50MzJBcnJheSwKKyAgICBVaW50OEFycmF5LAorICAgIFVpbnQ4Q2xh
bXBlZEFycmF5LAorICAgIFVpbnQxNkFycmF5LAorICAgIFVpbnQzMkFycmF5LAorICAgIEZsb2F0
MzJBcnJheSwKKyAgICBGbG9hdDY0QXJyYXkKK307Cit9IC8vIG5hbWVzcGFjZSBBcnJheQorCitB
cnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9vbCBtYWtlU2FmZSk7
CisKK0FycmF5OjpNb2RlIHJlZmluZUFycmF5TW9kZShBcnJheTo6TW9kZSwgU3BlY3VsYXRlZFR5
cGUgYmFzZSwgU3BlY3VsYXRlZFR5cGUgaW5kZXgpOworCitib29sIG1vZGVBbHJlYWR5Q2hlY2tl
ZChBYnN0cmFjdFZhbHVlJiwgQXJyYXk6Ok1vZGUpOworCitjb25zdCBjaGFyKiBtb2RlVG9TdHJp
bmcoQXJyYXk6Ok1vZGUpOworCitpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5OjpNb2Rl
IGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQXJyYXk6
OlVuZGVjaWRlZDoKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgY2FzZSBBcnJheTo6
R2VuZXJpYzoKKyAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2lubGlu
ZSBBcnJheTo6TW9kZSBtb2RlRm9yUHV0KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgcmV0
dXJuIEFycmF5OjpHZW5lcmljOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgY2FzZSBBcnJh
eTo6QXJndW1lbnRzOgorICAgICAgICByZXR1cm4gQXJyYXk6OkdlbmVyaWM7CisjZW5kaWYKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gYXJyYXlNb2RlOworICAgIH0KK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdBcnJheU1vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
Q2FsbExpbmtTdGF0dXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdB
cnJheU1vZGUuaCIKICNpbmNsdWRlICJERkdCeXRlQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiREZH
Q2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgpAQCAtODE2LDYgKzgx
NywzNCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb24obV9n
cmFwaC5zaXplKCksIG1fY3VycmVudFByb2ZpbGluZ0luZGV4KTsKICAgICB9CisgICAgCisgICAg
QXJyYXk6Ok1vZGUgZ2V0QXJyYXlNb2RlV2l0aG91dE9TUkV4aXQoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgTm9kZUluZGV4IGJhc2UpCisgICAgeworICAgICAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAg
ICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOworICAgICAgICBpZiAocHJv
ZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwcm9maWxlLT5leHBl
Y3RlZFN0cnVjdHVyZSgpKSksIGJhc2UpOworICAgICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIlNsb3cgY2FzZSBwcm9maWxl
IGZvciBiYyMldTogJXVcbiIsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudElu
ZGV4KS0+bV9jb3VudGVyKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgYm9vbCBtYWtlU2Fm
ZSA9CisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxk
VGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQorICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3V0T2ZCb3Vu
ZHMpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZyb21PYnNlcnZlZChwcm9maWxlLT5vYnNl
cnZlZEFycmF5TW9kZXMoKSwgbWFrZVNhZmUpOworICAgIH0KKyAgICAKKyAgICBBcnJheTo6TW9k
ZSBnZXRBcnJheU1vZGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZUluZGV4
IGJhc2UpCisgICAgeworICAgICAgICBBcnJheTo6TW9kZSByZXN1bHQgPSBnZXRBcnJheU1vZGVX
aXRob3V0T1NSRXhpdChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhc2UpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHJlc3VsdCA9PSBBcnJheTo6Rm9yY2VFeGl0KQorICAgICAgICAgICAgYWRkVG9HcmFw
aChGb3JjZU9TUkV4aXQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CiAKICAgICBOb2RlSW5kZXggbWFrZVNhZmUoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBA
IC0xNTQ4LDggKzE1NzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMo
Ym9vCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpbnQgaW5k
ZXhPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsKLSAgICAg
ICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2UsIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7Ci0gICAgICAg
IE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwgZ2V0KHRo
aXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpLCBzdG9yYWdlKTsKKyAgICAgICAg
Tm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8o
QXJyYXk6OlN0cmluZyksIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5k
KSk7CiAKICAgICAgICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3Bl
cmFuZCwgY2hhckNvZGUpOwpAQCAtMTU2NSw4ICsxNTkzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgIGludCBpbmRleE9wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDEpOwotICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQp
KTsKLSAgICAgICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQXQs
IGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSwgc3RvcmFnZSk7Cisg
ICAgICAgIE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBPcElu
Zm8oQXJyYXk6OlN0cmluZyksIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVy
YW5kKSk7CiAKICAgICAgICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0
T3BlcmFuZCwgY2hhckNvZGUpOwpAQCAtMjE0OCwxMyArMjE3NSw5IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5v
ZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFzZSk7CiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7Ci0gICAgICAg
ICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlm
IChwcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwcm9m
aWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICAgICAgTm9kZUluZGV4
IHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwg
YmFzZSwgcHJvcGVydHkpOwotICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0gYWRkVG9H
cmFwaChHZXRCeVZhbCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHByb3Bl
cnR5LCBwcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0g
YWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9u
KSwgYmFzZSwgcHJvcGVydHkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGdldEJ5VmFsKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0
X2J5X3ZhbCk7CkBAIC0yMTYyLDI2ICsyMTg1LDE2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKICAgICAg
ICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOworCisgICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUo
Y3VycmVudEluc3RydWN0aW9uLCBiYXNlKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTm9k
ZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwog
ICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7Ci0gICAgICAgICAgICBw
cm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChwcm9m
aWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwcm9maWxlLT5l
eHBlY3RlZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZygiU2xvdyBjYXNlIHByb2ZpbGUg
Zm9yIGJjIyV1OiAldVxuIiwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5k
ZXgpLT5tX2NvdW50ZXIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIGJvb2wgbWFrZVNhZmUgPQot
ICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Y291bGRU
YWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCi0gICAgICAgICAgICAgICAgfHwgbV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3V0T2ZC
b3VuZHMpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsK
ICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKICAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKHZhbHVlKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBt
YWtlU2FmZSA/IFB1dEJ5VmFsU2FmZSA6IFB1dEJ5VmFsLCBPcEluZm8oMCksIE9wSW5mbygwKSk7
CisgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgUHV0QnlWYWwsIE9wSW5mbyhh
cnJheU1vZGUpLCBPcEluZm8oMCkpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRf
YnlfdmFsKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAJKHJldmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsOCArMjg0LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxTYWZlOiB7CisgICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGguYnlW
YWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkgPT0gY2hpbGQxICYm
IGNhbm9uaWNhbGl6ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSA9PSBjYW5vbmljYWxp
emUoY2hpbGQyKSkKQEAgLTM2NSw3ICszNjQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxTYWZlOgogICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElm
IFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFu
CiAgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3Np
YmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQpAQCAtNDA5LDcgKzQwNyw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAg
ICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbFNhZmU6
CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNz
aW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRl
eCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCkBAIC01
MTUsNyArNTEyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElz
UHVyZShub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxh
dGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAgICAgICAg
ICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1
c2UgYSBzdHJ1Y3R1cmUKQEAgLTU2MCw3ICs1NTYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewogICAgICAgICAgICAg
ICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4g
YXJyYXkgd2l0aCBhbgogICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVu
IGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKQEAgLTYxMyw3ICs2
MDgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgIGNhc2Ug
UHV0QnlWYWxTYWZlOgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5v
ZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhh
dCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAgICAgICAgICAgIC8v
IGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0
cnVjdHVyZQpAQCAtOTI1LDE3ICs5MTksNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFyaXRo
TWluOgogICAgICAgICBjYXNlIEFyaXRoTWF4OgogICAgICAgICBjYXNlIEFyaXRoU3FydDoKLSAg
ICAgICAgY2FzZSBHZXRJbnQ4QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0SW50MTZBcnJh
eUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRJbnQzMkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNl
IEdldFVpbnQ4QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0VWludDhDbGFtcGVkQXJyYXlM
ZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0VWludDE2QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2Ug
R2V0VWludDMyQXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0RmxvYXQzMkFycmF5TGVuZ3Ro
OgotICAgICAgICBjYXNlIEdldEZsb2F0NjRBcnJheUxlbmd0aDoKICAgICAgICAgY2FzZSBHZXRD
YWxsZWU6Ci0gICAgICAgIGNhc2UgR2V0U3RyaW5nTGVuZ3RoOgogICAgICAgICBjYXNlIFN0cmlu
Z0NoYXJBdDoKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIElu
dDMyVG9Eb3VibGU6CkBAIC0xMTAzLDggKzEwODcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCku
aW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNlIFB1dEJ5VmFs
U2FmZTogeworICAgICAgICBjYXNlIFB1dEJ5VmFsOiB7CiAgICAgICAgICAgICBFZGdlIGNoaWxk
MSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgICAgICBFZGdlIGNoaWxk
MiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAgICBpZiAoaXNBY3Rp
b25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24obV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24o
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
cmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsOTcgKzc0LDkwIEBAIHByaXZhdGU6CiAgICAg
ICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgR2V0QnlJZDogeworICAg
ICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZub2RlOworICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0
aW9uKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9j
aygpLT5pZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCku
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgYm9vbCBpc0FycmF5ID0gaXNBcnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGJvb2wgaXNBcmd1bWVudHMgPSBpc0FyZ3Vt
ZW50c1NwZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsKLSAg
ICAgICAgICAgIGJvb2wgaXNTdHJpbmcgPSBpc1N0cmluZ1NwZWN1bGF0aW9uKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGJvb2wgaXNJbnQ4QXJyYXkg
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpOwotICAg
ICAgICAgICAgYm9vbCBpc0ludDE2QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZUludDE2QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNJbnQzMkFycmF5ID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCk7Ci0gICAg
ICAgICAgICBib29sIGlzVWludDhBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxk
U3BlY3VsYXRlVWludDhBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc1VpbnQ4Q2xhbXBlZEFy
cmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OENsYW1wZWRB
cnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc1VpbnQxNkFycmF5ID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBp
c1VpbnQzMkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50
MzJBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc0Zsb2F0MzJBcnJheSA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCk7Ci0gICAgICAgICAgICBi
b29sIGlzRmxvYXQ2NEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVGbG9hdDY0QXJyYXkoKTsKLSAgICAgICAgICAgIGlmICghaXNBcnJheSAmJiAhaXNBcmd1bWVu
dHMgJiYgIWlzU3RyaW5nICYmICFpc0ludDhBcnJheSAmJiAhaXNJbnQxNkFycmF5ICYmICFpc0lu
dDMyQXJyYXkgJiYgIWlzVWludDhBcnJheSAmJiAhaXNVaW50OENsYW1wZWRBcnJheSAmJiAhaXNV
aW50MTZBcnJheSAmJiAhaXNVaW50MzJBcnJheSAmJiAhaXNGbG9hdDMyQXJyYXkgJiYgIWlzRmxv
YXQ2NEFycmF5KQorICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGVQ
dHItPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgQCV1
IC0+ICVzIiwgbV9jb21waWxlSW5kZXgsIGlzQXJyYXkgPyAiR2V0QXJyYXlMZW5ndGgiIDogIkdl
dFN0cmluZ0xlbmd0aCIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoaXNBcnJheSkgewotICAg
ICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgICAg
ICBub2RlLmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4pLT5nZXRBcnJheVBy
b2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcnJheVByb2ZpbGUpCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGVQdHItPmNv
ZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGVQdHIt
PmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJh
eU1vZGUgPSBBcnJheTo6VW5kZWNpZGVkOworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkg
ewogICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0
dXJlKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgucmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIE5vZGUgY2hlY2tTdHJ1Y3R1
cmUoQ2hlY2tTdHJ1Y3R1cmUsIG5vZGUuY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBub2RlLmNoaWxk
MSgpLmluZGV4KCkpOwotICAgICAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlLnJlZigpOwotICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCBjaGVja1N0cnVjdHVyZUluZGV4ID0gbV9ncmFwaC5zaXpl
KCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2luZGV4SW5CbG9jaywgY2hlY2tT
dHJ1Y3R1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZS0+aGFzRGVm
aW5pdGVTdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihub2Rl
UHRyLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgY2hlY2tTdHJ1Y3R1cmUo
Q2hlY2tTdHJ1Y3R1cmUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0
cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgbm9kZVB0ci0+
Y2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlLnJl
ZigpOworICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hlY2tTdHJ1Y3R1cmVJbmRleCA9
IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChjaGVj
a1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZCht
X2luZGV4SW5CbG9jaywgY2hlY2tTdHJ1Y3R1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgICAg
IG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUtPm9i
c2VydmVkQXJyYXlNb2RlcygpLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBh
cnJheU1vZGUgPSByZWZpbmVBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgYXJyYXlNb2RlLAor
ICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAorICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7CisgICAg
ICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5k
ZWNpZGVkOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0QXJyYXlMZW5ndGgp
OworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlUHRyLT5mbGFncygpICYgTm9kZU11c3RHZW5l
cmF0ZSk7CisgICAgICAgICAgICAgICAgbm9kZVB0ci0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVy
YXRlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICBub2RlUHRyLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc0FyZ3VtZW50
cykKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldEFyZ3VtZW50c0xlbmd0aCk7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChpc1N0cmluZykKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdl
dFN0cmluZ0xlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0ludDhBcnJheSkKLSAgICAg
ICAgICAgICAgICBub2RlLnNldE9wKEdldEludDhBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBl
bHNlIGlmIChpc0ludDE2QXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRJbnQx
NkFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50MzJBcnJheSkKLSAgICAg
ICAgICAgICAgICBub2RlLnNldE9wKEdldEludDMyQXJyYXlMZW5ndGgpOwotICAgICAgICAgICAg
ZWxzZSBpZiAoaXNVaW50OEFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0VWlu
dDhBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1VpbnQ4Q2xhbXBlZEFycmF5
KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0VWludDhDbGFtcGVkQXJyYXlMZW5ndGgp
OwotICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50MTZBcnJheSkKLSAgICAgICAgICAgICAgICBu
b2RlLnNldE9wKEdldFVpbnQxNkFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlz
VWludDMyQXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRVaW50MzJBcnJheUxl
bmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0Zsb2F0MzJBcnJheSkKLSAgICAgICAgICAg
ICAgICBub2RlLnNldE9wKEdldEZsb2F0MzJBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChpc0Zsb2F0NjRBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldEZsb2F0
NjRBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAvLyBObyBsb25nZXIgTXVzdEdlbmVyYXRlCi0g
ICAgICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAg
ICAgICAgICBub2RlLmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBt
X2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAg
ICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKQotICAgICAgICAgICAg
ICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQot
ICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRl
QXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdz
KE5vcCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKG5vZGUp
OwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMihub2RlKTsKLSAg
ICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDMobm9kZSk7Ci0gICAgICAg
ICAgICAgICAgbm9kZS5zZXRSZWZDb3VudCgwKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG5vZGUuc2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIHJlZmluZUFycmF5TW9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKSwKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAvLyBQ
cmVkaWN0aW9ucyBzaG91bGQgb25seSBiZWNvbWUgbW9yZSwgcmF0aGVyIHRoYW4gbGVzcywgcmVm
aW5lZC4gSGVuY2UKKyAgICAgICAgICAgIC8vIGlmIHdlIHdlcmUgZXZlciBhYmxlIHRvIENTRSB0
aGUgc3RvcmFnZSBwb2ludGVyIGZvciB0aGlzIG9wZXJhdGlvbiwKKyAgICAgICAgICAgIC8vIHRo
ZW4gd2Ugc2hvdWxkIGFsd2F5cyBjb250aW51ZSB0byBiZSBhYmxlIHRvIGRvIHNvLgorICAgICAg
ICAgICAgQVNTRVJUKGNhbkNTRVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2Fz
ZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewotICAgICAg
ICAgICAgaWYgKCEhbm9kZS5jaGlsZDMoKSAmJiBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm9wKCkg
PT0gTm9wKQotICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBFZGdlKCk7
CisgICAgICAgICAgICBub2RlLnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICByZWZpbmVB
cnJheU1vZGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCksCisgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAorICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFnZShub2RlLmFycmF5TW9kZSgp
KSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMygpKSB7CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGUuY2hpbGQzKCldLm9wKCkgPT0gR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGUu
Y2hpbGQzKCldLmFycmF5TW9kZSgpID09IG5vZGUuYXJyYXlNb2RlKCkpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCB1
c2UgdGhlIG5vZGUgcmVmZXJlbmNlIGFmdGVyIHdlIGRvIHRoZSBhcHBlbmQuCisgICAgICAgICAg
ICAgICAgICAgIE5vZGUgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIG5vZGUuY29kZU9yaWdpbiwgT3BJ
bmZvKG5vZGUuYXJyYXlNb2RlKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGls
ZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCkpOworICAgICAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9ncmFwaC5zaXpl
KCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBFZGdlKGdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguYXBwZW5kKGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG4gPSAyOyBuLS07KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5yZWYoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBnZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlSW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgLy8gU2VlIGFib3ZlLiBDb250aW51ZWQgZml4dXAgb2YgdGhl
IGdyYXBoIHNob3VsZCBub3QgcmVncmVzcyBvdXIgYWJpbGl0eQorICAgICAgICAgICAgICAgIC8v
IHRvIHNwZWN1bGF0ZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUuY2hpbGQzKCkpOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtMzMzLDI2ICszMjYsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgY2Fz
ZSBQdXRCeVZhbFNhZmU6IHsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKTsKKyAgICAgICAgY2FzZSBQdXRCeVZhbDogewogICAgICAgICAgICAg
RWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAg
aWYgKCFtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW2NoaWxkMl0ucHJl
ZGljdGlvbigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFtX2dy
YXBoW2NoaWxkMl0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgaWYgKGlzQWN0aW9uYWJsZUludE11dGFibGVBcnJheVNwZWN1bGF0
aW9uKG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGhbY2hpbGQzXS5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgc3dpdGNoIChtb2RlRm9yUHV0KG5vZGUuYXJyYXlNb2RlKCkpKSB7Cisg
ICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5
OjpJbnQxNkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpV
aW50OENsYW1wZWRBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5Ogor
ICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNBY3Rpb25h
YmxlRmxvYXRNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlv
bigpKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgogICAgICAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZp
c2lvbiAxMjYyNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjExLDYgKzIxMSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKGNvbnN0
IGNoYXIqIHByZWZpeCwgTm9kCiAgICAgICAgIGRhdGFMb2coIiVzJXMiLCBoYXNQcmludGVkID8g
IiwgIiA6ICIiLCBub2RlRmxhZ3NBc1N0cmluZyhub2RlLmZsYWdzKCkpKTsKICAgICAgICAgaGFz
UHJpbnRlZCA9IHRydWU7CiAgICAgfQorICAgIGlmIChub2RlLmhhc0FycmF5TW9kZSgpKSB7Cisg
ICAgICAgIGRhdGFMb2coIiVzJXMiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBtb2RlVG9TdHJp
bmcobm9kZS5hcnJheU1vZGUoKSkpOworICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICB9
CiAgICAgaWYgKG5vZGUuaGFzVmFyTnVtYmVyKCkpIHsKICAgICAgICAgZGF0YUxvZygiJXN2YXIl
dSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUudmFyTnVtYmVyKCkpOwogICAgICAgICBo
YXNQcmludGVkID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHJldmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtNDg4LDQ4ICs0ODgsMjAgQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZS5vcCgpKSB7Ci0gICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKLSAgICAgICAgICAgIGlmICghYXQo
dmFyQXJnQ2hpbGQobm9kZSwgMSkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gYXQodmFyQXJnQ2hpbGQobm9kZSwgMCkpLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAg
IGlmICghaXNBY3Rpb25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZTogewotICAg
ICAgICAgICAgaWYgKCFhdCh2YXJBcmdDaGlsZChub2RlLCAxKSkuc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhdCh2YXJBcmdDaGlsZChub2RlLCAwKSkucHJlZGljdGlv
bigpOwotICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBpZiAoaXNBcnJheVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAgICAgICBpZiAoIWF0
KHZhckFyZ0NoaWxkKG5vZGUsIDEpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiA9IGF0KHZhckFyZ0NoaWxkKG5vZGUsIDApKS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAg
ICBpZiAoIWlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAg
ICAgICAgaWYgKCFhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAg
IGlmICghaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAg
IGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJv
dW5kczoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBcnJheTo6U3Ry
aW5nOgorICAgICAgICAgICAgcmV0dXJuIG5vZGUub3AoKSA9PSBHZXRCeVZhbDsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgICAg
ICBpZiAobm9kZS5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKQEAgLTU0OSw3ICs1MjEsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gIWlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpOwogICAgICAgICBjYXNlIEdldEJ5VmFsOgog
ICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAg
ICAgY2FzZSBQdXRCeVZhbEFsaWFzOgogICAgICAgICAgICAgcmV0dXJuICFieVZhbElzUHVyZShu
b2RlKTsKICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiAxMjYyNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdBZGphY2VuY3lMaXN0
LmgiCisjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAj
aW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKQEAgLTcz
Miw2ICs3MzMsMzQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm87CiAg
ICAgfQogICAgIAorICAgIGJvb2wgaGFzQXJyYXlNb2RlKCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3AoKSkgeworICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CisgICAg
ICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAg
IGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2Fz
ZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSgp
CisgICAgeworICAgICAgICBBU1NFUlQoaGFzQXJyYXlNb2RlKCkpOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8QXJyYXk6Ok1vZGU+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzZXRBcnJheU1vZGUoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGhhc0FycmF5TW9kZSgpKTsKKyAgICAgICAgbV9vcEluZm8gPSBhcnJheU1vZGU7CisgICAg
fQorICAgIAogICAgIGJvb2wgaGFzVmlydHVhbFJlZ2lzdGVyKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX3ZpcnR1YWxSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTI2MjU0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTMsNyArMTEzLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAg
IC8qIG9wY29kZXMgdXNlIFZhckFyZ3MgYmVhdXNlIHRoZXkgbWF5IGhhdmUgdXAgdG8gNCBjaGls
ZHJlbi4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgbWFjcm8oUHV0QnlWYWwsIE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNaWdodENsb2JiZXIpIFwKLSAgICBtYWNy
byhQdXRCeVZhbFNhZmUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVN
aWdodENsb2JiZXIpIFwKICAgICBtYWNybyhQdXRCeVZhbEFsaWFzLCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgbWFjcm8oR2V0QnlJ
ZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBc
CiAgICAgbWFjcm8oR2V0QnlJZEZsdXNoLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKQEAgLTE0MywxNyArMTQyLDYgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMp
IFwKICAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KEdldEFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRBcmd1bWVu
dHNMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKEdldFN0cmluZ0xlbmd0aCwg
Tm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0SW50OEFycmF5TGVuZ3RoLCBOb2RlUmVz
dWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRJbnQxNkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50
MzIpIFwKLSAgICBtYWNybyhHZXRJbnQzMkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwK
LSAgICBtYWNybyhHZXRVaW50OEFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBt
YWNybyhHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAg
bWFjcm8oR2V0VWludDE2QXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3Jv
KEdldFVpbnQzMkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRG
bG9hdDMyQXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKEdldEZsb2F0
NjRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oR2V0U2NvcGVDaGFp
biwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0U2NvcGVkVmFyLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0U2NvcGVkVmFyLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxMjYyNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEyLDE3ICs2MTIs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoK
ICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRBcmd1bWVudHNM
ZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0SW50OEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdl
dEludDE2QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0SW50MzJBcnJheUxlbmd0aDoKLSAg
ICAgICAgY2FzZSBHZXRVaW50OEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQ4Q2xh
bXBlZEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQxNkFycmF5TGVuZ3RoOgotICAg
ICAgICBjYXNlIEdldFVpbnQzMkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEZsb2F0MzJB
cnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRGbG9hdDY0QXJyYXlMZW5ndGg6Ci0gICAgICAg
IGNhc2UgR2V0U3RyaW5nTGVuZ3RoOgogICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6CiAgICAg
ICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgpA
QCAtNjM3LDcgKzYyNiw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWxTYWZlOgogICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCldLm1lcmdlRmxh
Z3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBO
b2RlVXNlZEFzSW50KTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNzQsMTIgKzIzNzQsMTMgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2Ug
R2V0QnlWYWw6IHsKLSAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSB8fCAhYXQobm9kZS5j
aGlsZDEoKSkucHJlZGljdGlvbigpIHx8ICFhdChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9uKCkp
IHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6OlVuZGVjaWRlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFhdChu
b2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgfHwgKCFub2RlLmNoaWxkMygp
ICYmICFhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwpAQCAtMjM5MiwxMjAgKzIzOTMsOTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJn
dW1lbnRzKCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUp
OworICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gV2Ugd2lsbCBoYXZlIGFscmVhZHkgc3BlY3VsYXRlZCB0aGF0IHRoZSBiYXNlIGlz
IHNvbWUga2luZCBvZiBhcnJheSwKKyAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQuCisgICAg
ICAgICAgICBBU1NFUlQobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3By
KCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpID09IFNwZWNT
dHJpbmcpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5
KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCks
IGlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVj
a3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxk
U3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCBzaXplb2YoaW50MTZfdCksIGlzSW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6
IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBpc0ludDMyQXJyYXlT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlw
ZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlw
ZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgp
KSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCks
IGlzVWludDhBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hl
Y2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
IAotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJh
eVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQz
MkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJy
YXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6
CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFs
RGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVu
c2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5
cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3Io
KSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2
QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRB
cnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJy
YXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90
KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKGZsb2F0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVVaW50MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwg
c2l6ZW9mKHVpbnQxNl90KSwgaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFs
bFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQo
bm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkgewotICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWlu
dDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIGlzVWludDMyQXJy
YXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5v
VHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWdu
ZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZUZsb2F0MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlw
ZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKGZsb2F0KSwgaXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcyk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlw
dG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpLCBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNw
ZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwotCi0gICAgICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYWxyZWFkeSBzcGVjdWxhdGVkIHRoYXQgdGhl
IGJhc2UgaXMgc29tZSBraW5kIG9mIGFycmF5LAotICAgICAgICAvLyBhdCB0aGlzIHBvaW50Lgot
ICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7
Ci0KLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICBjYXNlIFB1
dEJ5VmFsU2FmZTogeworICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICBFZGdlIGNo
aWxkMSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2Ug
Y2hpbGQyID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRn
ZSBjaGlsZDMgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFhdChjaGlsZDEpLnByZWRpY3Rpb24oKSB8fCAhYXQoY2hpbGQyKS5wcmVk
aWN0aW9uKCkpIHsKKyAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbW9kZUZvclB1dChu
b2RlLmFycmF5TW9kZSgpKTsKKyAgICAgICAgYm9vbCBhbHJlYWR5SGFuZGxlZCA9IGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICAgICAgY2FzZSBBcnJh
eTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAg
ICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWF0KGNoaWxkMikuc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKKyAgICAgICAgICAg
IEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlWYWwpOworICAgICAgICAgICAgCiAgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIGNoaWxkMSk7CiAgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcyKHRoaXMsIGNoaWxkMik7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBh
cmczKHRoaXMsIGNoaWxkMyk7CkBAIC0yNTE3LDE5ICsyNDg5LDk3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obV9q
aXQuc3RyaWN0TW9kZUZvcihub2RlLmNvZGVPcmlnaW4pID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3QgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdCwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQ
Uik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoYWxyZWFkeUhhbmRsZWQpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
Y2hpbGQxKTsKICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIGNoaWxkMik7Ci0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUFyZ3Vt
ZW50cygpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgaW4gaGVyZSAiKTsKKyAgICAgICAgCisg
ICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisKKyAgICAgICAgc3BlY3VsYXRlQXJyYXkoYXJyYXlN
b2RlLCBjaGlsZDEsIGJhc2VSZWcpOworCisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kczogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hp
bGQzKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgICAg
ICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkgJiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxsb2Nh
dGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgorICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFs
dWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywg
dmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0
Y2hSZWcpOworCisgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsK
KyAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHNjcmF0Y2hSZWc7CisgICAgICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgorICAgICAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGlmIChh
cnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5k
cyk7CisKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2Uo
KTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAKKyAgICAgICAgICAgIC8vIEdl
dCB0aGUgYXJyYXkgc3RvcmFnZS4KKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2Ny
YXRjaFJlZzsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisKKyAg
ICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNy
ZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisKKyAgICAgICAgICAgIC8vIElmIHdl
J3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9sZW5ndGgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSks
IHByb3BlcnR5UmVnKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCBwcm9wZXJ0eVJlZyk7CisKKyAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRl
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisK
KyAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKworICAgICAgICAgICAgaWYgKGFy
cmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzKSB7CisgICAgICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJleW9uZEFycmF5Qm91bmRzLCB0aGlzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFs
QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBOb1Jl
c3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICBH
UFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
UmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNj
cmF0Y2gyLmdwcigpOwpAQCAtMjUzNywxNSArMjU4Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGlmICghaXNBcmd1bWVudHNTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIGNoaWxkMSwKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmQXJndW1lbnRzOjpzX2lu
Zm8pKSk7Ci0gICAgICAgICAgICB9Ci0gICAgCiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50
czo6b2Zmc2V0T2ZEYXRhKCkpLAogICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcpOwpAQCAtMjU3
OSwyMjUgKzI2MjAsNTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNw
ZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIGlzSW50OEFycmF5
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJh
eVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewot
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlzSW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUu
Zm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxs
VHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hv
dWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgaXNJ
bnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5v
VHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJy
YXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3Bl
cnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhBcnJheVNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0No
ZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQo
Y2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50OENsYW1wZWRBcnJheSgpKSB7Ci0gICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWlu
dDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihtX3N0
YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6
IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRp
bmcpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQx
NkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwg
cHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIGlzVWludDE2QXJyYXlTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlw
ZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7Ci0g
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YodWludDMyX3QpLCBpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0
KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0
MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZihmbG9hdCksIGlzRmxvYXQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNo
aWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5
U3BlY0NoZWNrcyk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRB
cnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXko
bV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSwgaXNGbG9hdDY0QXJyYXlTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlw
ZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzKTsKLSAgICAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAKLSAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOwotCi0gICAgICAgIC8vIE1hcCBiYXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGludG8gcmVn
aXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIuCi0gICAgICAgIEdQUlJlZyBiYXNl
UmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHku
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICBH
UFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICB3
cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9y
UHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwotCi0gICAgICAgIHNwZWN1bGF0ZUFycmF5KGNo
aWxkMSwgYmFzZVJlZyk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJy
YXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOwotCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAg
ICAgIHByb3BlcnR5LnVzZSgpOwotICAgICAgICB2YWx1ZS51c2UoKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzY3JhdGNoUmVnOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCi0g
ICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1l
bnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90
SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKSkpOwotCi0gICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8g
YSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKLSAg
ICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAg
IG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwotICAgICAg
ICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLQotICAgICAgICBs
ZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG5vdEhvbGVWYWx1
ZS5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJh
eS4KLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAgICAgICAg
aWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbFNhZmUpIHsKLSAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAg
ICAgICAgYmV5b25kQXJyYXlCb3VuZHMsIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgIG1faml0
LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3Ry
aWN0LAotICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcs
IHZhbHVlUmVnKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAgIEVkZ2UgY2hpbGQxID0gbV9qaXQu
Z3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICBFZGdlIGNoaWxkMyA9IG1f
aml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IWF0KGNoaWxkMSkucHJlZGljdGlvbigpIHx8ICFhdChjaGlsZDIpLnByZWRpY3Rpb24oKSkgewot
ICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVy
YWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFy
cmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChpc0FjdGlv
bmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihhdChjaGlsZDEpLnByZWRpY3Rpb24oKSkpOwot
ICAgICAgICBBU1NFUlQoYXQoY2hpbGQyKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOwotCi0g
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsKLSAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMik7Ci0gICAg
ICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+
aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
c2l6ZW9mKGludDhfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7
Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoaW50MTZfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkg
ewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9i
YWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdw
cigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJy
YXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3Bl
cnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywg
VW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xh
bXBlZEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJy
YXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgTm9UeXBlZEFy
cmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
aW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVp
bnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWlu
dDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpV
aW50MTZBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwg
cHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJh
eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5
OjpVaW50MzJBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJy
YXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRB
cnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
cmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5
cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJh
eToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGF0KGNo
aWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVp
bnQxNl90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+
dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YodWludDMyX3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgp
KSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQu
Z2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3Bl
cnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spOwot
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgewotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSksIE5vVHlwZWRBcnJheVNwZWNDaGVjayk7Ci0gICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFT
U0VSVChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUFycmF5KCkpOwotCi0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0KLSAgICAgICAg
d3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmll
ckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoUmVnKTsKLQotICAgICAgICAvLyBHZXQgdGhlIGFy
cmF5IHN0b3JhZ2UuCi0gICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKLSAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Fy
cmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLQotICAgICAgICAvLyBTdG9yZSB0
aGUgdmFsdWUgdG8gdGhlIGFycmF5LgotICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9w
ZXJ0eS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAg
ICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotCi0gICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAKKwogICAg
IGNhc2UgUmVnRXhwRXhlYzogewogICAgICAgICBpZiAoY29tcGlsZVJlZ0V4cEV4ZWMobm9kZSkp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yODU5LDcgKzI3MjYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICB3cml0ZUJhcnJp
ZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3Bl
cnR5QWNjZXNzLCBzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsKIAotICAgICAgICBzcGVj
dWxhdGVBcnJheShub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlQXJy
YXkoQXJyYXk6OkpTQXJyYXksIG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOwogCiAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3Rv
cmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKQEAgLTI4OTYsNyArMjc2Myw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQ
UiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGVBcnJh
eShub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlQXJyYXkoQXJyYXk6
OkpTQXJyYXksIG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOwogCiAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNl
dCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0
aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKQEAgLTMzODYsODEgKzMyNTMsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAK
LSAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0g
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAgICAg
ICBzcGVjdWxhdGVBcnJheShub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKLQotICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3Jh
Z2VPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
bGVuZ3RoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDApKSk7Ci0gICAgICAgIAotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2Ug
R2V0QXJndW1lbnRzTGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgo
bm9kZSk7CisgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgY29tcGlsZUdldEFycmF5
TGVuZ3RoKG5vZGUpOwogICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdldFN0cmlu
Z0xlbmd0aDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAK
LSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFpc1N0cmluZ1Nw
ZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwg
cmVzdWx0R1BSKTsKLQotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxl
SW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdldEludDhBcnJheUxl
bmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxE
YXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzSW50OEFycmF5U3BlY3VsYXRp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBHZXRJbnQxNkFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBp
bGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgIWlzSW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
R2V0SW50MzJBcnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0
aChtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0lu
dDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6
IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNVaW50OEFycmF5U3BlY3VsYXRpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDogewotICAgICAgICBj
b21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBl
ZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgR2V0VWludDE2QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGls
ZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgIWlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEdldFVpbnQzMkFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVu
Z3RoKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFp
c1VpbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRGbG9hdDMyQXJyYXlM
ZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFs
RGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0Zsb2F0MzJBcnJheVNw
ZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOiB7Ci0gICAg
ICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2
NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgZnVuY3Rpb24odGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihK
SVRDb21waWxlcjo6Tm90RXF1YWwsIGZ1bmN0aW9uLmdwcigpLCBub2RlLmZ1bmN0aW9uKCkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxMjYyNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDEyICsyNjksNzkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2xlYXJHZW5lcmF0aW9uSW5mbwogICAgIG1fZnBycyA9IFJlZ2lz
dGVyQmFuazxGUFJJbmZvPigpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVB
cnJheShFZGdlIGVkZ2UsIEdQUlJlZyBiYXNlUmVnKQorY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3IqIFNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVzY3JpcHRvcihBcnJheTo6TW9kZSBhcnJh
eU1vZGUpCiB7Ci0gICAgQWJzdHJhY3RWYWx1ZSYgYXJyYXlWYWx1ZSA9IG1fc3RhdGUuZm9yTm9k
ZShlZGdlKTsKLSAgICBpZiAoYXJyYXlWYWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNT
aW5nbGV0b24oKQotICAgICAgICAmJiBhcnJheVZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
LnNpbmdsZXRvbigpLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvKQotICAgICAgICBy
ZXR1cm47CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6CisgICAgICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlw
dG9yKCk7CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuICZtX2pp
dC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgY2FzZSBBcnJheTo6
SW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJy
YXlEZXNjcmlwdG9yKCk7CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAg
ICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0
b3IoKTsKKyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuICZtX2pp
dC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOworICAgIGNhc2UgQXJyYXk6
OlVpbnQzMkFycmF5OgorICAgICAgICByZXR1cm4gJm1faml0Lmdsb2JhbERhdGEoKS0+dWludDMy
QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAg
ICByZXR1cm4gJm1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOwor
ICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9i
YWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2NvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRlQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBFZGdlIGVk
Z2UsIEdQUlJlZyBiYXNlUmVnKQoreworICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBy
ZXN1bHQgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihhcnJheU1vZGUpOworICAgIAorICAgIGlmICht
b2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLCBhcnJheU1vZGUpKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIGNvbnN0IENsYXNzSW5mbyogZXhwZWN0ZWRD
bGFzc0luZm8gPSAwOworICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBB
cnJheTo6Rm9yY2VFeGl0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGNhc2UgQXJyYXk6
OlN0cmluZzoKKyAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICBjYXNlIEFycmF5
OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGR1cGxpY2F0ZXMg
dGhlIGNvZGUgYmVsb3cgaW4gYW50aWNpcGF0aW9uIG9mIHRoaXMgY29kZSBiZWluZworICAgICAg
ICAvLyBzdWJzdGFudGlhbGx5IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgdGVtcC5ncHIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJh
bmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6
OmNsYXNzSW5mb09mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGV4cGVjdGVkQ2xhc3NJ
bmZvID0gJkFyZ3VtZW50czo6c19pbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5
OjpJbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5
OjpJbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgIGNh
c2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAg
IGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6
CisgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5mbzsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KICAgICAKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsK
ICAgICBtX2ppdC5sb2FkUHRyKApAQCAtMjg0LDcgKzM1MSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0ZUFycmF5KEVkZ2UKICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZv
KSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZXhwZWN0ZWRD
bGFzc0luZm8pKSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4KQpAQCAtMTYyMCwxMSAr
MTY4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7Ci0g
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBBU1NFUlQobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKSwgQXJyYXk6OlN0cmluZykpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3
ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRv
byBsYXJnZQogICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZz
ZXRPZkxlbmd0aCgpKSkpOwpAQCAtMjAxOCwyMyArMjA4Myw3IEBAIHN0YXRpYyB2b2lkIGNvbXBp
bGVDbGFtcERvdWJsZVRvQnl0ZShKSVQKIAogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0VHlwZWRBcnJheUxlbmd0aChjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgTm9kZSYgbm9kZSwgYm9vbCBuZWVkc1NwZWN1bGF0aW9uQ2hlY2spCi17Ci0gICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIAotICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgIGlmIChu
ZWVkc1NwZWN1bGF0aW9uQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgIAotICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBkZXNjcmlwdG9yLm1fbGVu
Z3RoT2Zmc2V0KSwgcmVzdWx0R1BSKTsKLSAgICAKLSAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIE5vZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9u
UmVxdWlyZW1lbnRzIHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVz
cyBzaWduZWRuZXNzKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlJiBu
b2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3Mp
CiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGls
ZDIoKSk7CkBAIC0yMDQ3LDEyICsyMDk2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsT25JbgogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVn
IHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVt
ZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKSB7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVChtb2RlQWxyZWFkeUNo
ZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSk7
CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLApAQCAtMjA5NywxMyArMjE0MSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZG91YmxlUmVzdWx0KGZyZXN1bHQuZnByKCksIG1f
Y29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
R1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRT
aXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMgc3BlY3VsYXRpb25SZXF1aXJl
bWVudHMsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGlu
ZyByb3VuZGluZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5
cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBi
YXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlw
ZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5n
KQogewogICAgIEVkZ2UgYmFzZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
MCk7CiAgICAgRWRnZSB2YWx1ZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
Mik7CiAgICAgCi0gICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJh
eVR5cGVTcGVjQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VVc2UsIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2Vs
bDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNj
cmlwdG9yLm1fY2xhc3NJbmZvKSkpOwogICAgIEdQUlRlbXBvcmFyeSB2YWx1ZTsKICAgICBHUFJS
ZWcgdmFsdWVHUFI7CiAgICAgCkBAIC0yMTc0LDcgKzIyMTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgQVNTRVJUKHZhbHVlR1BSICE9IHN0b3JhZ2VS
ZWcpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVz
Y3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0g
Tm9UeXBlZEFycmF5U3BlY0NoZWNrKQorICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWwpCiAg
ICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0
b3IubV9sZW5ndGhPZmZzZXQpKTsKIAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKQEAgLTIx
OTAsMTIgKzIyMzIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
SQogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAg
ICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5U3BlY0NoZWNrKQor
ICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWwpCiAgICAgICAgIG91dE9mQm91bmRzLmxpbmso
Jm1faml0KTsKICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUs
IFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlvblJlcXVpcmVtZW50
cykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5
KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlJiBub2RlLCBzaXpl
X3QgZWxlbWVudFNpemUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0yMjA0LDE3ICsyMjQ2LDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2Uu
Z3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgIAotICAgIGlmIChzcGVjdWxhdGlv
blJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKSB7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKLSAgICAgICAgbm9SZXN1bHQo
bV9jb21waWxlSW5kZXgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorCisgICAgQVNTRVJUKG1v
ZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJy
YXlNb2RlKCkpKTsKIAogICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgRlBSUmVn
IHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKLSAgICBBU1NFUlQoc3BlY3VsYXRpb25SZXF1aXJl
bWVudHMgIT0gTm9UeXBlZEFycmF5U3BlY0NoZWNrKTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKAog
ICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAogICAgICAgICBtX2pp
dC5icmFuY2gzMigKQEAgLTIyMzgsMTUgKzIyNzQsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25GbAogICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGls
ZUluZGV4KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxv
YXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUs
IFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlvblJlcXVpcmVtZW50
cykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJh
eShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQ
UlJlZyBwcm9wZXJ0eSwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQogewogICAgIEVk
Z2UgYmFzZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgRWRn
ZSB2YWx1ZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgCiAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAK
LSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWND
aGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChiYXNlKSwgYmFzZVVzZS5pbmRleCgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6
OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3Jp
cHRvci5tX2NsYXNzSW5mbykpKTsKKyAgICBBU1NFUlQobW9kZUFscmVhZHlDaGVja2VkKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpOwogICAgIAogICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCkBAIC0yMjU1LDcgKzIyOTAsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAgCiAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFn
ZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91
bmRzOwotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlTcGVj
Q2hlY2spCisgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZCb3Vu
ZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNl
dCkpOwogICAgIAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKQEAgLTIyNzIsNyArMjMwNyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckYKICAgICBkZWZhdWx0
OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAgaWYgKHNwZWN1bGF0
aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVNwZWNDaGVjaykKKyAgICBpZiAobm9kZS5v
cCgpID09IFB1dEJ5VmFsKQogICAgICAgICBvdXRPZkJvdW5kcy5saW5rKCZtX2ppdCk7CiAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogfQpAQCAtMzA2Niw3NSArMzEwMSwzNiBAQCBib29s
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEoTm9kCiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKE5vZGUmIG5vZGUpCiB7Ci0gICAg
QVNTRVJUKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSk7Ci0gICAgQVNTRVJUKGF0KG5v
ZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7Ci0gICAgICAgIAogICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSUmVn
IGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRo
aXMpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICBpZiAoYXQo
bm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5wcmVk
aWN0aW9uKCkgPT0gU3BlY1N0cmluZykgewotICAgICAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VS
ZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0KKyAgICAKKyAgICBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciogZGVzY3JpcHRvciA9CisgICAgICAgIHNwZWN1bGF0ZUFycmF5KG5vZGUuYXJy
YXlNb2RlKCksIG5vZGUuY2hpbGQxKCksIGJhc2VSZWcpOworICAgIAorICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKSkgeworICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0
T2ZWYWx1ZSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIAogICAgICAgICAvLyBTcGVjdWxhdGUg
dGhhdCB3ZSdyZSBub3QgYWNjZXNzaW5nIGEgcm9wZQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZVJlZykpOwogCiAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3RyaW5nSW1wbDo6ZGF0YU9m
ZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5z
aG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgewotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3Jp
cHRvcigpOwotICAgICAgICBpZiAoIWlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxk
MSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlw
dG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxzZSBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Ci0gICAgICAgIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5p
bnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICBpZiAoIWlzSW50MTZBcnJheVNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNl
UmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpjbGFzc0luZm9P
ZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFz
c0luZm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9
IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkg
ewotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0
Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgaWYgKCFpc0lu
dDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
Q2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihk
ZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3Rv
cmFnZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVVaW50OEFycmF5KCkpIHsKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0g
ICAgICAgIGlmICghaXNVaW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3Rv
cmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkgewotICAgICAgICBjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+dWlu
dDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgIGlmICghaXNVaW50OENsYW1wZWRB
cnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7Ci0gICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3Jp
cHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9IGVsc2UgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKLSAgICAgICAgY29u
c3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCkt
PnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICBpZiAoIWlzVWludDE2QXJyYXlTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
YmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1f
Y2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7Ci0g
ICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJh
eSgpKSB7Ci0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0g
bV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgaWYg
KCFpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNl
dCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxk
U3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2Ny
aXB0b3IoKTsKLSAgICAgICAgaWYgKCFpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7Ci0g
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVz
Y3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9IGVsc2UgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAg
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0
YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgIGlmICghaXNGbG9hdDY0QXJy
YXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6
Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlw
dG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJl
Zyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9kZS5jaGlsZDEoKSwg
YmFzZVJlZyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdl
T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yKTsKKyAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VP
ZmZzZXQpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIAogICAgIHN0
b3JhZ2VSZXN1bHQoc3RvcmFnZVJlZywgbV9jb21waWxlSW5kZXgpOwogfQogCkBAIC0zMjUyLDYg
KzMyNDgsNDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogICAg
IGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2RlJiBub2RlKQoreworICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAor
ICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0KKyAgICAgICAgc3Bl
Y3VsYXRlQXJyYXkobm9kZS5hcnJheU1vZGUoKSwgbm9kZS5jaGlsZDEoKSwgYmFzZUdQUik7CisK
KyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5
OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zm
c2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0
aCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGludGVnZXJS
ZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChu
b2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRlc2Ny
aXB0b3IpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbk5vQ2hl
Y2soTm9kZSYgbm9kZSkKIHsKICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24g
MTI2MjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDgyLDYgKzIwODIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
b21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhOb2RlJik7CiAgICAgdm9pZCBjb21waWxlR2V0QXJn
dW1lbnRzTGVuZ3RoKE5vZGUmKTsKICAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRBcnJheUxlbmd0
aChOb2RlJik7CisgICAgCiAgICAgdm9pZCBjb21waWxlVmFsdWVUb0ludDMyKE5vZGUmKTsKICAg
ICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJlcihOb2RlJik7CiAgICAgdm9pZCBjb21waWxlRG91
YmxlQXNJbnQzMihOb2RlJik7CkBAIC0yMDk1LDEyICsyMDk3LDYgQEAgcHVibGljOgogI2VuZGlm
CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZVNvZnRN
b2R1bG8oTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgoY29uc3Qg
VHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlJiwgYm9vbCBuZWVkc1NwZWN1bGF0aW9uQ2hlY2sp
OwotICAgIGVudW0gVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzIHsKLSAgICAgICAg
Tm9UeXBlZEFycmF5U3BlY0NoZWNrLAotICAgICAgICBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNr
LAotICAgICAgICBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcwotICAgIH07CiAgICAgZW51bSBUeXBl
ZEFycmF5U2lnbmVkbmVzcyB7CiAgICAgICAgIFNpZ25lZFR5cGVkQXJyYXksCiAgICAgICAgIFVu
c2lnbmVkVHlwZWRBcnJheQpAQCAtMjExMCwxMCArMjEwNiwxMCBAQCBwdWJsaWM6CiAgICAgICAg
IENsYW1wUm91bmRpbmcKICAgICB9OwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5
KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwg
VHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7
Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYsIHNpemVf
dCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFy
cmF5U2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nID0gVHJ1bmNhdGVSb3VuZGluZyk7Ci0g
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYsIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxh
dGlvblJlcXVpcmVtZW50cyk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVk
QXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHBy
b3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25S
ZXF1aXJlbWVudHMpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlw
ZWRBcnJheVNpZ25lZG5lc3MpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJv
cGVydHksIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBU
eXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9k
ZSYsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9h
dFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BS
UmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKICAgICB2b2lkIGNvbXBp
bGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9u
RXhwcmVzc2lvbihOb2RlJik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlJik7CkBA
IC0yMTk5LDcgKzIxOTUsOSBAQCBwdWJsaWM6CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dCogZm9yd2FyZFNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCA9IFVuY291bnRhYmxlV2F0
Y2hwb2ludCk7CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogc3BlY3VsYXRpb25XYXRj
aHBvaW50V2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKEV4aXRLaW5kLCBib29sIGlzRm9yd2FyZCk7
CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVBcnJheShFZGdlIGJhc2VFZGdlLCBHUFJSZWcgYmFz
ZVJlZyk7CisgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlw
dG9yKEFycmF5OjpNb2RlKTsKKyAgICAKKyAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciog
c3BlY3VsYXRlQXJyYXkoQXJyYXk6Ok1vZGUsIEVkZ2UgYmFzZUVkZ2UsIEdQUlJlZyBiYXNlUmVn
KTsKICAgICAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1
bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVj
dHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsU2Fm
ZToKICAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAgICAgICAgICAg
IGNhc2UgUGhhbnRvbToKICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2Ug
dXNlcy4KQEAgLTIxNSw1MyArMjE0LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rp
b24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlzQWN0aW9uYWJsZUFycmF5U3BlY3VsYXRpb24obV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCkpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIobGl2ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoK
LSAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZTogewotICAgICAgICAgICAgICAgICAg
ICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaFtjaGls
ZDFdLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3Jh
cGhbY2hpbGQyXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1
bGF0ZUFyZ3VtZW50cygpCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihsaXZlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLm9wKCkgIT0gUHV0QnlWYWxTYWZlKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3Vs
YXRlQXJndW1lbnRzKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXko
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtj
aGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3Vs
ZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZVVp
bnQ4Q2xhbXBlZEFycmF5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50MTZB
cnJheSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxk
MV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIobGl2ZSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CiAgICAgICAgICAgICAg
ICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160010</attachid>
            <date>2012-08-22 14:22:29 -0700</date>
            <delta_ts>2012-08-22 15:57:29 -0700</delta_ts>
            <desc>more</desc>
            <filename>arraymode_patch_8.diff</filename>
            <type>text/plain</type>
            <size>136187</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2MjcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBA
CisyMDEyLTA4LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgYWNjZXNzZXMgc2hvdWxkIHJlbWVtYmVyIHdoYXQga2luZCBvZiBhcnJheSB0aGV5IGFy
ZSBwcmVkaWN0ZWQgdG8gYWNjZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NDQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0
aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAg
ICAoSlNDOjpERkc6OnJlZmluZUFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFs
cmVhZHlDaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgorICAgICAg
ICAqIGRmZy9ERkdBcnJheU1vZGUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6OmNhbkNTRVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVGb3JQdXQp
OgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29k
ZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9k
ZVdpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
QXJyYXlNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQ
aGFzZTo6Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Q1NFUGhhc2U6OnN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5hdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YnlWYWxJc1B1cmUpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpjbG9iYmVyc1dvcmxkKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FycmF5TW9kZSk6CisgICAgICAgIChOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjphcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OnNldEFycmF5TW9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6dHlwZWRBcnJheURlc2NyaXB0b3IpOgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAg
ICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKwogMjAxMi0wOC0yMSAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgSW50cm9kdWNpbmcgdGhl
IFZNSW5zcGVjdG9yIGZvciBWTSBkZWJ1Z2dpbmcgdXNlLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIFNFVChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAKICAgICBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKICAg
ICBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKKyAgICBkZmcvREZHQXJy
YXlNb2RlLmNwcAogICAgIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCiAgICAgZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAogICAgIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTI2MjU0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE1NSw2ICsxNTUsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnBy
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNp
b24gMTI2MjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcg
Y29weSkKQEAgLTk1LDYgKzk1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZGVidWdnZXIvRGVidWdn
ZXIuY3BwIFwKICAgICBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAgXAogICAgIGRmZy9ERkdBcmd1
bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBcCisgICAgZGZnL0RGR0FycmF5TW9kZS5jcHAg
XAogICAgIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwIFwKICAgICBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwIFwKICAgICBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Miw2ICsxNDIsOCBAQAogCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyog
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDNDMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdT
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovOyB9OwogCQkwRjYzOTQ1NDE1RDA3MDU1
MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuY3BwICovOyB9OwogCQkwRjYzOTQ1NTE1RDA3MDU3MDA2QTU5N0MgLyogQXJyYXlQcm9maWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ1
MjE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2Mzk0ODQxNUU0ODExODAwNkE1OTdDIC8q
IERGR0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjYzOTQ4MTE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCAqLzsg
fTsKKwkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0ODIxNUU0ODExNDAw
NkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBC
N0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2
OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04OTYsNiArODk4LDggQEAKIAkJMEY2Mzk0M0QxNUM3
NUYxNDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJv
ZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheVByb2Zp
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQ1MjE1RDA3MDUxMDA2
QTU5N0MgLyogQXJyYXlQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFycmF5UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYzOTQ4MTE1
RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0FycmF5TW9kZS5jcHA7IHBhdGggPSBkZmcvREZHQXJyYXlNb2Rl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1
OTdDIC8qIERGR0FycmF5TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdBcnJheU1vZGUuaDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0
IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFjZW5jeUxpc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0Vk
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRWRnZS5oOyBwYXRoID0g
ZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNTcsMTIgKzIy
NjEsMTUgQEAKIAkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMEYxRTNBNDMxNTM0Q0JBRDAwMEY5
NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCAqLywKLQkJCQkwRjE2MDE1QTE1NjE5OEJGMDBD
MjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi8sCi0JCQkJMEYx
NjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aCAqLywKIAkJCQkwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5j
cHAgKi8sCiAJCQkJMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUu
aCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5o
ICovLAorCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0Lmgg
Ki8sCisJCQkJMEYxRTNBNDMxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24u
aCAqLywKKwkJCQkwRjE2MDE1QTE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAgKi8sCisJCQkJMEYxNjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjYzOTQ4MTE1RTQ4MTE0
MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCAqLywKKwkJCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2
QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8sCiAJCQkJMEZDMDk3NkIxNDY4QUI0QTAwQ0YyNDQy
IC8qIERGR0Fzc2VtYmx5SGVscGVycy5jcHAgKi8sCiAJCQkJMEZDMDk3NkMxNDY4QUI0QTAwQ0Yy
NDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5oICovLAogCQkJCTBGNjIwMTcwMTQzRkNEMkYwMDY4
Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8sCkBAIC0yMzA2LDcgKzIzMTMsNiBAQAogCQkJCTg2
RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8sCiAJCQkJMEZBNTgxQjcxNTBF
OTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgKi8sCiAJCQkJMEZBNTgxQjgxNTBFOTUy
QTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovLAotCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3
QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUyQTAwQjlB
MkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCiAJCQkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8q
IERGR0VkZ2UuaCAqLywKIAkJCQk4NkVDOURCRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0
aW9ucy5jcHAgKi8sCkBAIC0yODg0LDYgKzI4OTAsNyBAQAogCQkJCUZFNEEzMzIwMTVCRDJFMDcw
MDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0M0YxNUM3
NUYxOTAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMzQ4NSw2ICszNDkyLDcgQEAKIAkJ
CQlGRTRBMzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ1NDE1RDA3MDU1MDA2QTU5
N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjM5NDg0MTVFNDgx
MTgwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg2OCw2NSArODY4LDY2IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6
IHsKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBpZiAoIW5vZGUucHJl
ZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSB8fCAhbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2Rl
LmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX2dyYXBoW25vZGUuY2hp
bGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSB8fCAoIW5vZGUuY2hpbGQzKCkgJiYgIW1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpKSB7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5j
b2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
Lm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICht
X2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAg
ICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Fy
Z3VtZW50cyk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKSA9PSBTcGVjU3RyaW5nKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgY2FzZSBBcnJheTo6SlNB
cnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIG1vcmUgY29uc2VydmF0aXZlIGhhbmRsaW5nIG9m
IHRoZSBvdXQtb2YtYm91bmRzCisgICAgICAgICAgICAvLyBjYXNlLgorICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDhBcnJh
eSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUlu
dDE2QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgogICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2QXJyYXkpOwogICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNw
ZWN1bGF0ZUludDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5Ogog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50
OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1Vp
bnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKKyAgICAgICAg
Y2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVp
bnQxNkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJy
YXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMy
QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKQEAg
LTkzNCw1NSArOTM1LDQ3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkp
IHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0
ZUZsb2F0NjRBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgY2Fz
ZSBQdXRCeVZhbEFsaWFzOgotICAgIGNhc2UgUHV0QnlWYWxTYWZlOiB7CisgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOiB7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLQogICAgICAgICBF
ZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2Ug
Y2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGls
ZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgCi0gICAgICAg
IGlmICghbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtjaGlsZDJdLnBy
ZWRpY3Rpb24oKSkgeworICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUo
KSkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1Zh
bGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAo
IW1fZ3JhcGhbY2hpbGQyXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgICAgICAgICAgfHwgbV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUFy
Z3VtZW50cygpCi0jZW5kaWYKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgQVNTRVJUKG5v
ZGUub3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLm9wKCkgPT0gUHV0QnlWYWxTYWZlKTsKKyAgICAg
ICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5m
aWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kczoKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwp
OworICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwogICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJy
YXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQz
XS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC05OTAsOCArOTgzLDcgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNw
ZWN1bGF0ZUludDE2QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5Ogog
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7CiAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBp
ZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKQEAgLTk5OSw4ICs5
OTEsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVt
YmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBo
W2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJ
bnQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQpAQCAtMTAwOCw4ICs5OTksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7
CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtMTAxNyw4ICsxMDA3LDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1
bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFt
cGVkQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OENs
YW1wZWRBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKQEAgLTEwMjYsOCArMTAxNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgp
KSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDEpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQz
XS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC0xMDM1LDggKzEwMjMsNyBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxk
U3BlY3VsYXRlVWludDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJh
eToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY1VpbnQzMkFycmF5KTsK
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtMTA0
NCwyMyArMTAzMSwyMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKKyAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3Bl
Y051bWJlcik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0NjRBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0
ZXIoU3BlY0Zsb2F0NjRBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1i
ZXIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlW
YWxTYWZlKQotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC0xMzU2LDY5
ICsxMzQwLDgyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAg
ICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
SW50MzIpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgR2V0QXJndW1lbnRzTGVuZ3RoOgot
ICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNJbnQzMik7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAg
ICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CisgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1N0cmluZ1NwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3Vt
ZW50czoKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCghaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhBcnJh
eSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNJbnQxNkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMkFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0ludDMyQXJyYXlTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQoIWlzVWludDhBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhB
cnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6
CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCghaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
VWludDE2QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50
MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5
OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFp
c0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQzMkFy
cmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KCFpc1N0cmluZ1NwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcp
OwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgICAKLSAgICBjYXNlIEdldEludDhBcnJheUxlbmd0aDoKLSAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KCFpc0ludDhBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJ
bnQ4QXJyYXkpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR2V0SW50MTZBcnJheUxlbmd0aDoKLSAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KCFpc0ludDE2QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
SW50MTZBcnJheSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRJbnQzMkFycmF5TGVuZ3RoOgotICAgICAgICBu
b2RlLnNldENhbkV4aXQoIWlzSW50MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNJbnQzMkFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6Ci0gICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50OEFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1VpbnQ4QXJyYXkpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR2V0VWludDhDbGFtcGVkQXJyYXlMZW5ndGg6
Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRV
aW50MTZBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQxNkFycmF5
U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5KTsKLSAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdldFVpbnQzMkFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzVWludDMy
QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwotICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR2V0RmxvYXQzMkFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
RmxvYXQzMkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsK
LSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHZXRGbG9hdDY0QXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCghaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQ2
NEFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAg
Y2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRzIChp
LmUuIHByb3RvdHlwZXMpLgpAQCAtMTQ4OSw2NSArMTQ4Niw0NSBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVh
cigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgQVNTRVJUKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKTsKICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyAoYWxtb3N0KSBhbHdheXMgZm9s
bG93ZWQgYnkgR2V0QnlWYWwsIHdoaWNoIGRvZXMgZXhpdC4gU28gbm8gcG9pbnQgaW4gdHJ5aW5n
IHRvIGJlIG1vcmUgcHJlY2lzZS4KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
c2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpID09IFNwZWNTdHJpbmcpIHsKKyAgICAgICAg
c3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwot
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0uc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SlNB
cnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICAg
ICAgLy8gVGhpcyBkb2Vzbid0IGZpbHRlciBhbnl0aGluZyBtZWFuaW5nZnVsIHJpZ2h0IG5vdy4g
V2UgbWF5IHdhbnQgdG8gYWRkCisgICAgICAgICAgICAvLyBDRkEgdHJhY2tpbmcgb2YgYXJyYXkg
bW9kZSBzcGVjdWxhdGlvbnMsIGJ1dCB3ZSBkb24ndCBoYXZlIHRoYXQsIHlldC4KKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFycmF5KTsKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MTZB
cnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUlu
dDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgogICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVVaW50OEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3Bl
Y3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDE2QXJy
YXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNPdGhlcik7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVVaW50MzJBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5Ogog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQzMkFycmF5
KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hv
dWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQz
MkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zs
b2F0MzJBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6OkZsb2F0NjRBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNGbG9hdDY0QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNs
ZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgYnJlYWs7IAogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2YXJpYWJsZXMgYWxpYXMgdGhlIGFyZ3Vt
ZW50cyBhbmQgbm90aGluZyBlbHNlLCBhbmQgYXJlCi0gICAgICAgIC8vIHVzZWQgb25seSBmb3Ig
R2V0QnlWYWwgYW5kIEdldEFyZ3VtZW50c0xlbmd0aCBhY2Nlc3Nlcy4gQXQgdGhlIHNhbWUgdGlt
ZSwKKyAgICAgICAgLy8gdXNlZCBvbmx5IGZvciBHZXRCeVZhbCBhbmQgR2V0QXJyYXlMZW5ndGgg
YWNjZXNzZXMuIEF0IHRoZSBzYW1lIHRpbWUsCiAgICAgICAgIC8vIGlkZW50aWZ5IHVzZXMgb2Yg
Q3JlYXRlQXJndW1lbnRzIHRoYXQgYXJlIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIGFyZ3VtZW50
cwogICAgICAgICAvLyBiZWluZyBhbGlhc2VkIG9ubHkgdG8gdmFyaWFibGVzIHRoYXQgc2F0aXNm
eSB0aGVzZSBjb25zdHJhaW50cy4KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkg
ewpAQCAtMjc3LDM0ICsyNzcsMjUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUucHJlZGljdGlvbigpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKSAhPSBBcnJheTo6QXJndW1l
bnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyhu
b2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhhdCdzIHNvIGF3ZnVsIGFuZCBwcmV0dHkg
bXVjaCBpbXBvc3NpYmxlIHNpbmNlIGl0IHdvdWxkCisgICAgICAgICAgICAgICAgICAgIC8vIGlt
cGx5IHRoYXQgdGhlIGFyZ3VtZW50cyB3ZXJlIHByZWRpY3RlZCBpbnRlZ2VyLCBidXQgaXQncwor
ICAgICAgICAgICAgICAgICAgICAvLyBnb29kIHRvIGJlIGRlZmVuc2l2ZSBhbmQgdGhvcm91Z2gu
CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDIo
KSk7CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghaXNB
Y3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCld
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJy
YXlMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkgIT0g
QXJyYXk6OkFyZ3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFy
Z3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGFyZ3VtZW50cyBpcyB1c2VkIGFzIGFu
IGluZGV4LCB0aGVuIGl0J3MgYW4gZXNjYXBpbmcgdXNlLgotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhhdCdzIHNvIGF3ZnVsIGFuZCBwcmV0dHkgbXVjaCBpbXBvc3NpYmxlIHNpbmNlIGl0
IHdvdWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBseSB0aGF0IHRoZSBhcmd1bWVu
dHMgd2VyZSBwcmVkaWN0ZWQgaW50ZWdlciwgYnV0IGl0J3MKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGdvb2QgdG8gYmUgZGVmZW5zaXZlIGFuZCB0aG9yb3VnaC4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVC
YWRBcmd1bWVudHNVc2VzKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2Ug
R2V0QXJndW1lbnRzTGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgb2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDk2
LDM4ICs0ODcsMzIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUucHJlZGljdGlvbigpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAh
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc0FjdGlvbmFibGVBcnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgc2ltcGxpZmllZCB0byBH
ZXRNeUFyZ3VtZW50QnlWYWwgaWYgd2Uga25vdyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpdCBzYXRpc2ZpZXMgZWl0aGVyIGNvbmRpdGlvbiAoMSkgb3IgKDIpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gMSkgSXRzIGZpcnN0IGNoaWxkIGlzIGEgdmFsaWQgQXJndW1lbnRz
QWxpYXNpbmdEYXRhIGFuZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIElubGlu
ZUNhbGxGcmFtZSogaXMgbm90IG1hcmtlZCBhcyBjcmVhdGluZyBhcmd1bWVudHMuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyAyKSBJdHMgZmlyc3QgY2hpbGQgaXMgQ3JlYXRlQXJndW1lbnRz
IGFuZCBpdHMgSW5saW5lQ2FsbEZyYW1lKgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAg
aXMgbm90IG1hcmtlZCBhcyBjcmVhdGluZyBhcmd1bWVudHMuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFw
aFtub2RlLmNoaWxkMSgpXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxk
cmVuLmNoaWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1lbnRCeVZhbCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBv
cCBub3cgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudEJ5VmFsLgorICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS5hcnJheU1vZGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIGNhbiBiZSBzaW1wbGlmaWVkIHRvIEdldE15QXJndW1lbnRCeVZhbCBp
ZiB3ZSBrbm93IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgLy8gaXQgc2F0aXNmaWVzIGVpdGhl
ciBjb25kaXRpb24gKDEpIG9yICgyKToKKyAgICAgICAgICAgICAgICAgICAgLy8gMSkgSXRzIGZp
cnN0IGNoaWxkIGlzIGEgdmFsaWQgQXJndW1lbnRzQWxpYXNpbmdEYXRhIGFuZCB0aGUKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgSW5saW5lQ2FsbEZyYW1lKiBpcyBub3QgbWFya2VkIGFzIGNy
ZWF0aW5nIGFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgLy8gMikgSXRzIGZpcnN0IGNo
aWxkIGlzIENyZWF0ZUFyZ3VtZW50cyBhbmQgaXRzIElubGluZUNhbGxGcmFtZSoKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgaXMgbm90IG1hcmtlZCBhcyBjcmVhdGluZyBhcmd1bWVudHMuCisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGlt
aXplKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRl
cmVmKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNo
aWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5z
ZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7
IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vdyB0aGF0IGl0J3MgYSBHZXRN
eUFyZ3VtZW50QnlWYWwuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1
bWVudHNMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpICE9IEFycmF5OjpBcmd1bWVu
dHMpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNo
aWxkMSgpXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHQXJyYXlNb2RlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fi
c3RyYWN0VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitBcnJh
eTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9vbCBtYWtlU2FmZSkKK3sK
KyAgICAvLyBGSVhNRTogd2UgbWF5IHdhbnQgdG8gYWRkIHNvbWUgcG9seW1vcnBoaWMgc3VwcG9y
dCBpbiB0aGUgZnV0dXJlLiBUaGF0J3Mgd2h5IHRoaXMKKyAgICAvLyBpcyBhIHN3aXRjaCBzdGF0
ZW1lbnQgcmlnaHQgbm93LgorICAgIAorICAgIHN3aXRjaCAobW9kZXMpIHsKKyAgICBjYXNlIDA6
CisgICAgICAgIHJldHVybiBBcnJheTo6Rm9yY2VFeGl0OworICAgIGNhc2UgSXNKU0FycmF5Ogor
ICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzIDogQXJy
YXk6OkpTQXJyYXk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMg
aXMgcG9zc2libHkgYSBraW5kIG9mIGFycmF5IGZvciB3aGljaCwgdGhvdWdoIHRoZXJlIGlzIG5v
CisgICAgICAgIC8vIHVzZWZ1bCBkYXRhIGluIHRoZSBhcnJheSBwcm9maWxlLCB3ZSBtYXkgYmUg
YWJsZSB0byBleHRyYWN0IHVzZWZ1bCBkYXRhIGZyb20KKyAgICAgICAgLy8gdGhlIHZhbHVlIHBy
b2ZpbGVzIG9mIHRoZSBpbnB1dHMuIEhlbmNlLCB3ZSBsZWF2ZSBpdCBhcyB1bmRlY2lkZWQsIGFu
ZCBsZXQKKyAgICAgICAgLy8gdGhlIHByZWRpY3Rpb25zIHByb3BhZ2F0b3IgZGVjaWRlIGxhdGVy
LgorICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKKyAgICB9Cit9CisKK0FycmF5OjpN
b2RlIHJlZmluZUFycmF5TW9kZShBcnJheTo6TW9kZSBhcnJheU1vZGUsIFNwZWN1bGF0ZWRUeXBl
IGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KQoreworICAgIGlmICghYmFzZSB8fCAhaW5kZXgp
IHsKKyAgICAgICAgLy8gVGhlIG9ubHkgY2FzZSBpbiB3aGljaCB0aGVyZSBjYW4gYmUgbm8gcHJl
ZGljdGlvbnMgaXMgaWYgdGhpcyBjb2RlIGhhc24ndAorICAgICAgICAvLyBleGVjdXRlZCwgaW4g
d2hpY2ggY2FzZSB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IHNldCB0aGlzIHRvIEZvcmNlRXhpdC4K
KyAgICAgICAgQVNTRVJUKGFycmF5TW9kZSA9PSBBcnJheTo6Rm9yY2VFeGl0KTsKKyAgICAgICAg
cmV0dXJuIEFycmF5OjpGb3JjZUV4aXQ7CisgICAgfQorICAgIAorICAgIGlmICghaXNJbnQzMlNw
ZWN1bGF0aW9uKGluZGV4KSB8fCAhaXNDZWxsU3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJl
dHVybiBBcnJheTo6R2VuZXJpYzsKKyAgICAKKyAgICAvLyBQYXNzIHRocm91Z2ggYW55IGFycmF5
IG1vZGVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGRlY2lkZWQgYnkgdGhlIGFycmF5IHByb2ZpbGUs
IHNpbmNlCisgICAgLy8gdGhlIHByZWRpY3Rpb25zIG9mIHRoZSBpbnB1dHMgd2lsbCBub3QgdGVs
bCB1cyBhbnl0aGluZyB1c2VmdWwgdGhhdCB3ZSBkaWRuJ3QgYWxyZWFkeQorICAgIC8vIGdldCBm
cm9tIHRoZSBhcnJheSBwcm9maWxlLgorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2Fz
ZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgY2FzZSBB
cnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gYXJyYXlNb2RlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNTdHJpbmdT
cGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpTdHJpbmc7CisgICAgCisg
ICAgaWYgKGlzQXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJh
eTo6QXJndW1lbnRzOworICAgIAorICAgIGlmIChpc0ludDhBcnJheVNwZWN1bGF0aW9uKGJhc2Up
KQorICAgICAgICByZXR1cm4gQXJyYXk6OkludDhBcnJheTsKKyAgICAKKyAgICBpZiAoaXNJbnQx
NkFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6SW50MTZBcnJh
eTsKKyAgICAKKyAgICBpZiAoaXNJbnQzMkFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAg
IHJldHVybiBBcnJheTo6SW50MzJBcnJheTsKKyAgICAKKyAgICBpZiAoaXNVaW50OEFycmF5U3Bl
Y3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6VWludDhBcnJheTsKKyAgICAK
KyAgICBpZiAoaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICBy
ZXR1cm4gQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OworICAgIAorICAgIGlmIChpc1VpbnQxNkFy
cmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6VWludDE2QXJyYXk7
CisgICAgCisgICAgaWYgKGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAg
cmV0dXJuIEFycmF5OjpVaW50MzJBcnJheTsKKyAgICAKKyAgICBpZiAoaXNGbG9hdDMyQXJyYXlT
cGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpGbG9hdDMyQXJyYXk7Cisg
ICAgCisgICAgaWYgKGlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJl
dHVybiBBcnJheTo6RmxvYXQ2NEFycmF5OworICAgIAorICAgIHJldHVybiBBcnJheTo6R2VuZXJp
YzsKK30KKworYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEFy
cmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlv
bih2YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuIHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAmJiB2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+Y2xhc3NJbmZvKCkgPT0gJkpT
QXJyYXk6OnNfaW5mbzsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAg
ICAgICByZXR1cm4gaXNBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworICAgICAg
ICAKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBpc0ludDhBcnJh
eVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6Oklu
dDE2QXJyYXk6CisgICAgICAgIHJldHVybiBpc0ludDE2QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICBy
ZXR1cm4gaXNJbnQzMkFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICAgICAgcmV0dXJuIGlzVWludDhBcnJheVNw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVpbnQ4
Q2xhbXBlZEFycmF5OgorICAgICAgICByZXR1cm4gaXNVaW50OEFycmF5U3BlY3VsYXRpb24odmFs
dWUubV90eXBlKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAg
ICAgIHJldHVybiBpc1VpbnQxNkFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAg
ICAgCisgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBpc1VpbnQz
MkFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKworICAgIGNhc2UgQXJyYXk6OkZsb2F0
MzJBcnJheToKKyAgICAgICAgcmV0dXJuIGlzRmxvYXQzMkFycmF5U3BlY3VsYXRpb24odmFsdWUu
bV90eXBlKTsKKworICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJu
IGlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBjaGFy
KiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsK
KyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgIHJldHVybiAiVW5kZWNpZGVkIjsK
KyAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICByZXR1cm4gIkdlbmVyaWMiOworICAg
IGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgcmV0dXJuICJTdHJpbmciOworICAgIGNhc2Ug
QXJyYXk6OkpTQXJyYXk6CisgICAgICAgIHJldHVybiAiSlNBcnJheSI7CisgICAgY2FzZSBBcnJh
eTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkpTQXJyYXlPdXRPZkJvdW5k
cyI7CisgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICByZXR1cm4gIkFyZ3VtZW50
cyI7CisgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICByZXR1cm4gIkludDhBcnJh
eSI7CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuICJJbnQxNkFy
cmF5IjsKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICByZXR1cm4gIkludDMy
QXJyYXkiOworICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiAiVWlu
dDhBcnJheSI7CisgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiAi
VWludDE2QXJyYXkiOworICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAgICByZXR1
cm4gIlVpbnQzMkFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAg
IHJldHVybiAiRmxvYXQzMkFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Cisg
ICAgICAgIHJldHVybiAiRmxvYXQ2NEFycmF5IjsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBC
ZXR0ZXIgdG8gcmV0dXJuIHNvbWV0aGluZyB0aGVuIGl0IGlzIHRvIGNyYXNoLiBSZW1lbWJlciwg
dGhpcyBtZXRob2QKKyAgICAgICAgLy8gaXMgYmVpbmcgY2FsbGVkIGZyb20gb3VyIG1haW4gZGlh
Z25vc3RpYyB0b29sLCB0aGUgSVIgZHVtcGVyLiBJdCdzIGxpa2UKKyAgICAgICAgLy8gYSBzdGFj
ayB0cmFjZS4gU28gaWYgd2UgZ2V0IGhlcmUgdGhlbiBwcm9iYWJseSBzb21ldGhpbmcgaGFzIGFs
cmVhZHkKKyAgICAgICAgLy8gZ29uZSB3cm9uZy4KKyAgICAgICAgcmV0dXJuICJVbmtub3duISI7
CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBcnJheU1vZGVfaAorI2RlZmlu
ZSBERkdBcnJheU1vZGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIlNwZWN1
bGF0ZWRUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0
IEFic3RyYWN0VmFsdWU7CisKKy8vIFVzZSBhIG5hbWVzcGFjZSArIGVudW0gaW5zdGVhZCBvZiBl
bnVtIGFsb25lIHRvIGF2b2lkIHRoZSBuYW1lc3BhY2UgY29sbGlzaW9uCisvLyB0aGF0IHdvdWxk
IG90aGVyd2lzZSBvY2N1ciwgc2luY2Ugd2Ugc2F5IHRoaW5ncyBsaWtlICJJbnQ4QXJyYXkiIGFu
ZCAiSlNBcnJheSIKKy8vIGluIGxvdHMgb2Ygb3RoZXIgcGxhY2VzLCB0byBtZWFuIHN1YnRseSBk
aWZmZXJlbnQgdGhpbmdzLgorbmFtZXNwYWNlIEFycmF5IHsKK2VudW0gTW9kZSB7CisgICAgVW5k
ZWNpZGVkLCAvLyBJbXBsaWVzIHRoYXQgd2UgbmVlZCBwcmVkaWN0aW9ucyB0byBkZWNpZGUuIFdl
IHdpbGwgbmV2ZXIgZ2V0IHRvIHRoZSBiYWNrZW5kIGluIHRoaXMgbW9kZS4KKyAgICBGb3JjZUV4
aXQsIC8vIEltcGxpZXMgdGhhdCB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGV4ZWN1dGUgdGhpcyBv
cGVyYXRpb24sIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCisgICAgR2VuZXJpYywKKyAgICBT
dHJpbmcsCisgICAgSlNBcnJheSwKKyAgICBKU0FycmF5T3V0T2ZCb3VuZHMsCisgICAgQXJndW1l
bnRzLAorICAgIEludDhBcnJheSwKKyAgICBJbnQxNkFycmF5LAorICAgIEludDMyQXJyYXksCisg
ICAgVWludDhBcnJheSwKKyAgICBVaW50OENsYW1wZWRBcnJheSwKKyAgICBVaW50MTZBcnJheSwK
KyAgICBVaW50MzJBcnJheSwKKyAgICBGbG9hdDMyQXJyYXksCisgICAgRmxvYXQ2NEFycmF5Cit9
OworfSAvLyBuYW1lc3BhY2UgQXJyYXkKKworQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5
TW9kZXMgbW9kZXMsIGJvb2wgbWFrZVNhZmUpOworCitBcnJheTo6TW9kZSByZWZpbmVBcnJheU1v
ZGUoQXJyYXk6Ok1vZGUsIFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4
KTsKKworYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYsIEFycmF5OjpNb2Rl
KTsKKworY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlKTsKKworaW5saW5lIGJv
b2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgY2FzZSBBcnJheTo6
Rm9yY2VFeGl0OgorICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorfQorCitpbmxpbmUgQXJyYXk6Ok1vZGUgbW9kZUZvclB1dChBcnJh
eTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNl
IEFycmF5OjpTdHJpbmc6CisgICAgICAgIHJldHVybiBBcnJheTo6R2VuZXJpYzsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJu
IEFycmF5OjpHZW5lcmljOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGFy
cmF5TW9kZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIG1vZGVzQ29tcGF0aWJsZUZvclN0b3Jh
Z2VMb2FkKEFycmF5OjpNb2RlIGxlZnQsIEFycmF5OjpNb2RlIHJpZ2h0KQoreworICAgIGlmIChs
ZWZ0ID09IHJpZ2h0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBib29sIGxlZnRJ
c0pTQXJyYXkgPQorICAgICAgICBsZWZ0ID09IEFycmF5OjpKU0FycmF5CisgICAgICAgIHx8IGxl
ZnQgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczsKKyAgICAKKyAgICBib29sIHJpZ2h0SXNK
U0FycmF5ID0KKyAgICAgICAgcmlnaHQgPT0gQXJyYXk6OkpTQXJyYXkKKyAgICAgICAgfHwgcmln
aHQgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczsKKyAgICAKKyAgICBpZiAobGVmdElzSlNB
cnJheSAmJiByaWdodElzSlNBcnJheSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6
Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpVbmRl
Y2lkZWQ6CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgIGNhc2UgQXJyYXk6OkdlbmVy
aWM6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQXJyYXlNb2RlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlz
aW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXJyYXlD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAiREZHQnl0ZUNv
ZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkdldEJ5
SWRTdGF0dXMuaCIKQEAgLTgxNiw2ICs4MTcsMzQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IHJldHVybiBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRQcm9maWxpbmdJ
bmRleCk7CiAgICAgfQorICAgIAorICAgIEFycmF5OjpNb2RlIGdldEFycmF5TW9kZVdpdGhvdXRP
U1JFeGl0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVJbmRleCBiYXNlKQor
ICAgIHsKKyAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9u
WzRdLnUuYXJyYXlQcm9maWxlOworICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24oKTsKKyAgICAgICAgaWYgKHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpCisg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKKyAgICAg
ICAgCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBk
YXRhTG9nKCJTbG93IGNhc2UgcHJvZmlsZSBmb3IgYmMjJXU6ICV1XG4iLCBtX2N1cnJlbnRJbmRl
eCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JC
eXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7CisjZW5kaWYKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgbWFrZVNhZmUgPQorICAgICAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAg
ICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bV9jdXJyZW50SW5kZXgsIE91dE9mQm91bmRzKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBm
cm9tT2JzZXJ2ZWQocHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCksIG1ha2VTYWZlKTsKKyAg
ICB9CisgICAgCisgICAgQXJyYXk6Ok1vZGUgZ2V0QXJyYXlNb2RlKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIE5vZGVJbmRleCBiYXNlKQorICAgIHsKKyAgICAgICAgQXJyYXk6Ok1v
ZGUgcmVzdWx0ID0gZ2V0QXJyYXlNb2RlV2l0aG91dE9TUkV4aXQoY3VycmVudEluc3RydWN0aW9u
LCBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQgPT0gQXJyYXk6OkZvcmNlRXhp
dCkKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKKyAgICAgICAgCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCiAgICAgTm9kZUluZGV4IG1ha2VTYWZlKE5vZGVJ
bmRleCBub2RlSW5kZXgpCiAgICAgewpAQCAtMTU0OCw4ICsxNTc3LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAKICAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMSk7Ci0gICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gYWRkVG9HcmFw
aChHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMy
KGluZGV4T3BlcmFuZCkpOwotICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRUb0dyYXBo
KFN0cmluZ0NoYXJDb2RlQXQsIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVy
YW5kKSwgc3RvcmFnZSk7CisgICAgICAgIE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3JhcGgo
U3RyaW5nQ2hhckNvZGVBdCwgT3BJbmZvKEFycmF5OjpTdHJpbmcpLCBnZXQodGhpc09wZXJhbmQp
LCBnZXRUb0ludDMyKGluZGV4T3BlcmFuZCkpOwogCiAgICAgICAgIGlmICh1c2VzUmVzdWx0KQog
ICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKQEAgLTE1NjUsOCArMTU5
Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpbnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0ZXJP
ZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsKLSAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2Ug
PSBhZGRUb0dyYXBoKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGdldCh0aGlzT3BlcmFuZCks
IGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7Ci0gICAgICAgIE5vZGVJbmRleCBjaGFyQ29kZSA9
IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGlu
ZGV4T3BlcmFuZCksIHN0b3JhZ2UpOworICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRU
b0dyYXBoKFN0cmluZ0NoYXJBdCwgT3BJbmZvKEFycmF5OjpTdHJpbmcpLCBnZXQodGhpc09wZXJh
bmQpLCBnZXRUb0ludDMyKGluZGV4T3BlcmFuZCkpOwogCiAgICAgICAgIGlmICh1c2VzUmVzdWx0
KQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKQEAgLTIxNDgsMTMg
KzIxNzUsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9
IGdldEFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhc2UpOwogICAgICAgICAgICAgTm9k
ZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRd
LnUuYXJyYXlQcm9maWxlOwotICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAocHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUo
KSkKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBiYXNl
KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHByb3BlcnR5KTsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBiYXNlLCBwcm9wZXJ0eSwgcHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAg
ICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJh
eU1vZGUpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHByb3BlcnR5KTsKICAgICAgICAgICAg
IHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZhbCk7CiAKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV92YWwpOwpAQCAtMjE2MiwyNiArMjE4NSwxNiBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKworICAgICAgICAgICAgQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFzZSk7CisgICAg
ICAgICAgICAKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJy
YXlQcm9maWxlOwotICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KCk7Ci0gICAgICAgICAgICBpZiAocHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkKLSAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLQot
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRh
dGFMb2coIlNsb3cgY2FzZSBwcm9maWxlIGZvciBiYyMldTogJXVcbiIsIG1fY3VycmVudEluZGV4
LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5
dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKLSNlbmRpZgotCi0gICAg
ICAgICAgICBib29sIG1ha2VTYWZlID0KLSAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQotICAg
ICAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIE91dE9mQm91bmRzKTsKLSAgICAgICAgICAgIAogICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9w
ZXJ0eSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7Ci0gICAgICAgICAgICBh
ZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgbWFrZVNhZmUgPyBQdXRCeVZhbFNhZmUgOiBQdXRCeVZh
bCwgT3BJbmZvKDApLCBPcEluZm8oMCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpW
YXJBcmcsIFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKDApKTsKIAogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X3ZhbCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMjYyNTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjg0LDggKzI4NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBpbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsU2FmZTogeworICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAg
ICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDApID09IGNoaWxkMSAmJiBjYW5vbmljYWxpemUobV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSkgPT0gY2Fub25pY2FsaXplKGNoaWxkMikpCkBAIC0zNjUsNyArMzY0LDYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFs
U2FmZToKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBh
Y2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2Vy
IGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUK
QEAgLTQwOSw3ICs0MDcsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWxTYWZlOgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5
VmFsSXNQdXJlKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNw
ZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAg
ICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0
byBjYXVzZSBhIHN0cnVjdHVyZQpAQCAtNTE1LDcgKzUxMiw2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbFNhZmU6CiAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5
IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdz
IGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCkBAIC01NjAsNyArNTU2LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbFNhZmU6CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1
cmUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRl
cyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAgICAgICAg
ICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNl
IGEgc3RydWN0dXJlCkBAIC02MTMsNyArNjA4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFs
QWxpYXM6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBh
bgogICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3Nz
aWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKQEAgLTkyNSwxNyArOTE5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1heDoKICAg
ICAgICAgY2FzZSBBcml0aFNxcnQ6Ci0gICAgICAgIGNhc2UgR2V0SW50OEFycmF5TGVuZ3RoOgot
ICAgICAgICBjYXNlIEdldEludDE2QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0SW50MzJB
cnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50OEFycmF5TGVuZ3RoOgotICAgICAgICBj
YXNlIEdldFVpbnQ4Q2xhbXBlZEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQxNkFy
cmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQzMkFycmF5TGVuZ3RoOgotICAgICAgICBj
YXNlIEdldEZsb2F0MzJBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRGbG9hdDY0QXJyYXlM
ZW5ndGg6CiAgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICBjYXNlIEdldFN0cmluZ0xl
bmd0aDoKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hh
ckNvZGVBdDoKICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgpAQCAtMTEwMyw4ICsxMDg3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeVZhbExvYWRF
bGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZh
bDoKLSAgICAgICAgY2FzZSBQdXRCeVZhbFNhZmU6IHsKKyAgICAgICAgY2FzZSBQdXRCeVZhbDog
ewogICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDAp
OwogICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
OwogICAgICAgICAgICAgaWYgKGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKG1f
Z3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDk3
ICs3NCw4OSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewogICAg
ICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbm9kZTsK
KyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9ncmFw
aFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJO
dW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGJvb2wgaXNBcnJheSA9IGlzQXJyYXlTcGVjdWxh
dGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBi
b29sIGlzQXJndW1lbnRzID0gaXNBcmd1bWVudHNTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBib29sIGlzU3RyaW5nID0gaXNTdHJp
bmdTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAg
ICAgICAgICBib29sIGlzSW50OEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRT
cGVjdWxhdGVJbnQ4QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNJbnQxNkFycmF5ID0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCk7Ci0gICAgICAg
ICAgICBib29sIGlzSW50MzJBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3Bl
Y3VsYXRlSW50MzJBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc1VpbnQ4QXJyYXkgPSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKTsKLSAgICAgICAg
ICAgIGJvb2wgaXNVaW50OENsYW1wZWRBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hv
dWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNVaW50
MTZBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDE2QXJy
YXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNVaW50MzJBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNG
bG9hdDMyQXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0
MzJBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc0Zsb2F0NjRBcnJheSA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCk7Ci0gICAgICAgICAgICBp
ZiAoIWlzQXJyYXkgJiYgIWlzQXJndW1lbnRzICYmICFpc1N0cmluZyAmJiAhaXNJbnQ4QXJyYXkg
JiYgIWlzSW50MTZBcnJheSAmJiAhaXNJbnQzMkFycmF5ICYmICFpc1VpbnQ4QXJyYXkgJiYgIWlz
VWludDhDbGFtcGVkQXJyYXkgJiYgIWlzVWludDE2QXJyYXkgJiYgIWlzVWludDMyQXJyYXkgJiYg
IWlzRmxvYXQzMkFycmF5ICYmICFpc0Zsb2F0NjRBcnJheSkKKyAgICAgICAgICAgIGlmIChjb2Rl
QmxvY2soKS0+aWRlbnRpZmllcihub2RlUHRyLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2Jh
bERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0g
ICAgICAgICAgICBkYXRhTG9nKCIgIEAldSAtPiAlcyIsIG1fY29tcGlsZUluZGV4LCBpc0FycmF5
ID8gIkdldEFycmF5TGVuZ3RoIiA6ICJHZXRTdHJpbmdMZW5ndGgiKTsKLSNlbmRpZgotICAgICAg
ICAgICAgaWYgKGlzQXJyYXkpIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldEFycmF5
TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZU11c3RH
ZW5lcmF0ZSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJh
dGUpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxl
ID0gCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9k
ZS5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmICghYXJy
YXlQcm9maWxlKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIEFycmF5
UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCisgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGlu
ZUNvZGVCbG9ja0Zvcihub2RlUHRyLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAorICAg
ICAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gQXJyYXk6OlVuZGVjaWRlZDsKKyAgICAg
ICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIGlmICghYXJyYXlQ
cm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihub2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
ICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENoZWNrU3RydWN0dXJlLCBub2RlLmNvZGVPcmln
aW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVk
U3RydWN0dXJlKCkpKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBj
aGVja1N0cnVjdHVyZS5yZWYoKTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hlY2tTdHJ1
Y3R1cmVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBw
ZW5kKGNoZWNrU3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBl
bmQobV9pbmRleEluQmxvY2ssIGNoZWNrU3RydWN0dXJlSW5kZXgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IHJlZmluZUFycmF5TW9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZS0+b2JzZXJ2ZWRBcnJh
eU1vZGVzKCksIGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdLnByZWRpY3Rpb24oKSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAobW9kZVN1cHBvcnRzTGVuZ3RoKGFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICAgICAg
JiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKG5vZGVQdHItPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSBjaGVja1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgbm9kZVB0ci0+Y29kZU9yaWdp
biwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRT
dHJ1Y3R1cmUoKSkpLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgY2hlY2tTdHJ1Y3R1cmUucmVmKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBjaGVja1N0cnVjdHVyZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBjaGVja1N0cnVjdHVyZUluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4
XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGFycmF5TW9kZSA9IHJlZmluZUFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICAgICAgYXJy
YXlNb2RlLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRp
Y3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJl
ZGljdGlvbigpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc0FyZ3VtZW50cykK
LSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldEFyZ3VtZW50c0xlbmd0aCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChpc1N0cmluZykKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldFN0
cmluZ0xlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0ludDhBcnJheSkKLSAgICAgICAg
ICAgICAgICBub2RlLnNldE9wKEdldEludDhBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChpc0ludDE2QXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRJbnQxNkFy
cmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50MzJBcnJheSkKLSAgICAgICAg
ICAgICAgICBub2RlLnNldE9wKEdldEludDMyQXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgZWxz
ZSBpZiAoaXNVaW50OEFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0VWludDhB
cnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1VpbnQ4Q2xhbXBlZEFycmF5KQot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0VWludDhDbGFtcGVkQXJyYXlMZW5ndGgpOwot
ICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50MTZBcnJheSkKLSAgICAgICAgICAgICAgICBub2Rl
LnNldE9wKEdldFVpbnQxNkFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzVWlu
dDMyQXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRVaW50MzJBcnJheUxlbmd0
aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0Zsb2F0MzJBcnJheSkKLSAgICAgICAgICAgICAg
ICBub2RlLnNldE9wKEdldEZsb2F0MzJBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChpc0Zsb2F0NjRBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldEZsb2F0NjRB
cnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAvLyBObyBsb25nZXIgTXVzdEdlbmVyYXRlCi0gICAg
ICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAg
ICAgICBub2RlLmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICBpZiAo
IW1vZGVTdXBwb3J0c0xlbmd0aChhcnJheU1vZGUpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOworICAgICAgICAgICAg
QVNTRVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAg
IG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CiAgICAgICAgICAgICBtX2dy
YXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5
TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBpZiAoIW1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpCi0gICAgICAgICAgICAgICAgfHwgIW1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAg
ICAgfHwgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkg
ewotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoTm9wKTsKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7Ci0gICAgICAgICAg
ICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQyKG5vZGUpOwotICAgICAgICAgICAgICAg
IG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMyhub2RlKTsKLSAgICAgICAgICAgICAgICBub2Rl
LnNldFJlZkNvdW50KDApOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9kZS5zZXRBcnJh
eU1vZGUoCisgICAgICAgICAgICAgICAgcmVmaW5lQXJyYXlNb2RlKAorICAgICAgICAgICAgICAg
ICAgICBub2RlLmFycmF5TW9kZSgpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2Rl
LmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIC8vIFByZWRpY3Rpb25zIHNo
b3VsZCBvbmx5IGJlY29tZSBtb3JlLCByYXRoZXIgdGhhbiBsZXNzLCByZWZpbmVkLiBIZW5jZQor
ICAgICAgICAgICAgLy8gaWYgd2Ugd2VyZSBldmVyIGFibGUgdG8gQ1NFIHRoZSBzdG9yYWdlIHBv
aW50ZXIgZm9yIHRoaXMgb3BlcmF0aW9uLAorICAgICAgICAgICAgLy8gdGhlbiB3ZSBzaG91bGQg
YWx3YXlzIGNvbnRpbnVlIHRvIGJlIGFibGUgdG8gZG8gc28uCisgICAgICAgICAgICBBU1NFUlQo
Y2FuQ1NFU3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJB
dDoKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7Ci0gICAgICAgICAgICBpZiAoISFu
b2RlLmNoaWxkMygpICYmIG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ub3AoKSA9PSBOb3ApCi0gICAg
ICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAg
IG5vZGUuc2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIHJlZmluZUFycmF5TW9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKSwKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChjYW5DU0VTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ub3AoKSA9PSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1vZGVzQ29tcGF0aWJsZUZvclN0b3JhZ2VM
b2FkKG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0uYXJyYXlNb2RlKCksIG5vZGUuYXJyYXlNb2RlKCkp
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgd2UgZG9uJ3QgdXNlIHRoZSBub2RlIHJlZmVyZW5jZSBhZnRlciB3ZSBkbyB0aGUgYXBw
ZW5kLgorICAgICAgICAgICAgICAgICAgICBOb2RlIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2Uo
CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBub2Rl
LmNvZGVPcmlnaW4sIE9wSW5mbyhub2RlLmFycmF5TW9kZSgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRl
eCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNo
aWxkMygpID0gRWRnZShnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gMjsgbi0tOykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCk7
CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2luZGV4SW5CbG9j
aywgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFNlZSBhYm92ZS4gQ29udGlu
dWVkIGZpeHVwIG9mIHRoZSBncmFwaCBzaG91bGQgbm90IHJlZ3Jlc3Mgb3VyIGFiaWxpdHkKKyAg
ICAgICAgICAgICAgICAvLyB0byBzcGVjdWxhdGUuCisgICAgICAgICAgICAgICAgQVNTRVJUKCFu
b2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKQEAgLTMzMywyNiArMzI1LDI2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0QnlW
YWw6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWxTYWZlOiB7Ci0gICAgICAgICAgICBFZGdlIGNoaWxk
MSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgICAgICAgICBFZGdlIGNoaWxk
MiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgIGNhc2UgUHV0QnlWYWw6
IHsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAy
KTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSB8fCAhbV9n
cmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGlmICghbV9ncmFwaFtjaGlsZDJdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChpc0FjdGlvbmFibGVJbnRNdXRh
YmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpKSkgewotICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uaXNDb25zdGFudCgpKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHN3aXRjaCAobW9kZUZvclB1dChub2RlLmFy
cmF5TW9kZSgpKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAg
ICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5
OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgogICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKDIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGlzQWN0aW9uYWJsZUZsb2F0TXV0YWJsZUFycmF5U3BlY3VsYXRpb24obV9ncmFwaFtj
aGlsZDFdLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJB
cnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKICAgICAgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKDIpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw2ICsyMTEsMTAgQEAgdm9pZCBH
cmFwaDo6ZHVtcChjb25zdCBjaGFyKiBwcmVmaXgsIE5vZAogICAgICAgICBkYXRhTG9nKCIlcyVz
IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZUZsYWdzQXNTdHJpbmcobm9kZS5mbGFncygp
KSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KKyAgICBpZiAobm9kZS5oYXNB
cnJheU1vZGUoKSkgeworICAgICAgICBkYXRhTG9nKCIlcyVzIiwgaGFzUHJpbnRlZCA/ICIsICIg
OiAiIiwgbW9kZVRvU3RyaW5nKG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAgaGFzUHJpbnRl
ZCA9IHRydWU7CisgICAgfQogICAgIGlmIChub2RlLmhhc1Zhck51bWJlcigpKSB7CiAgICAgICAg
IGRhdGFMb2coIiVzdmFyJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLnZhck51bWJl
cigpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxMjYyNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw0OCArNDg4LDIwIEBAIHB1
YmxpYzoKICAgICAKICAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUmIG5vZGUpCiAgICAgewotICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICBjYXNlIFB1dEJ5VmFsOiB7Ci0gICAg
ICAgICAgICBpZiAoIWF0KHZhckFyZ0NoaWxkKG5vZGUsIDEpKS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IGF0KHZhckFyZ0NoaWxkKG5vZGUsIDApKS5wcmVkaWN0aW9u
KCk7Ci0gICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRC
eVZhbFNhZmU6IHsKLSAgICAgICAgICAgIGlmICghYXQodmFyQXJnQ2hpbGQobm9kZSwgMSkpLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gYXQodmFyQXJnQ2hpbGQobm9k
ZSwgMCkpLnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlTXV0YWJs
ZUFycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgaWYgKGlzQXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAg
ICAgICAgICAgaWYgKCFhdCh2YXJBcmdDaGlsZChub2RlLCAxKSkuc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhdCh2YXJBcmdDaGlsZChub2RlLCAwKSkucHJlZGljdGlv
bigpOwotICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0
QnlWYWw6IHsKLSAgICAgICAgICAgIGlmICghYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9u
KCk7Ci0gICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZUFycmF5U3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1v
ZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBjYXNlIEFycmF5
OjpKU0FycmF5T3V0T2ZCb3VuZHM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0
QnlWYWw7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1l
bnRzOgorICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRCeVZhbCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBV
U0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC01NDksNyArNTIxLDYgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuICFpc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKTsKICAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgY2FzZSBQdXRC
eVZhbFNhZmU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgICAgIHJldHVy
biAhYnlWYWxJc1B1cmUobm9kZSk7CiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAi
REZHQWRqYWNlbmN5TGlzdC5oIgorI2luY2x1ZGUgIkRGR0FycmF5TW9kZS5oIgogI2luY2x1ZGUg
IkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR05v
ZGVUeXBlLmgiCkBAIC03MzIsNiArNzMzLDM0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0
dXJuIG1fb3BJbmZvOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc0FycmF5TW9kZSgpCisgICAg
eworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlOgorICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIFB1
dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgIGNhc2UgR2V0QnlW
YWw6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJD
b2RlQXQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBBcnJheTo6
TW9kZSBhcnJheU1vZGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FycmF5TW9kZSgpKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFycmF5OjpNb2RlPihtX29wSW5mbyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc2V0QXJyYXlNb2RlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChoYXNBcnJheU1vZGUoKSk7CisgICAgICAgIG1fb3BJbmZvID0g
YXJyYXlNb2RlOworICAgIH0KKyAgICAKICAgICBib29sIGhhc1ZpcnR1YWxSZWdpc3RlcigpCiAg
ICAgewogICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJl
dmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICAvKiBvcGNvZGVzIHVzZSBWYXJBcmdzIGJlYXVzZSB0aGV5IG1heSBo
YXZlIHVwIHRvIDQgY2hpbGRyZW4uICovXAogICAgIG1hY3JvKEdldEJ5VmFsLCBOb2RlUmVzdWx0
SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKFB1
dEJ5VmFsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTWlnaHRDbG9i
YmVyKSBcCi0gICAgbWFjcm8oUHV0QnlWYWxTYWZlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhh
c1ZhckFyZ3MgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAog
ICAgIG1hY3JvKEdldEJ5SWQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
Q2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKEdldEJ5SWRGbHVzaCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCkBAIC0xNDMsMTcgKzE0Miw2
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRCeU9mZnNl
dCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhHZXRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAg
bWFjcm8oR2V0QXJndW1lbnRzTGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhH
ZXRTdHJpbmdMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKEdldEludDhBcnJh
eUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0SW50MTZBcnJheUxlbmd0
aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0SW50MzJBcnJheUxlbmd0aCwgTm9k
ZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0VWludDhBcnJheUxlbmd0aCwgTm9kZVJlc3Vs
dEludDMyKSBcCi0gICAgbWFjcm8oR2V0VWludDhDbGFtcGVkQXJyYXlMZW5ndGgsIE5vZGVSZXN1
bHRJbnQzMikgXAotICAgIG1hY3JvKEdldFVpbnQxNkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50
MzIpIFwKLSAgICBtYWNybyhHZXRVaW50MzJBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBc
Ci0gICAgbWFjcm8oR2V0RmxvYXQzMkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAg
ICBtYWNybyhHZXRGbG9hdDY0QXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1h
Y3JvKEdldFNjb3BlQ2hhaW4sIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldFNjb3BlZFZh
ciwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dFNjb3Bl
ZFZhciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxMiwxNyArNjEyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNh
c2UgR2V0QXJndW1lbnRzTGVuZ3RoOgotICAgICAgICBjYXNlIEdldEludDhBcnJheUxlbmd0aDoK
LSAgICAgICAgY2FzZSBHZXRJbnQxNkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEludDMy
QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0VWludDhBcnJheUxlbmd0aDoKLSAgICAgICAg
Y2FzZSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50MTZB
cnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50MzJBcnJheUxlbmd0aDoKLSAgICAgICAg
Y2FzZSBHZXRGbG9hdDMyQXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0RmxvYXQ2NEFycmF5
TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKICAgICAgICAgY2FzZSBJbnQz
MlRvRG91YmxlOgogICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgICAgIGNhc2UgR2V0
TG9jYWxVbmxpbmtlZDoKQEAgLTYzNyw3ICs2MjYsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNlIFB1dEJ5VmFsU2Fm
ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKV0ubWVyZ2VGbGFncyhOb2Rl
VXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc0ludCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFz
VmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMjYyNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc0LDEy
ICsyMzc0LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9u
KCkgfHwgIWF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSB8fCAhYXQobm9kZS5jaGlsZDIo
KSkucHJlZGljdGlvbigpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewor
ICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNl
RXhpdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmICghYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpIHx8
ICghbm9kZS5jaGlsZDMoKSAmJiAhYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJn
dW1lbnRzKCkpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTIzOTIsMTIwICsyMzkzLDkwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkFyZ3VtZW50cyhub2RlKTsKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAg
Y2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQg
dGhhdCB0aGUgYmFzZSBpcyBzb21lIGtpbmQgb2YgYXJyYXksCisgICAgICAgICAgICAvLyBhdCB0
aGlzIHBvaW50LgorICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
YXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpID09IFNwZWNTdHJpbmcpIHsKKyAgICAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmco
bm9kZSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQo
bm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKLSAgICAgICAgICAg
IGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIGlzSW50OEFycmF5U3BlY3Vs
YXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJy
YXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJy
YXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQu
Z2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZf
dCksIGlzSW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVj
Q2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3Io
KSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hl
Y2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhBcnJheVNwZWN1
bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFy
cmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXpl
b2YodWludDhfdCksIGlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1l
bnRzKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDhB
cnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCks
IFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
YXk6OkludDE2QXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJy
YXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXpl
b2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJy
YXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVp
bnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCks
IG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFy
cmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJy
YXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5
OgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFs
RGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwg
aXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hl
Y2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
IAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVj
Q2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9i
YWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSwg
aXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0No
ZWNrcyk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0
QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXko
bV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVv
Zihkb3VibGUpLCBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVk
QXJyYXlTcGVjQ2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG5vZGUuY2hpbGQzKCkpOwotCi0gICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAg
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgCi0gICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBX
ZSB3aWxsIGhhdmUgYWxyZWFkeSBzcGVjdWxhdGVkIHRoYXQgdGhlIGJhc2UgaXMgc29tZSBraW5k
IG9mIGFycmF5LAotICAgICAgICAvLyBhdCB0aGlzIHBvaW50LgotICAgICAgICAKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7Ci0KLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7Ci0KLSAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICBjYXNlIFB1dEJ5VmFsU2FmZTogeworICAg
IGNhc2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICBFZGdlIGNoaWxkMSA9IG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFhdChj
aGlsZDEpLnByZWRpY3Rpb24oKSB8fCAhYXQoY2hpbGQyKS5wcmVkaWN0aW9uKCkpIHsKKyAgICAg
ICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKTsK
KyAgICAgICAgYm9vbCBhbHJlYWR5SGFuZGxlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAg
ICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVh
dGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIGFscmVhZHlI
YW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIWF0KGNoaWxkMikuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkg
PT0gUHV0QnlWYWwpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBh
cmcxKHRoaXMsIGNoaWxkMSk7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMs
IGNoaWxkMik7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIGNoaWxkMyk7
CkBAIC0yNTE3LDE5ICsyNDg4LDk3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuc3RyaWN0TW9kZUZvcihu
b2RlLmNvZGVPcmlnaW4pID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdCwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGFscmVh
ZHlIYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoYWxyZWFkeUhhbmRsZWQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCiAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsKICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMik7Ci0gICAg
ICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7Ci0gICAgICAg
ICAgICBkYXRhTG9nKCIgaW4gaGVyZSAiKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNl
UmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHku
Z3ByKCk7CisKKyAgICAgICAgc3BlY3VsYXRlQXJyYXkoYXJyYXlNb2RlLCBjaGlsZDEsIGJhc2VS
ZWcpOworCisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgICAgICAgICAvLyBNYXAgYmFzZSwg
cHJvcGVydHkgJiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lz
dGVyLgorICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxk
MywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOworCisgICAgICAg
ICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHNjcmF0Y2hSZWc7CisgICAgICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zm
c2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
LyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgorICAgICAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVl
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJy
YXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6
OkpTQXJyYXkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisKKyAgICAgICAgICAg
IGJhc2UudXNlKCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZh
bHVlLnVzZSgpOworICAgICAgICAKKyAgICAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFn
ZS4KKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKKyAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJh
eTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisKKyAgICAgICAgICAgIC8vIENoZWNr
IGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJ
blZlY3Rvci4KKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFs
dWVzSW5WZWN0b3IpKSk7CisKKyAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBo
b2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkp
OworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7
CisKKyAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgICAgIC8vIFN0
b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2
YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkpKTsKKworICAgICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzKSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJleW9uZEFycmF5Qm91bmRzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAg
bV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlv
bmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJv
cGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5
OjpBcmd1bWVudHM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNo
aWxkMyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2
YWx1ZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIo
KTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gyLmdwcigpOwpAQCAt
MjUzNywxNSArMjU4Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgICAgIGlmICghaXNBcmd1bWVudHNTcGVjdWxhdGlvbihtX3N0YXRlLmZv
ck5vZGUoY2hpbGQxKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKLSAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwoYmFzZVJlZyksIGNoaWxkMSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRy
KAotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlND
ZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmQXJndW1lbnRzOjpzX2luZm8pKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgCiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZEYXRhKCkp
LAogICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcpOwpAQCAtMjU3OSwyMjUgKzI2MTksNTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgp
KSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmds
b2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5n
cHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIGlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChj
aGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50
MTZfdCksIGlzSW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1f
dHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVj
a3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MzJB
cnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1f
aml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgaXNJbnQzMkFycmF5U3BlY3VsYXRp
b24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVj
Q2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgewotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YodWludDhfdCksIGlzVWludDhBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShj
aGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJh
eVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVj
dWxhdGVVaW50OENsYW1wZWRBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNj
cmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhf
dCksIGlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQx
KS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVj
Q2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwg
U2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKLSAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZih1aW50MTZfdCksIGlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZv
ck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5
cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hp
bGQxKS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWlu
dDMyX3QpLCBpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSku
bV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0No
ZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3Bl
Y3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZs
b2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCksIGlzRmxv
YXQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5v
VHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcyk7Ci0gICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoZG91YmxlKSwgaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZv
ck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5
cGVkQXJyYXlTcGVjQ2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IGNoaWxkMyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotCi0gICAgICAg
IC8vIE1hcCBiYXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBh
IHNjcmF0Y2ggcmVnaXN0ZXIuCi0gICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsK
LSAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgIEdQ
UlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9
IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJl
ZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNj
cmF0Y2hSZWcpOwotCi0gICAgICAgIHNwZWN1bGF0ZUFycmF5KGNoaWxkMSwgYmFzZVJlZyk7Ci0K
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25kQXJy
YXlCb3VuZHMpOwotCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgIHByb3BlcnR5LnVzZSgp
OwotICAgICAgICB2YWx1ZS51c2UoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEdldCB0aGUgYXJy
YXkgc3RvcmFnZS4KLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwotICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJy
YXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCi0gICAgICAgIC8vIENoZWNrIGlm
IHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZl
Y3Rvci4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9y
KSkpOwotCi0gICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJl
IGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3Ro
RG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIocHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwotICAgICAgICBtX2ppdC5zdWIzMihUcnVz
dGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLQotICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVw
ZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7Ci0K
LSAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KLSAgICAgICAgbV9qaXQu
c3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQ
dXRCeVZhbFNhZmUpIHsKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgYmV5b25kQXJyYXlC
b3VuZHMsIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0
cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBv
cGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAotICAgICAgICAgICAg
ICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBQdXRCeVZh
bEFsaWFzOiB7Ci0gICAgICAgIEVkZ2UgY2hpbGQxID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCAwKTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0No
aWxkKG5vZGUsIDEpOwotICAgICAgICBFZGdlIGNoaWxkMyA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMik7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWF0KGNoaWxkMSkucHJlZGlj
dGlvbigpIHx8ICFhdChjaGlsZDIpLnByZWRpY3Rpb24oKSkgewotICAgICAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUpOworICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlT
cGVjdWxhdGlvbihhdChjaGlsZDEpLnByZWRpY3Rpb24oKSkpOwotICAgICAgICBBU1NFUlQoYXQo
Y2hpbGQyKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOwotCi0gICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMik7Ci0gICAgICAgIGlmIChhdChjaGlsZDEp
LnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIE5v
VHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGls
ZDEpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNj
cmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZf
dCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChh
dChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
aW50MzJfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgewotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YodWludDhfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0
YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNp
Z25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5
cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5
cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5
cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNj
cmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhf
dCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0
YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0
NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZihkb3VibGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3Vs
YXRlVWludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgTm9UeXBlZEFy
cmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5z
aG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3Qp
LCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChh
dChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9h
dDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YoZmxvYXQpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spOwotICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQx
KS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRv
dWJsZSksIE5vVHlwZWRBcnJheVNwZWNDaGVjayk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChhdChjaGlsZDEpLnNo
b3VsZFNwZWN1bGF0ZUFycmF5KCkpOwotCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIGNoaWxkMyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAg
ICAKLSAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0KLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2Uu
Z3ByKCksIHZhbHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNz
LCBzY3JhdGNoUmVnKTsKLQotICAgICAgICAvLyBHZXQgdGhlIGFycmF5IHN0b3JhZ2UuCi0gICAg
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKLSAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0
KCkpLCBzdG9yYWdlUmVnKTsKLQotICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFy
cmF5LgotICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAg
ICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRy
KHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSkpOwotCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAKKwogICAgIGNhc2UgUmVnRXhwRXhlYzog
ewogICAgICAgICBpZiAoY29tcGlsZVJlZ0V4cEV4ZWMobm9kZSkpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC0yODU5LDcgKzI3MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVH
UFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzdG9yYWdl
R1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsKIAotICAgICAgICBzcGVjdWxhdGVBcnJheShub2RlLmNo
aWxkMSgpLCBiYXNlR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlQXJyYXkoQXJyYXk6OkpTQXJyYXks
IG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3Rv
cmFnZUdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKQEAgLTI4OTYsNyArMjc2Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdl
LmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGgu
Z3ByKCk7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGVBcnJheShub2RlLmNoaWxkMSgpLCBi
YXNlR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlQXJyYXkoQXJyYXk6OkpTQXJyYXksIG5vZGUuY2hp
bGQxKCksIGJhc2VHUFIpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7
CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKQEAgLTMzODYsODEgKzMyNTIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIEdldEFycmF5
TGVuZ3RoOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIAot
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGVBcnJheShu
b2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKLQotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3Vs
dEdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1
bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlc3VsdEdQ
Uik7Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAg
IAotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgR2V0QXJndW1lbnRzTGVuZ3Ro
OiB7Ci0gICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CisgICAgY2FzZSBH
ZXRBcnJheUxlbmd0aDoKKyAgICAgICAgY29tcGlsZUdldEFycmF5TGVuZ3RoKG5vZGUpOwogICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDogewotICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwotICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKLQotICAg
ICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdldEludDhBcnJheUxlbmd0aDogewotICAgICAgICBj
b21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURl
c2NyaXB0b3IoKSwgbm9kZSwgIWlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBHZXRJbnQxNkFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVu
Z3RoKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlz
SW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0SW50MzJBcnJheUxlbmd0
aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRh
KCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0ludDMyQXJyYXlTcGVjdWxhdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGls
ZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCAhaXNVaW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBH
ZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJh
eUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCAhaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
R2V0VWludDE2QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5n
dGgobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlz
VWludDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldFVpbnQzMkFycmF5TGVu
Z3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERh
dGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc1VpbnQzMkFycmF5U3BlY3Vs
YXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRGbG9hdDMyQXJyYXlMZW5ndGg6IHsKLSAgICAgICAg
Y29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBl
ZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCAhaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KICAgICBjYXNlIENoZWNr
RnVuY3Rpb246IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1
YWwsIGZ1bmN0aW9uLmdwcigpLCBub2RlLmZ1bmN0aW9uKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMjYy
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjY5LDEyICsyNjksNzkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2xlYXJHZW5lcmF0aW9uSW5mbwogICAgIG1fZnBycyA9IFJlZ2lzdGVyQmFuazxGUFJJbmZvPigp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheShFZGdlIGVkZ2UsIEdQ
UlJlZyBiYXNlUmVnKQorY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSklU
Ojp0eXBlZEFycmF5RGVzY3JpcHRvcihBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7Ci0gICAgQWJz
dHJhY3RWYWx1ZSYgYXJyYXlWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdlKTsKLSAgICBpZiAo
YXJyYXlWYWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAg
ICAmJiBhcnJheVZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5jbGFz
c0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvKQotICAgICAgICByZXR1cm47CisgICAgc3dpdGNo
IChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgIHJldHVy
biAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmlu
dDE2QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAg
ICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7Cisg
ICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiAmbV9qaXQu
Z2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKTsKKyAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPnVp
bnQxNkFycmF5RGVzY3JpcHRvcigpOworICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAg
ICAgICByZXR1cm4gJm1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCk7
CisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gJm1faml0Lmds
b2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOworICAgIGNhc2UgQXJyYXk6OkZs
b2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJB
cnJheURlc2NyaXB0b3IoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK2NvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBFZGdlIGVkZ2UsIEdQUlJlZyBiYXNlUmVn
KQoreworICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiByZXN1bHQgPSB0eXBlZEFycmF5
RGVzY3JpcHRvcihhcnJheU1vZGUpOworICAgIAorICAgIGlmIChtb2RlQWxyZWFkeUNoZWNrZWQo
bV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLCBhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIAorICAgIGNvbnN0IENsYXNzSW5mbyogZXhwZWN0ZWRDbGFzc0luZm8gPSAwOworICAg
IAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAg
ZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3Vu
ZHM6IHsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGR1cGxpY2F0ZXMgdGhlIGNvZGUgYmVsb3cgaW4g
YW50aWNpcGF0aW9uIG9mIHRoaXMgY29kZSBiZWluZworICAgICAgICAvLyBzdWJzdGFudGlhbGx5
IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7Cisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgp
KSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJh
eTo6c19pbmZvKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6CisgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkFyZ3VtZW50czo6
c19pbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAg
IGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFy
cmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0
MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAgICAgIGV4cGVjdGVk
Q2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KICAgICAKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICBtX2ppdC5sb2FkUHRy
KApAQCAtMjg0LDcgKzM1MSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUFycmF5
KEVkZ2UKICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5n
cHIoKSwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOworICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZXhwZWN0ZWRDbGFzc0luZm8pKSk7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Rv
cmFnZShOb2RlSW5kZXggbm9kZUluZGV4KQpAQCAtMTYyMCwxMSArMTY4OSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7
CiAKLSAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7Ci0gICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBBU1NFUlQobW9kZUFs
cmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgQXJyYXk6OlN0cmlu
ZykpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBu
ZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSkpOwpA
QCAtMjAxOCwyMyArMjA4Myw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVDbGFtcERvdWJsZVRvQnl0
ZShKSVQKIAogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJheUxl
bmd0aChjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgTm9kZSYgbm9kZSwg
Ym9vbCBuZWVkc1NwZWN1bGF0aW9uQ2hlY2spCi17Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwotICAgIAotICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgIGlmIChuZWVkc1NwZWN1bGF0aW9uQ2hl
Y2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNj
cmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgIAotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSwgcmVzdWx0
R1BSKTsKLSAgICAKLSAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgp
OwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJy
YXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUmIG5vZGUsIHNp
emVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzIHNwZWN1
bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5
cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVu
dFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MpCiB7CiAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0yMDQ3LDEy
ICsyMDk2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5ncHIoKTsKIAotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJy
YXlUeXBlU3BlY0NoZWNrKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSk7CiAKICAgICBzcGVjdWxhdGlv
bkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLApAQCAt
MjA5NywxMyArMjE0MSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkluCiAgICAgZG91YmxlUmVzdWx0KGZyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJl
ZyBwcm9wZXJ0eSwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3Bl
Y3VsYXRpb25SZXF1aXJlbWVudHMgc3BlY3VsYXRpb25SZXF1aXJlbWVudHMsIFR5cGVkQXJyYXlT
aWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVy
dHksIE5vZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mg
c2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQogewogICAgIEVkZ2UgYmFz
ZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgRWRnZSB2YWx1
ZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgCi0gICAgaWYg
KHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spCi0g
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwoYmFzZSksIGJhc2VVc2UsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZv
KSkpOwogICAgIEdQUlRlbXBvcmFyeSB2YWx1ZTsKICAgICBHUFJSZWcgdmFsdWVHUFI7CiAgICAg
CkBAIC0yMTc0LDcgKzIyMTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JJCiAgICAgQVNTRVJUKHZhbHVlR1BSICE9IHN0b3JhZ2VSZWcpOwogICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VP
ZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5k
czsKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5U3BlY0No
ZWNrKQorICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWwpCiAgICAgICAgIG91dE9mQm91bmRz
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQp
KTsKIAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKQEAgLTIxOTAsMTIgKzIyMzIsMTIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICBpZiAoc3BlY3VsYXRpb25S
ZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5U3BlY0NoZWNrKQorICAgIGlmIChub2RlLm9wKCkg
PT0gUHV0QnlWYWwpCiAgICAgICAgIG91dE9mQm91bmRzLmxpbmsoJm1faml0KTsKICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxh
dGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlvblJlcXVpcmVtZW50cykKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUpCiB7
CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIo
KSk7CkBAIC0yMjA0LDE3ICsyMjQ2LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uRmwKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
dG9yYWdlLmdwcigpOwotICAgIAotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBO
b1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorCisgICAgQVNTRVJUKG1vZGVBbHJlYWR5Q2hlY2tlZCht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKTsKIAogICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5mcHIoKTsKLSAgICBBU1NFUlQoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFy
cmF5U3BlY0NoZWNrKTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAogICAgICAgICBtX2ppdC5icmFuY2gzMigKQEAgLTIy
MzgsMTUgKzIyNzQsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25G
bAogICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHBy
b3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxh
dGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlvblJlcXVpcmVtZW50cykKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9k
ZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQogewogICAgIEVkZ2UgYmFzZVVzZSA9IG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgRWRnZSB2YWx1ZVVzZSA9IG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgCiAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAKLSAgICBpZiAoc3BlY3VsYXRp
b25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwg
YmFzZVVzZS5pbmRleCgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykp
KTsKKyAgICBBU1NFUlQobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CiAgICAgCkBAIC0yMjU1LDcgKzIyOTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAgCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VS
ZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzOwotICAgIGlmIChzcGVj
dWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spCisgICAgaWYgKG5v
ZGUub3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOwogICAgIAogICAgIHN3
aXRjaCAoZWxlbWVudFNpemUpIHsKQEAgLTIyNzIsNyArMjMwNyw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckYKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9
IE5vVHlwZWRBcnJheVNwZWNDaGVjaykKKyAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsKQog
ICAgICAgICBvdXRPZkJvdW5kcy5saW5rKCZtX2ppdCk7CiAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOwogfQpAQCAtMzA2Niw3NSArMzEwMSwzNiBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlU3RyaWN0RXEoTm9kCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlKE5vZGUmIG5vZGUpCiB7Ci0gICAgQVNTRVJUKGF0KG5vZGUuY2hp
bGQxKCkpLnByZWRpY3Rpb24oKSk7Ci0gICAgQVNTRVJUKGF0KG5vZGUuY2hpbGQyKCkpLnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSk7Ci0gICAgICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdw
cigpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgPT0gU3BlY1N0
cmluZykgewotICAgICAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7Ci0KKyAgICAKKyAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3Jp
cHRvciA9CisgICAgICAgIHNwZWN1bGF0ZUFycmF5KG5vZGUuYXJyYXlNb2RlKCksIG5vZGUuY2hp
bGQxKCksIGJhc2VSZWcpOworICAgIAorICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewor
ICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc3RvcmFn
ZVJlZyk7CiAgICAgICAgIAogICAgICAgICAvLyBTcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWNj
ZXNzaW5nIGEgcm9wZQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgc3RvcmFnZVJlZykpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJl
Zyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4
QXJyYXkoKSkgewotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICBp
ZiAoIWlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNl
dCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxk
U3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Ci0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRv
cigpOwotICAgICAgICBpZiAoIWlzSW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7Ci0gICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRv
ci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9IGVsc2UgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICBjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50
MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgaWYgKCFpc0ludDMyQXJyYXlTcGVjdWxhdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJl
ZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zm
c2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJ
bmZvKSkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBl
bHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsK
LSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5n
bG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgIGlmICghaXNVaW50
OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Nl
bGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVz
Y3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3Jh
Z2VSZWcpOwotICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
VWludDhDbGFtcGVkQXJyYXkoKSkgewotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNj
cmlwdG9yKCk7Ci0gICAgICAgIGlmICghaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwg
bm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZz
ZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3Vs
ZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3Jp
cHRvcigpOwotICAgICAgICBpZiAoIWlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2Ny
aXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAgIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgaWYgKCFpc1VpbnQzMkFycmF5U3Bl
Y3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNz
SW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5t
X2NsYXNzSW5mbykpKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwot
ICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFy
cmF5KCkpIHsKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ig
PSBtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAg
aWYgKCFpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VP
ZmZzZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlE
ZXNjcmlwdG9yKCk7Ci0gICAgICAgIGlmICghaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5v
ZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkp
OwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9kZS5jaGlsZDEoKSwgYmFzZVJlZyk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJy
YXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdl
UmVnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVChkZXNjcmlwdG9yKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVn
KTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIAogICAgIHN0b3JhZ2VSZXN1bHQoc3RvcmFn
ZVJlZywgbV9jb21waWxlSW5kZXgpOwogfQogCkBAIC0zMjUyLDYgKzMyNDgsNDIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogICAgIGludGVnZXJSZXN1bHQocmVz
dWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRBcnJheUxlbmd0aChOb2RlJiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKKyAgICAgICAgCisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAgIGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0KKyAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9kZS5h
cnJheU1vZGUoKSwgbm9kZS5jaGlsZDEoKSwgYmFzZUdQUik7CisKKyAgICBzd2l0Y2ggKG5vZGUu
YXJyYXlNb2RlKCkpIHsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIp
OworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
LCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZM
ZW5ndGgoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKKyAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOworICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+
bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSYgbm9kZSkKIHsK
ICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTI2MjU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDgyLDYgKzIwODIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkFy
Z3VtZW50cyhOb2RlJik7CiAgICAgdm9pZCBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUm
KTsKICAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2RlJik7CisgICAgCiAg
ICAgdm9pZCBjb21waWxlVmFsdWVUb0ludDMyKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVVSW50
MzJUb051bWJlcihOb2RlJik7CiAgICAgdm9pZCBjb21waWxlRG91YmxlQXNJbnQzMihOb2RlJik7
CkBAIC0yMDk1LDEyICsyMDk3LDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBjb21waWxl
QXJpdGhNb2QoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZVNvZnRNb2R1bG8oTm9kZSYpOwotICAg
IHZvaWQgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3ImLCBOb2RlJiwgYm9vbCBuZWVkc1NwZWN1bGF0aW9uQ2hlY2spOwotICAgIGVudW0gVHlwZWRB
cnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzIHsKLSAgICAgICAgTm9UeXBlZEFycmF5U3BlY0No
ZWNrLAotICAgICAgICBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrLAotICAgICAgICBBbGxUeXBl
ZEFycmF5U3BlY0NoZWNrcwotICAgIH07CiAgICAgZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7
CiAgICAgICAgIFNpZ25lZFR5cGVkQXJyYXksCiAgICAgICAgIFVuc2lnbmVkVHlwZWRBcnJheQpA
QCAtMjExMCwxMCArMjEwNiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIENsYW1wUm91bmRpbmcKICAg
ICB9OwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwot
ICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0
aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7Ci0gICAgdm9pZCBjb21waWxl
UHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgR1BS
UmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlw
ZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcywgVHlw
ZWRBcnJheVJvdW5kaW5nID0gVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgdm9pZCBjb21waWxlR2V0
QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIE5vZGUm
LCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyk7
Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6
ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMpOworICAg
IHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mp
OworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUmLCBzaXpl
X3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcg
PSBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBl
ZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50
U2l6ZSk7CisgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3Qg
VHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2Rl
Jiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbk5vQ2hl
Y2soTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihOb2RlJik7
CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlJik7CkBAIC0yMTk5LDcgKzIxOTUsOSBA
QCBwdWJsaWM6CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogZm9yd2FyZFNwZWN1bGF0
aW9uV2F0Y2hwb2ludChFeGl0S2luZCA9IFVuY291bnRhYmxlV2F0Y2hwb2ludCk7CiAgICAgSnVt
cFJlcGxhY2VtZW50V2F0Y2hwb2ludCogc3BlY3VsYXRpb25XYXRjaHBvaW50V2l0aENvbmRpdGlv
bmFsRGlyZWN0aW9uKEV4aXRLaW5kLCBib29sIGlzRm9yd2FyZCk7CiAgICAgCi0gICAgdm9pZCBz
cGVjdWxhdGVBcnJheShFZGdlIGJhc2VFZGdlLCBHUFJSZWcgYmFzZVJlZyk7CisgICAgY29uc3Qg
VHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlKTsK
KyAgICAKKyAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogc3BlY3VsYXRlQXJyYXkoQXJy
YXk6Ok1vZGUsIEVkZ2UgYmFzZUVkZ2UsIEdQUlJlZyBiYXNlUmVnKTsKICAgICAKICAgICB0ZW1w
bGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5v
ZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDEyNjI1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgs
NyArOTgsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKLSAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAgICAgICAgICAg
ICBjYXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKICAg
ICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNlcy4KQEAgLTIxNSw1MyAr
MjE0LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghbm9kZS5wcmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlv
bigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJs
ZUFycmF5U3BlY3VsYXRpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpIHx8
ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNsb2JiZXIobGl2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFs
OgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsU2FmZTogewotICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hp
bGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSB8
fCAhbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGhbY2hpbGQyXS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgbV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpCi0j
ZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgY2xvYmJlcihsaXZlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0gUHV0
QnlWYWxTYWZlKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFd
LnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1
bGF0ZUludDMyQXJyYXkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJy
YXkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2No
aWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3Vs
ZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRl
RmxvYXQ2NEFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQ
dXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIGNsb2JiZXIobGl2ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160026</attachid>
            <date>2012-08-22 15:57:29 -0700</date>
            <delta_ts>2012-08-22 17:23:30 -0700</delta_ts>
            <desc>seems to work</desc>
            <filename>arraymode_patch_9.diff</filename>
            <type>text/plain</type>
            <size>173438</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2MzYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBA
CisyMDEyLTA4LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgYWNjZXNzZXMgc2hvdWxkIHJlbWVtYmVyIHdoYXQga2luZCBvZiBhcnJheSB0aGV5IGFy
ZSBwcmVkaWN0ZWQgdG8gYWNjZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NDQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEludHJvZHVjZWQgdGhlIG5vdGlvbiBvZiBERkc6OkFycmF5OjpNb2RlLCBz
dG9yZWQgaW4gbm9kZS5hcnJheU1vZGUoKSwgd2hpY2ggYWxsb3dzIG5vZGVzCisgICAgICAgIHRv
IHJlbWVtYmVyIGhvdyB0aGV5IGRlY2lkZWQgdG8gYWNjZXNzIGFycmF5cy4gVGhpcyBwZXJtaXRz
IHRoZSBieXRlY29kZSBwYXJzZXIgdG8gImxvY2sgaW4iCisgICAgICAgIHRoZSBtb2RlIG9mIGFj
Y2VzcyBpZiBpdCBoYXMgcHJvZmlsaW5nIGF0IGl0cyBkaXNwb3NhbCwgYW5kIGl0IGFsc28gYWxs
b3dzIHRoZSBwcmVkaWN0aW9uCisgICAgICAgIHByb3BhZ2F0b3IgdG8gZG8gYSBmaXh1cCBvZiB0
aGUgYXJyYXkgbW9kZSBsYXRlciBpbiB0aGUgb3B0aW1pemF0aW9uIGZpeHBvaW50LgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgaGVhbHRoeSBhbW91bnQgb2YgbmV3IGNhcGFi
aWxpdHkgKHNwZWNpZmljYWxseSB0aGUgYWJpbGl0eSBvZiB0aGUgcGFyc2VyCisgICAgICAgIHRv
IGxvY2sgaW4gYW4gYXJyYXkgbW9kZSByZWdhcmRsZXNzIG9mIHR5cGUgcHJlZGljdGlvbnMpIGFu
ZCBpdCBhbHNvIGJsb3dzIGF3YXkgYSBsb3Qgb2YKKyAgICAgICAgbWVzc3kgY29kZS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcv
REZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlNb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmZy
b21PYnNlcnZlZCk6CisgICAgICAgIChKU0M6OkRGRzo6cmVmaW5lQXJyYXlNb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjptb2RlQWxyZWFkeUNoZWNrZWQpOgorICAgICAgICAoSlNDOjpERkc6Om1v
ZGVUb1N0cmluZyk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5oOiBBZGRlZC4KKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkRGRzo6bW9kZUZvclB1dCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZXNDb21wYXRpYmxl
Rm9yU3RvcmFnZUxvYWQpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVTdXBwb3J0c0xlbmd0aCk6
CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEJ5dGVDb2Rl
UGFyc2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJyYXlNb2Rl
V2l0aG91dE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRB
cnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRy
aW5zaWMpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpnZXRCeVZhbExvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6c3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbik6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1p
bmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpieVZhbElzUHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmNsb2JiZXJzV29ybGQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzQXJyYXlNb2RlKToKKyAgICAgICAgKE5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OmFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
c2V0QXJyYXlNb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVzY3JpcHRvcik6CisgICAgICAgIChERkcpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAg
ICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2U6OnJ1bik6CisKIDIwMTItMDgtMjIgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5i
ZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBTZXBhcmF0ZSBNYXJrU3RhY2tUaHJlYWRTaGFyZWRE
YXRhIGZyb20gTWFya1N0YWNrCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NP
VVJDRVMKIAogICAgIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAogICAgIGRmZy9ERkdBcmd1bWVu
dHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdBcnJheU1vZGUuY3BwCiAgICAg
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKICAgICBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CiAgICAgZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1
NSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fz
c2VtYmx5SGVscGVycy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1i
bHlIZWxwZXJzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMjYyNzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtOTUsNiAr
OTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgXAogICAgIGRm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcCBcCiAgICAgZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwIFwKKyAgICBkZmcvREZHQXJyYXlNb2RlLmNwcCBcCiAgICAgZGZnL0RGR0Fz
c2VtYmx5SGVscGVycy5jcHAgXAogICAgIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgXAogICAg
IGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYg
KzE0Miw4IEBACiAJCTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGNjM5NDU0MTVEMDcwNTUwMDZBNTk3QyAvKiBBcnJh
eVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2Mzk0NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi87IH07CiAJ
CTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3
QyAvKiBBcnJheVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjYzOTQ4NDE1RTQ4MTE4MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDgx
MTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwICovOyB9OworCQkwRjYzOTQ4NTE1
RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJy
YXlNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY2Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDc2
MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0Yx
NjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGph
Y2VuY3lMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJF
NCAvKiBERkdFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTg5Niw2ICs4OTgsOCBAQAogCQkwRjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyog
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RG
R1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5UHJvZmlsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVBy
b2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlQcm9maWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAv
KiBERkdBcnJheU1vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQXJyYXlNb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlN
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FycmF5TW9kZS5oOyBw
YXRoID0gZGZnL0RGR0FycmF5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Lmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0
Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI1NywxMiArMjI2MSwxNSBAQAogCQk4NkVD
OURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKLQkJCQkwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1l
bnRQb3NpdGlvbi5oICovLAotCQkJCTBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1
bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywKLQkJCQkwRjE2MDE1QjE1NjE5OEJGMDBD
MjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oICovLAogCQkJCTBGNjIw
MTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJCQkwRjYy
MDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEY2NkUx
NjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLywKKwkJCQkwRjFFM0E0
MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oICovLAorCQkJCTBGMTYw
MTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cCAqLywKKwkJCQkwRjE2MDE1QjE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5oICovLAorCQkJCTBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdB
cnJheU1vZGUuY3BwICovLAorCQkJCTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJh
eU1vZGUuaCAqLywKIAkJCQkwRkMwOTc2QjE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlI
ZWxwZXJzLmNwcCAqLywKIAkJCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1i
bHlIZWxwZXJzLmggKi8sCiAJCQkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2lj
QmxvY2suaCAqLywKQEAgLTIzMDYsNyArMjMxMyw2IEBACiAJCQkJODZFQ0EzRTkxMzJERUYxQzAw
MkIyQUQ3IC8qIERGR05vZGUuaCAqLywKIAkJCQkwRkE1ODFCNzE1MEU5NTJBMDBCOUEyRDkgLyog
REZHTm9kZUZsYWdzLmNwcCAqLywKIAkJCQkwRkE1ODFCODE1MEU5NTJBMDBCOUEyRDkgLyogREZH
Tm9kZUZsYWdzLmggKi8sCi0JCQkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFj
ZW5jeUxpc3QuaCAqLywKIAkJCQkwRkE1ODFCOTE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZVR5
cGUuaCAqLywKIAkJCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovLAog
CQkJCTg2RUM5REJGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCAqLywKQEAg
LTI4ODQsNiArMjg5MCw3IEBACiAJCQkJRkU0QTMzMjAxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5z
cGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyog
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYz
OTQ1NTE1RDA3MDU3MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CkBAIC0zNDg1LDYgKzM0OTIsNyBAQAogCQkJCUZFNEEzMzFGMTVCRDJF
MDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ0
MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNjM5NDU0MTVEMDcwNTUwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2Mzk0ODQxNUU0ODExODAwNkE1OTdDIC8qIERG
R0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTI2MjcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODY4LDY1ICs4NjgsNjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkgfHwgIW1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnByZWRpY3Rpb24oKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsK
KyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VF
eGl0OgogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpIHx8ICghbm9kZS5jaGlsZDMoKSAmJiAhbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4
SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
U3RyaW5nOgorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0
cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjU3RyaW5nKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQXJndW1lbnRzKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
ID09IFNwZWNTdHJpbmcpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNTdHJpbmcpOworICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcgb2YgdGhlIG91dC1vZi1ib3Vu
ZHMKKyAgICAgICAgICAgIC8vIGNhc2UuCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKKyAgICAgICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0ludDhBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJh
eSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRl
VWludDhBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxk
U3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50
OENsYW1wZWRBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKSkgewor
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDMy
QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKICAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAg
ICAgaWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtOTM0LDU1ICs5MzUsNDcg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgeworICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkp
IHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0NjRBcnJheSk7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsK
LSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6
Ci0gICAgY2FzZSBQdXRCeVZhbFNhZmU6IHsKKyAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotCiAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpOwogICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMik7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFtX2dyYXBoW2No
aWxkMV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW2NoaWxkMl0ucHJlZGljdGlvbigpKSB7Cisg
ICAgICAgIHN3aXRjaCAobW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9ncmFwaFtjaGlsZDJd
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAg
ICAgICB8fCBtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkKLSNlbmRp
ZgotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFB1dEJ5
VmFsIHx8IG5vZGUub3AoKSA9PSBQdXRCeVZhbFNhZmUpOworICAgICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOgogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhb
Y2hpbGQxXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkgeworICAgICAgICBjYXNlIEFycmF5
OjpKU0FycmF5OgorICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7
CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBjbG9iYmVyV29y
bGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQx
KS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmls
dGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBp
ZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7CisgICAgICAg
IGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0
ZXIoU3BlY0ludDhBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKQEAgLTk5MCw4ICs5ODMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJh
eSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxk
M10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtOTk5LDggKzk5MSw3IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRT
cGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToK
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwogICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
aWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC0xMDA4LDgg
Kzk5OSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNO
dW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBB
cnJheTo6VWludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3Bl
Y1VpbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCkBAIC0xMDE3LDggKzEwMDcsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVk
QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtMTAyNiw4
ICsxMDE1LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3Bl
Y051bWJlcik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVy
KFNwZWNVaW50MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKQEAgLTEwMzUsOCArMTAyMyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50MzJB
cnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwogICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhb
Y2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC0xMDQ0LDIzICsxMDMxLDIwIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQx
XS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpG
bG9hdDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9h
dDMyQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hv
dWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjRmxvYXQ2NEFy
cmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShjaGls
ZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbFNhZmUpCi0gICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzNTYsNjkgKzEzNDAsODIgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Nl
bGwpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBHZXRBcmd1bWVudHNMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0FyZ3VtZW50cyk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
KyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6
OlVuZGVjaWRlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIG1f
aXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICBub2RlLnNl
dENhbkV4aXQoIWlzU3RyaW5nU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJp
bmcpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SlNB
cnJheU91dE9mQm91bmRzOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0ludDhBcnJheVNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFycmF5KTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KCFpc0ludDE2QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2
QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzSW50MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50OEFycmF5
U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCghaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQx
NkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoIWlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1VpbnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmxvYXQzMkFycmF5U3Bl
Y3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCghaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0Zsb2F0NjRBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAot
ICAgIGNhc2UgR2V0U3RyaW5nTGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzU3Ry
aW5nU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAot
ICAgIGNhc2UgR2V0SW50OEFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
SW50OEFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhBcnJheSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHZXRJbnQxNkFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
SW50MTZBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKLSAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdldEludDMyQXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgh
aXNJbnQzMkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsK
LSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwot
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR2V0VWludDhBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KCFpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
OwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KCFpc1VpbnQ4Q2xhbXBlZEFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldFVpbnQxNkFycmF5TGVuZ3Ro
OgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR2V0VWludDMyQXJyYXlM
ZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50MzJBcnJheVNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRGbG9hdDMy
QXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNGbG9hdDMyQXJyYXlTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKLSAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdl
dEZsb2F0NjRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0Zsb2F0NjRB
cnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwotICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVj
a1N0cnVjdHVyZTogewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJv
cGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcyku
CkBAIC0xNDg5LDY1ICsxNDg2LDQ1IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7IC8vIFRoZSByZXN1
bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCkpOwotICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMigpXS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOwogICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7
IC8vIExpZXMsIGJ1dCB0aGlzIGlzIChhbG1vc3QpIGFsd2F5cyBmb2xsb3dlZCBieSBHZXRCeVZh
bCwgd2hpY2ggZG9lcyBleGl0LiBTbyBubyBwb2ludCBpbiB0cnlpbmcgdG8gYmUgbW9yZSBwcmVj
aXNlLgotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVB
cmd1bWVudHMoKSkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCkgPT0gU3BlY1N0cmluZykgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVJbnQ4QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgICAgICAvLyBUaGlzIGRvZXNu
J3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2FudCB0byBh
ZGQKKyAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9u
cywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgorICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKKyAgICAg
ICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkg
eworICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OENsYW1w
ZWRBcnJheSgpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjVWludDhDbGFtcGVkQXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNs
ZWFyKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7CisgICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoU3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwotICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9h
dDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3Bl
Y3VsYXRlRmxvYXQ2NEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5
OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0NjRB
cnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5jbGVhcigpOwogICAgICAgICBicmVhazsgCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBG
aWd1cmUgb3V0IHdoaWNoIHZhcmlhYmxlcyBhbGlhcyB0aGUgYXJndW1lbnRzIGFuZCBub3RoaW5n
IGVsc2UsIGFuZCBhcmUKLSAgICAgICAgLy8gdXNlZCBvbmx5IGZvciBHZXRCeVZhbCBhbmQgR2V0
QXJndW1lbnRzTGVuZ3RoIGFjY2Vzc2VzLiBBdCB0aGUgc2FtZSB0aW1lLAorICAgICAgICAvLyB1
c2VkIG9ubHkgZm9yIEdldEJ5VmFsIGFuZCBHZXRBcnJheUxlbmd0aCBhY2Nlc3Nlcy4gQXQgdGhl
IHNhbWUgdGltZSwKICAgICAgICAgLy8gaWRlbnRpZnkgdXNlcyBvZiBDcmVhdGVBcmd1bWVudHMg
dGhhdCBhcmUgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgYXJndW1lbnRzCiAgICAgICAgIC8vIGJl
aW5nIGFsaWFzZWQgb25seSB0byB2YXJpYWJsZXMgdGhhdCBzYXRpc2Z5IHRoZXNlIGNvbnN0cmFp
bnRzLgogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CkBAIC0yNzcsMzQgKzI3
NywyNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghbm9kZS5wcmVkaWN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwg
IW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLmFycmF5TW9kZSgpICE9IEFycmF5OjpBcmd1bWVudHMpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAvLyBUaGF0J3Mgc28gYXdmdWwgYW5kIHByZXR0eSBtdWNoIGltcG9zc2libGUg
c2luY2UgaXQgd291bGQKKyAgICAgICAgICAgICAgICAgICAgLy8gaW1wbHkgdGhhdCB0aGUgYXJn
dW1lbnRzIHdlcmUgcHJlZGljdGVkIGludGVnZXIsIGJ1dCBpdCdzCisgICAgICAgICAgICAgICAg
ICAgIC8vIGdvb2QgdG8gYmUgZGVmZW5zaXZlIGFuZCB0aG9yb3VnaC4KKyAgICAgICAgICAgICAg
ICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgb2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVBcnJheVNw
ZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogeworICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKSAhPSBBcnJheTo6QXJndW1lbnRz
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyhub2Rl
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgYXJndW1lbnRzIGlzIHVzZWQgYXMgYW4gaW5kZXgsIHRoZW4gaXQn
cyBhbiBlc2NhcGluZyB1c2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGF0J3Mgc28g
YXdmdWwgYW5kIHByZXR0eSBtdWNoIGltcG9zc2libGUgc2luY2UgaXQgd291bGQKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGltcGx5IHRoYXQgdGhlIGFyZ3VtZW50cyB3ZXJlIHByZWRpY3Rl
ZCBpbnRlZ2VyLCBidXQgaXQncwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ29vZCB0byBi
ZSBkZWZlbnNpdmUgYW5kIHRob3JvdWdoLgotICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2
ZUJhZEFyZ3VtZW50c1VzZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMo
bm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudHNMZW5n
dGg6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBvYnNl
cnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC00OTYsMzggKzQ4NywzMiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5w
cmVkaWN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnByZWRpY3Rpb24oKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQWN0
aW9uYWJsZUFycmF5U3BlY3VsYXRpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMigpXS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGNhbiBiZSBzaW1wbGlmaWVkIHRvIEdldE15QXJndW1lbnRCeVZh
bCBpZiB3ZSBrbm93IHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IHNhdGlzZmll
cyBlaXRoZXIgY29uZGl0aW9uICgxKSBvciAoMik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyAxKSBJdHMgZmlyc3QgY2hpbGQgaXMgYSB2YWxpZCBBcmd1bWVudHNBbGlhc2luZ0RhdGEgYW5k
IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgSW5saW5lQ2FsbEZyYW1lKiBpcyBu
b3QgbWFya2VkIGFzIGNyZWF0aW5nIGFyZ3VtZW50cy4KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIDIpIEl0cyBmaXJzdCBjaGlsZCBpcyBDcmVhdGVBcmd1bWVudHMgYW5kIGl0cyBJbmxpbmVD
YWxsRnJhbWUqCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBpcyBub3QgbWFya2VkIGFz
IGNyZWF0aW5nIGFyZ3VtZW50cy4KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShtX2dyYXBoW25vZGUuY2hpbGQxKCld
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLmNoaWxk
MSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkgPSBu
b2RlLmNoaWxkcmVuLmNoaWxkMigpOwotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGls
ZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0
T3BBbmREZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudEJ5VmFsKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmRleElu
QmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vdyB0aGF0IGl0J3Mg
YSBHZXRNeUFyZ3VtZW50QnlWYWwuCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5
TW9kZSgpICE9IEFycmF5OjpBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
Y2FuIGJlIHNpbXBsaWZpZWQgdG8gR2V0TXlBcmd1bWVudEJ5VmFsIGlmIHdlIGtub3cgdGhhdAor
ICAgICAgICAgICAgICAgICAgICAvLyBpdCBzYXRpc2ZpZXMgZWl0aGVyIGNvbmRpdGlvbiAoMSkg
b3IgKDIpOgorICAgICAgICAgICAgICAgICAgICAvLyAxKSBJdHMgZmlyc3QgY2hpbGQgaXMgYSB2
YWxpZCBBcmd1bWVudHNBbGlhc2luZ0RhdGEgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAv
LyAgICBJbmxpbmVDYWxsRnJhbWUqIGlzIG5vdCBtYXJrZWQgYXMgY3JlYXRpbmcgYXJndW1lbnRz
LgorICAgICAgICAgICAgICAgICAgICAvLyAyKSBJdHMgZmlyc3QgY2hpbGQgaXMgQ3JlYXRlQXJn
dW1lbnRzIGFuZCBpdHMgSW5saW5lQ2FsbEZyYW1lKgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICBpcyBub3QgbWFya2VkIGFzIGNyZWF0aW5nIGFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEo
KSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkgPSBub2RlLmNo
aWxkcmVuLmNoaWxkMigpOworICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxk
MigpID0gRWRnZSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZs
YWdzKEdldE15QXJndW1lbnRCeVZhbCk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAtLWluZGV4SW5CbG9jazsgLy8gRm9yY2UgcmVjb25z
aWRlcmF0aW9uIG9mIHRoaXMgb3Agbm93IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRCeVZhbC4K
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50c0xlbmd0aDogewor
ICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBcnJheU1vZGUuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0FycmF5OjpNb2RlIGZyb21PYnNl
cnZlZChBcnJheU1vZGVzIG1vZGVzLCBib29sIG1ha2VTYWZlKQoreworICAgIC8vIEZJWE1FOiB3
ZSBtYXkgd2FudCB0byBhZGQgc29tZSBwb2x5bW9ycGhpYyBzdXBwb3J0IGluIHRoZSBmdXR1cmUu
IFRoYXQncyB3aHkgdGhpcworICAgIC8vIGlzIGEgc3dpdGNoIHN0YXRlbWVudCByaWdodCBub3cu
CisgICAgCisgICAgc3dpdGNoIChtb2RlcykgeworICAgIGNhc2UgMDoKKyAgICAgICAgcmV0dXJu
IEFycmF5OjpVbmRlY2lkZWQ7CisgICAgY2FzZSBJc0pTQXJyYXk6CisgICAgICAgIHJldHVybiBt
YWtlU2FmZSA/IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMgOiBBcnJheTo6SlNBcnJheTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBpcyBwb3NzaWJseSBhIGtp
bmQgb2YgYXJyYXkgZm9yIHdoaWNoLCB0aG91Z2ggdGhlcmUgaXMgbm8KKyAgICAgICAgLy8gdXNl
ZnVsIGRhdGEgaW4gdGhlIGFycmF5IHByb2ZpbGUsIHdlIG1heSBiZSBhYmxlIHRvIGV4dHJhY3Qg
dXNlZnVsIGRhdGEgZnJvbQorICAgICAgICAvLyB0aGUgdmFsdWUgcHJvZmlsZXMgb2YgdGhlIGlu
cHV0cy4gSGVuY2UsIHdlIGxlYXZlIGl0IGFzIHVuZGVjaWRlZCwgYW5kIGxldAorICAgICAgICAv
LyB0aGUgcHJlZGljdGlvbnMgcHJvcGFnYXRvciBkZWNpZGUgbGF0ZXIuCisgICAgICAgIHJldHVy
biBBcnJheTo6VW5kZWNpZGVkOworICAgIH0KK30KKworQXJyYXk6Ok1vZGUgcmVmaW5lQXJyYXlN
b2RlKEFycmF5OjpNb2RlIGFycmF5TW9kZSwgU3BlY3VsYXRlZFR5cGUgYmFzZSwgU3BlY3VsYXRl
ZFR5cGUgaW5kZXgpCit7CisgICAgaWYgKCFiYXNlIHx8ICFpbmRleCkgeworICAgICAgICAvLyBU
aGUgb25seSBjYXNlIGluIHdoaWNoIHRoZXJlIGNhbiBiZSBubyBwcmVkaWN0aW9ucyBpcyBpZiB0
aGlzIGNvZGUgaGFzbid0CisgICAgICAgIC8vIGV4ZWN1dGVkLCBpbiB3aGljaCBjYXNlIHdlIHNo
b3VsZCBoYXZlIGFscmVhZHkgc2V0IHRoaXMgdG8gRm9yY2VFeGl0LCBvciBpdAorICAgICAgICAv
LyBzaG91bGQgaGF2ZSBiZWVuIHNldCB0byBVbmRlY2lkZWQuCisgICAgICAgIEFTU0VSVChhcnJh
eU1vZGUgPT0gQXJyYXk6OkZvcmNlRXhpdCB8fCBhcnJheU1vZGUgPT0gQXJyYXk6OlVuZGVjaWRl
ZCk7CisgICAgICAgIHJldHVybiBBcnJheTo6Rm9yY2VFeGl0OworICAgIH0KKyAgICAKKyAgICBp
ZiAoIWlzSW50MzJTcGVjdWxhdGlvbihpbmRleCkgfHwgIWlzQ2VsbFNwZWN1bGF0aW9uKGJhc2Up
KQorICAgICAgICByZXR1cm4gQXJyYXk6OkdlbmVyaWM7CisgICAgCisgICAgLy8gUGFzcyB0aHJv
dWdoIGFueSBhcnJheSBtb2RlcyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBkZWNpZGVkIGJ5IHRoZSBh
cnJheSBwcm9maWxlLCBzaW5jZQorICAgIC8vIHRoZSBwcmVkaWN0aW9ucyBvZiB0aGUgaW5wdXRz
IHdpbGwgbm90IHRlbGwgdXMgYW55dGhpbmcgdXNlZnVsIHRoYXQgd2UgZGlkbid0IGFscmVhZHkK
KyAgICAvLyBnZXQgZnJvbSB0aGUgYXJyYXkgcHJvZmlsZS4KKyAgICBzd2l0Y2ggKGFycmF5TW9k
ZSkgeworICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5
OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuIGFy
cmF5TW9kZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
aWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6U3Ry
aW5nOworICAgIAorICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKGJhc2UpKQorICAgICAg
ICByZXR1cm4gQXJyYXk6OkFyZ3VtZW50czsKKyAgICAKKyAgICBpZiAoaXNJbnQ4QXJyYXlTcGVj
dWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpJbnQ4QXJyYXk7CisgICAgCisg
ICAgaWYgKGlzSW50MTZBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJy
YXk6OkludDE2QXJyYXk7CisgICAgCisgICAgaWYgKGlzSW50MzJBcnJheVNwZWN1bGF0aW9uKGJh
c2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OkludDMyQXJyYXk7CisgICAgCisgICAgaWYgKGlz
VWludDhBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OlVpbnQ4
QXJyYXk7CisgICAgCisgICAgaWYgKGlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihiYXNl
KSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVaW50OENsYW1wZWRBcnJheTsKKyAgICAKKyAgICBp
ZiAoaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6
OlVpbnQxNkFycmF5OworICAgIAorICAgIGlmIChpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24oYmFz
ZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6VWludDMyQXJyYXk7CisgICAgCisgICAgaWYgKGlz
RmxvYXQzMkFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6Rmxv
YXQzMkFycmF5OworICAgIAorICAgIGlmIChpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKGJhc2Up
KQorICAgICAgICByZXR1cm4gQXJyYXk6OkZsb2F0NjRBcnJheTsKKyAgICAKKyAgICByZXR1cm4g
QXJyYXk6OkdlbmVyaWM7Cit9CisKK2Jvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFs
dWUmIHZhbHVlLCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1v
ZGUpIHsKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgCisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgcmV0dXJuIGlzU3Ry
aW5nU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6
SlNBcnJheToKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIHJl
dHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAg
ICAgICAgJiYgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmNsYXNz
SW5mbygpID09ICZKU0FycmF5OjpzX2luZm87CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czoKKyAgICAgICAgcmV0dXJuIGlzQXJndW1lbnRzU3BlY3VsYXRpb24odmFsdWUubV90
eXBlKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICByZXR1
cm4gaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBj
YXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gaXNJbnQxNkFycmF5U3BlY3Vs
YXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6SW50MzJBcnJh
eToKKyAgICAgICAgcmV0dXJuIGlzSW50MzJBcnJheVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBp
c1VpbnQ4QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBjYXNl
IEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgcmV0dXJuIGlzVWludDhBcnJheVNw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVpbnQx
NkFycmF5OgorICAgICAgICByZXR1cm4gaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKHZhbHVlLm1f
dHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAgICBy
ZXR1cm4gaXNVaW50MzJBcnJheVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisKKyAgICBjYXNl
IEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgIHJldHVybiBpc0Zsb2F0MzJBcnJheVNwZWN1
bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Cisg
ICAgICAgIHJldHVybiBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7Cisg
ICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1vZGUpCit7CisgICAgc3dp
dGNoIChtb2RlKSB7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICByZXR1cm4g
IlVuZGVjaWRlZCI7CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgcmV0dXJuICJH
ZW5lcmljIjsKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgIHJldHVybiAiRm9y
Y2VFeGl0IjsKKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIHJldHVybiAiU3RyaW5n
IjsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICByZXR1cm4gIkpTQXJyYXkiOwor
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJKU0Fy
cmF5T3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgcmV0
dXJuICJBcmd1bWVudHMiOworICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgcmV0
dXJuICJJbnQ4QXJyYXkiOworICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgIHJl
dHVybiAiSW50MTZBcnJheSI7CisgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAgICAg
cmV0dXJuICJJbnQzMkFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAg
ICByZXR1cm4gIlVpbnQ4QXJyYXkiOworICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAg
ICAgICByZXR1cm4gIlVpbnQxNkFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToK
KyAgICAgICAgcmV0dXJuICJVaW50MzJBcnJheSI7CisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFy
cmF5OgorICAgICAgICByZXR1cm4gIkZsb2F0MzJBcnJheSI7CisgICAgY2FzZSBBcnJheTo6Rmxv
YXQ2NEFycmF5OgorICAgICAgICByZXR1cm4gIkZsb2F0NjRBcnJheSI7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgLy8gQmV0dGVyIHRvIHJldHVybiBzb21ldGhpbmcgdGhlbiBpdCBpcyB0byBjcmFz
aC4gUmVtZW1iZXIsIHRoaXMgbWV0aG9kCisgICAgICAgIC8vIGlzIGJlaW5nIGNhbGxlZCBmcm9t
IG91ciBtYWluIGRpYWdub3N0aWMgdG9vbCwgdGhlIElSIGR1bXBlci4gSXQncyBsaWtlCisgICAg
ICAgIC8vIGEgc3RhY2sgdHJhY2UuIFNvIGlmIHdlIGdldCBoZXJlIHRoZW4gcHJvYmFibHkgc29t
ZXRoaW5nIGhhcyBhbHJlYWR5CisgICAgICAgIC8vIGdvbmUgd3JvbmcuCisgICAgICAgIHJldHVy
biAiVW5rbm93biEiOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQXJyYXlN
b2RlX2gKKyNkZWZpbmUgREZHQXJyYXlNb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKKyNp
bmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK3N0cnVjdCBBYnN0cmFjdFZhbHVlOworCisvLyBVc2UgYSBuYW1lc3BhY2UgKyBlbnVt
IGluc3RlYWQgb2YgZW51bSBhbG9uZSB0byBhdm9pZCB0aGUgbmFtZXNwYWNlIGNvbGxpc2lvbgor
Ly8gdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIsIHNpbmNlIHdlIHNheSB0aGluZ3MgbGlrZSAi
SW50OEFycmF5IiBhbmQgIkpTQXJyYXkiCisvLyBpbiBsb3RzIG9mIG90aGVyIHBsYWNlcywgdG8g
bWVhbiBzdWJ0bHkgZGlmZmVyZW50IHRoaW5ncy4KK25hbWVzcGFjZSBBcnJheSB7CitlbnVtIE1v
ZGUgeworICAgIFVuZGVjaWRlZCwgLy8gSW1wbGllcyB0aGF0IHdlIG5lZWQgcHJlZGljdGlvbnMg
dG8gZGVjaWRlLiBXZSB3aWxsIG5ldmVyIGdldCB0byB0aGUgYmFja2VuZCBpbiB0aGlzIG1vZGUu
CisgICAgRm9yY2VFeGl0LCAvLyBJbXBsaWVzIHRoYXQgd2UgaGF2ZSBubyBpZGVhIGhvdyB0byBl
eGVjdXRlIHRoaXMgb3BlcmF0aW9uLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgorICAgIEdl
bmVyaWMsCisgICAgU3RyaW5nLAorICAgIEpTQXJyYXksCisgICAgSlNBcnJheU91dE9mQm91bmRz
LAorICAgIEFyZ3VtZW50cywKKyAgICBJbnQ4QXJyYXksCisgICAgSW50MTZBcnJheSwKKyAgICBJ
bnQzMkFycmF5LAorICAgIFVpbnQ4QXJyYXksCisgICAgVWludDhDbGFtcGVkQXJyYXksCisgICAg
VWludDE2QXJyYXksCisgICAgVWludDMyQXJyYXksCisgICAgRmxvYXQzMkFycmF5LAorICAgIEZs
b2F0NjRBcnJheQorfTsKK30gLy8gbmFtZXNwYWNlIEFycmF5CisKK0FycmF5OjpNb2RlIGZyb21P
YnNlcnZlZChBcnJheU1vZGVzIG1vZGVzLCBib29sIG1ha2VTYWZlKTsKKworQXJyYXk6Ok1vZGUg
cmVmaW5lQXJyYXlNb2RlKEFycmF5OjpNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxh
dGVkVHlwZSBpbmRleCk7CisKK2Jvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUm
LCBBcnJheTo6TW9kZSk7CisKK2NvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7
CisKK2lubGluZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorewor
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAg
IGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworaW5saW5lIEFycmF5OjpNb2RlIG1v
ZGVGb3JQdXQoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2Rl
KSB7CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICByZXR1cm4gQXJyYXk6OkdlbmVy
aWM7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Cisg
ICAgICAgIHJldHVybiBBcnJheTo6R2VuZXJpYzsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBhcnJheU1vZGU7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBtb2Rlc0NvbXBh
dGlibGVGb3JTdG9yYWdlTG9hZChBcnJheTo6TW9kZSBsZWZ0LCBBcnJheTo6TW9kZSByaWdodCkK
K3sKKyAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgYm9vbCBsZWZ0SXNKU0FycmF5ID0KKyAgICAgICAgbGVmdCA9PSBBcnJheTo6SlNBcnJheQor
ICAgICAgICB8fCBsZWZ0ID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM7CisgICAgCisgICAg
Ym9vbCByaWdodElzSlNBcnJheSA9CisgICAgICAgIHJpZ2h0ID09IEFycmF5OjpKU0FycmF5Cisg
ICAgICAgIHx8IHJpZ2h0ID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM7CisgICAgCisgICAg
aWYgKGxlZnRJc0pTQXJyYXkgJiYgcmlnaHRJc0pTQXJyYXkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRz
TGVuZ3RoKEFycmF5OjpNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2Fz
ZSBBcnJheTo6VW5kZWNpZGVkOgorICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICBjYXNl
IEFycmF5OjpHZW5lcmljOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0FycmF5TW9kZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0FycmF5TW9kZS5oIgogI2luY2x1
ZGUgIkRGR0J5dGVDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKICNp
bmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCkBAIC04MTYsNiArODE3LDM1IEBAIHByaXZhdGU6CiAg
ICAgewogICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbihtX2dyYXBoLnNpemUoKSwgbV9jdXJy
ZW50UHJvZmlsaW5nSW5kZXgpOwogICAgIH0KKyAgICAKKyAgICBBcnJheTo6TW9kZSBnZXRBcnJh
eU1vZGVXaXRob3V0T1NSRXhpdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBOb2Rl
SW5kZXggYmFzZSkKKyAgICB7CisgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAgICAgcHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CisgICAgICAgIGlmIChwcm9maWxlLT5oYXNEZWZpbml0ZVN0
cnVjdHVyZSgpKQorICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwg
YmFzZSk7CisgICAgICAgIAorI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKKyAgICAgICAgZGF0YUxvZygiU2xvdyBjYXNlIHByb2ZpbGUgZm9yIGJjIyV1OiAldVxuIiwg
bV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+cmFyZUNh
c2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIpOwor
ICAgICAgICBkYXRhTG9nKCJBcnJheSBwcm9maWxlIGZvciBiYyMldTogJXAlcywgJXVcbiIsIG1f
Y3VycmVudEluZGV4LCBwcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpLCBwcm9maWxlLT5zdHJ1
Y3R1cmVJc1BvbHltb3JwaGljKCkgPyAiIChwb2x5bW9ycGhpYykiIDogIiIsIHByb2ZpbGUtPm9i
c2VydmVkQXJyYXlNb2RlcygpKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgYm9vbCBtYWtl
U2FmZSA9CisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNv
dWxkVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQorICAgICAgICAgICAgfHwgbV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3V0T2ZC
b3VuZHMpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZyb21PYnNlcnZlZChwcm9maWxlLT5v
YnNlcnZlZEFycmF5TW9kZXMoKSwgbWFrZVNhZmUpOworICAgIH0KKyAgICAKKyAgICBBcnJheTo6
TW9kZSBnZXRBcnJheU1vZGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZUlu
ZGV4IGJhc2UpCisgICAgeworICAgICAgICBBcnJheTo6TW9kZSByZXN1bHQgPSBnZXRBcnJheU1v
ZGVXaXRob3V0T1NSRXhpdChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhc2UpOworICAgICAgICAKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBBcnJheTo6Rm9yY2VFeGl0KQorICAgICAgICAgICAgYWRkVG9H
cmFwaChGb3JjZU9TUkV4aXQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CiAKICAgICBOb2RlSW5kZXggbWFrZVNhZmUoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7
CkBAIC0xNTQ4LDggKzE1NzgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWMoYm9vCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpbnQg
aW5kZXhPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsKLSAg
ICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2UsIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7Ci0gICAg
ICAgIE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwgZ2V0
KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJhbmQpLCBzdG9yYWdlKTsKKyAgICAg
ICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcElu
Zm8oQXJyYXk6OlN0cmluZyksIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVy
YW5kKSk7CiAKICAgICAgICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0
T3BlcmFuZCwgY2hhckNvZGUpOwpAQCAtMTU2NSw4ICsxNTk0LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIGludCBpbmRleE9wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVy
YW5kKDEpOwotICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJh
bmQpKTsKLSAgICAgICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFy
QXQsIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSwgc3RvcmFnZSk7
CisgICAgICAgIE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBP
cEluZm8oQXJyYXk6OlN0cmluZyksIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhP
cGVyYW5kKSk7CiAKICAgICAgICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVz
dWx0T3BlcmFuZCwgY2hhckNvZGUpOwpAQCAtMjE0OCwxMyArMjE3Niw5IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFzZSk7CiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7Ci0gICAg
ICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAg
IGlmIChwcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChw
cm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZSwgYmFzZSwgcHJvcGVydHkpOwotICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0gYWRk
VG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHBy
b3BlcnR5LCBwcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFs
ID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgYmFzZSwgcHJvcGVydHkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIGdldEJ5VmFsKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Z2V0X2J5X3ZhbCk7CkBAIC0yMTYyLDI2ICsyMTg2LDE2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKICAg
ICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOworCisgICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1v
ZGUoY3VycmVudEluc3RydWN0aW9uLCBiYXNlKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAg
Tm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OwogICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7Ci0gICAgICAgICAg
ICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChw
cm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwcm9maWxl
LT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotCi0jaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZygiU2xvdyBjYXNlIHByb2Zp
bGUgZm9yIGJjIyV1OiAldVxuIiwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50
SW5kZXgpLT5tX2NvdW50ZXIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIGJvb2wgbWFrZVNhZmUg
PQotICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Y291
bGRUYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCi0gICAgICAgICAgICAgICAgfHwgbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3V0
T2ZCb3VuZHMpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNl
KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKICAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKHZhbHVlKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBtYWtlU2FmZSA/IFB1dEJ5VmFsU2FmZSA6IFB1dEJ5VmFsLCBPcEluZm8oMCksIE9wSW5mbygw
KSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgUHV0QnlWYWwsIE9wSW5m
byhhcnJheU1vZGUpLCBPcEluZm8oMCkpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9w
dXRfYnlfdmFsKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDEyNjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsOCArMjg0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGNhc2Ug
UHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxTYWZlOiB7CisgICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgu
YnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkgPT0gY2hpbGQx
ICYmIGNhbm9uaWNhbGl6ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSA9PSBjYW5vbmlj
YWxpemUoY2hpbGQyKSkKQEAgLTM2NSw3ICszNjQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczoKLSAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxTYWZlOgogICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRo
IGFuCiAgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBv
c3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQpAQCAtNDA5LDcgKzQwNyw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAg
ICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbFNh
ZmU6CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNj
ZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBp
bmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCkBA
IC01MTUsNyArNTEyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZh
bElzUHVyZShub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVj
dWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAgICAg
ICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8g
Y2F1c2UgYSBzdHJ1Y3R1cmUKQEAgLTU2MCw3ICs1NTYsNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAg
ICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3Npbmcg
YW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0
aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKQEAgLTYxMyw3
ICs2MDgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxTYWZlOgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJl
KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMg
dGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAgICAgICAgICAg
IC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBh
IHN0cnVjdHVyZQpAQCAtOTI1LDE3ICs5MTksNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFy
aXRoTWluOgogICAgICAgICBjYXNlIEFyaXRoTWF4OgogICAgICAgICBjYXNlIEFyaXRoU3FydDoK
LSAgICAgICAgY2FzZSBHZXRJbnQ4QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0SW50MTZB
cnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRJbnQzMkFycmF5TGVuZ3RoOgotICAgICAgICBj
YXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0VWludDhDbGFtcGVkQXJy
YXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0VWludDE2QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNh
c2UgR2V0VWludDMyQXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0RmxvYXQzMkFycmF5TGVu
Z3RoOgotICAgICAgICBjYXNlIEdldEZsb2F0NjRBcnJheUxlbmd0aDoKICAgICAgICAgY2FzZSBH
ZXRDYWxsZWU6Ci0gICAgICAgIGNhc2UgR2V0U3RyaW5nTGVuZ3RoOgogICAgICAgICBjYXNlIFN0
cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNl
IEludDMyVG9Eb3VibGU6CkBAIC0xMTAzLDggKzEwODcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNlIFB1dEJ5
VmFsU2FmZTogeworICAgICAgICBjYXNlIFB1dEJ5VmFsOiB7CiAgICAgICAgICAgICBFZGdlIGNo
aWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgICAgICBFZGdlIGNo
aWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAgICBpZiAoaXNB
Y3Rpb25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24obV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rp
b24oKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkocmV2aXNpb24gMTI2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsOTcgKzc0LDg5IEBAIHByaXZhdGU6CiAg
ICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgR2V0QnlJZDogewor
ICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZub2RlOworICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVk
aWN0aW9uKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGNvZGVC
bG9jaygpLT5pZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRh
KCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgYm9vbCBpc0FycmF5ID0gaXNBcnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGJvb2wgaXNBcmd1bWVudHMgPSBpc0Fy
Z3VtZW50c1NwZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsK
LSAgICAgICAgICAgIGJvb2wgaXNTdHJpbmcgPSBpc1N0cmluZ1NwZWN1bGF0aW9uKG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGJvb2wgaXNJbnQ4QXJy
YXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpOwot
ICAgICAgICAgICAgYm9vbCBpc0ludDE2QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNo
b3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNJbnQzMkFycmF5
ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCk7Ci0g
ICAgICAgICAgICBib29sIGlzVWludDhBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hv
dWxkU3BlY3VsYXRlVWludDhBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc1VpbnQ4Q2xhbXBl
ZEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OENsYW1w
ZWRBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc1VpbnQxNkFycmF5ID0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpOwotICAgICAgICAgICAgYm9v
bCBpc1VpbnQzMkFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVV
aW50MzJBcnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc0Zsb2F0MzJBcnJheSA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCk7Ci0gICAgICAgICAg
ICBib29sIGlzRmxvYXQ2NEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVj
dWxhdGVGbG9hdDY0QXJyYXkoKTsKLSAgICAgICAgICAgIGlmICghaXNBcnJheSAmJiAhaXNBcmd1
bWVudHMgJiYgIWlzU3RyaW5nICYmICFpc0ludDhBcnJheSAmJiAhaXNJbnQxNkFycmF5ICYmICFp
c0ludDMyQXJyYXkgJiYgIWlzVWludDhBcnJheSAmJiAhaXNVaW50OENsYW1wZWRBcnJheSAmJiAh
aXNVaW50MTZBcnJheSAmJiAhaXNVaW50MzJBcnJheSAmJiAhaXNGbG9hdDMyQXJyYXkgJiYgIWlz
RmxvYXQ2NEFycmF5KQorICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5v
ZGVQdHItPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAg
QCV1IC0+ICVzIiwgbV9jb21waWxlSW5kZXgsIGlzQXJyYXkgPyAiR2V0QXJyYXlMZW5ndGgiIDog
IkdldFN0cmluZ0xlbmd0aCIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoaXNBcnJheSkgewot
ICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAg
ICAgIEFTU0VSVChub2RlLmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAg
ICAgICBub2RlLmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICAgICAg
bV9ncmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLmNvZGVPcmlnaW4pLT5nZXRBcnJh
eVByb2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcnJheVByb2ZpbGUpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUg
PSAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGVQdHIt
PmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGVQ
dHItPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBBcnJheTo6TW9kZSBh
cnJheU1vZGUgPSBBcnJheTo6VW5kZWNpZGVkOworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmls
ZSkgewogICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3Ry
dWN0dXJlKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIG1f
Z3JhcGgucmVmKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIE5vZGUgY2hlY2tTdHJ1
Y3R1cmUoQ2hlY2tTdHJ1Y3R1cmUsIG5vZGUuY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBub2RlLmNo
aWxkMSgpLmluZGV4KCkpOwotICAgICAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlLnJlZigpOwot
ICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGVja1N0cnVjdHVyZUluZGV4ID0gbV9ncmFwaC5z
aXplKCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2luZGV4SW5CbG9jaywgY2hl
Y2tTdHJ1Y3R1cmVJbmRleCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgYXJyYXlNb2RlID0gcmVmaW5lQXJyYXlNb2RlKAorICAgICAgICAgICAgICAgICAgICBmcm9t
T2JzZXJ2ZWQoYXJyYXlQcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSwgZmFsc2UpLAorICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKKyAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKTsg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChtb2RlU3VwcG9ydHNMZW5n
dGgoYXJyYXlNb2RlKQorICAgICAgICAgICAgICAgICAgICAmJiBhcnJheVByb2ZpbGUtPmhhc0Rl
ZmluaXRlU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobm9k
ZVB0ci0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJl
KENoZWNrU3RydWN0dXJlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIG5vZGVQdHIt
PmNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5y
ZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlSW5kZXgg
PSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoY2hl
Y2tTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQo
bV9pbmRleEluQmxvY2ssIGNoZWNrU3RydWN0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgICAg
ICBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gcmVmaW5l
QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgICAgICBhcnJheU1vZGUsCisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAorICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGlzQXJndW1lbnRzKQotICAgICAgICAgICAgICAgIG5vZGUu
c2V0T3AoR2V0QXJndW1lbnRzTGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzU3RyaW5n
KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0U3RyaW5nTGVuZ3RoKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGlzSW50OEFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0
SW50OEFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50MTZBcnJheSkKLSAg
ICAgICAgICAgICAgICBub2RlLnNldE9wKEdldEludDE2QXJyYXlMZW5ndGgpOwotICAgICAgICAg
ICAgZWxzZSBpZiAoaXNJbnQzMkFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0
SW50MzJBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1VpbnQ4QXJyYXkpCi0g
ICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRVaW50OEFycmF5TGVuZ3RoKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGlzVWludDhDbGFtcGVkQXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5z
ZXRPcChHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChp
c1VpbnQxNkFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0VWludDE2QXJyYXlM
ZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50MzJBcnJheSkKLSAgICAgICAgICAg
ICAgICBub2RlLnNldE9wKEdldFVpbnQzMkFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGlzRmxvYXQzMkFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0RmxvYXQz
MkFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzRmxvYXQ2NEFycmF5KQotICAg
ICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0RmxvYXQ2NEFycmF5TGVuZ3RoKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIC8vIE5vIGxvbmdlciBNdXN0R2VuZXJhdGUKLSAgICAgICAgICAgIEFTU0VSVChub2RlLmZs
YWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgIG5vZGUuY2xlYXJGbGFncyhO
b2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgIGlmICghbW9kZVN1cHBvcnRzTGVuZ3RoKGFy
cmF5TW9kZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBub2RlUHRyLT5z
ZXRPcChHZXRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+ZmxhZ3Mo
KSAmIE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZVB0ci0+Y2xlYXJGbGFncyhO
b2RlTXVzdEdlbmVyYXRlKTsKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVk
aWN0aW9uKCkKLSAgICAgICAgICAgICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMigpXS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgbm9k
ZS5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xl
YXJBbmREZXJlZkNoaWxkMShub2RlKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5k
RGVyZWZDaGlsZDIobm9kZSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVm
Q2hpbGQzKG5vZGUpOwotICAgICAgICAgICAgICAgIG5vZGUuc2V0UmVmQ291bnQoMCk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBub2RlLnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAg
ICByZWZpbmVBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCks
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
LAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24o
KSkpOworICAgICAgICAgICAgLy8gUHJlZGljdGlvbnMgc2hvdWxkIG9ubHkgYmVjb21lIG1vcmUs
IHJhdGhlciB0aGFuIGxlc3MsIHJlZmluZWQuIEhlbmNlCisgICAgICAgICAgICAvLyBpZiB3ZSB3
ZXJlIGV2ZXIgYWJsZSB0byBDU0UgdGhlIHN0b3JhZ2UgcG9pbnRlciBmb3IgdGhpcyBvcGVyYXRp
b24sCisgICAgICAgICAgICAvLyB0aGVuIHdlIHNob3VsZCBhbHdheXMgY29udGludWUgdG8gYmUg
YWJsZSB0byBkbyBzby4KKyAgICAgICAgICAgIEFTU0VSVChjYW5DU0VTdG9yYWdlKG5vZGUuYXJy
YXlNb2RlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
R2V0QnlWYWw6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0cmlu
Z0NoYXJDb2RlQXQ6IHsKLSAgICAgICAgICAgIGlmICghIW5vZGUuY2hpbGQzKCkgJiYgbV9ncmFw
aFtub2RlLmNoaWxkMygpXS5vcCgpID09IE5vcCkKLSAgICAgICAgICAgICAgICBub2RlLmNoaWxk
cmVuLmNoaWxkMygpID0gRWRnZSgpOworICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCisg
ICAgICAgICAgICAgICAgcmVmaW5lQXJyYXlNb2RlKAorICAgICAgICAgICAgICAgICAgICBub2Rl
LmFycmF5TW9kZSgpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigp
XS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGNhbkNTRVN0
b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGls
ZDMoKSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMygp
XS5vcCgpID09IEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobW9kZXNDb21wYXRpYmxlRm9yU3RvcmFnZUxvYWQobV9ncmFwaFtub2RlLmNoaWxk
MygpXS5hcnJheU1vZGUoKSwgbm9kZS5hcnJheU1vZGUoKSkpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgdGhl
IG5vZGUgcmVmZXJlbmNlIGFmdGVyIHdlIGRvIHRoZSBhcHBlbmQuCisgICAgICAgICAgICAgICAg
ICAgIE5vZGUgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIG5vZGUuY29kZU9yaWdpbiwgT3BJbmZvKG5v
ZGUuYXJyYXlNb2RlKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZDEoKS5p
bmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBFZGdlKGdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBw
ZW5kKGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIG4gPSAyOyBuLS07KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5y
ZWYoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBnZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlSW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gU2VlIGFib3ZlLiBDb250aW51ZWQgZml4dXAgb2YgdGhlIGdyYXBo
IHNob3VsZCBub3QgcmVncmVzcyBvdXIgYWJpbGl0eQorICAgICAgICAgICAgICAgIC8vIHRvIHNw
ZWN1bGF0ZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUuY2hpbGQzKCkpOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
MzMzLDI2ICszMjUsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgY2FzZSBQdXRC
eVZhbFNhZmU6IHsKKyAgICAgICAgY2FzZSBQdXRCeVZhbDogewogICAgICAgICAgICAgRWRnZSBj
aGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICAgICAgRWRnZSBj
aGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwogICAgICAgICAgICAgRWRnZSBj
aGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgaWYgKCFt
X2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW2NoaWxkMl0ucHJlZGljdGlv
bigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFtX2dyYXBoW2No
aWxkMl0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgaWYgKGlzQWN0aW9uYWJsZUludE11dGFibGVBcnJheVNwZWN1bGF0aW9uKG1f
Z3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQzXS5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgcmVmaW5lQXJyYXlN
b2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLCBtX2dyYXBoW2NoaWxk
MV0ucHJlZGljdGlvbigpLCBtX2dyYXBoW2NoaWxkMl0ucHJlZGljdGlvbigpKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKSkg
eworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICAgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJh
eToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgogICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzQWN0
aW9uYWJsZUZsb2F0TXV0YWJsZUFycmF5U3BlY3VsYXRpb24obV9ncmFwaFtjaGlsZDFdLnByZWRp
Y3Rpb24oKSkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKICAgICAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDIpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTI2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw2ICsyMTEsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcChj
b25zdCBjaGFyKiBwcmVmaXgsIE5vZAogICAgICAgICBkYXRhTG9nKCIlcyVzIiwgaGFzUHJpbnRl
ZCA/ICIsICIgOiAiIiwgbm9kZUZsYWdzQXNTdHJpbmcobm9kZS5mbGFncygpKSk7CiAgICAgICAg
IGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KKyAgICBpZiAobm9kZS5oYXNBcnJheU1vZGUoKSkg
eworICAgICAgICBkYXRhTG9nKCIlcyVzIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbW9kZVRv
U3RyaW5nKG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Cisg
ICAgfQogICAgIGlmIChub2RlLmhhc1Zhck51bWJlcigpKSB7CiAgICAgICAgIGRhdGFMb2coIiVz
dmFyJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLnZhck51bWJlcigpKTsKICAgICAg
ICAgaGFzUHJpbnRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCShyZXZpc2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw0OCArNDg4LDIwIEBAIHB1YmxpYzoKICAgICAK
ICAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUmIG5vZGUpCiAgICAgewotICAgICAgICBzd2l0Y2gg
KG5vZGUub3AoKSkgewotICAgICAgICBjYXNlIFB1dEJ5VmFsOiB7Ci0gICAgICAgICAgICBpZiAo
IWF0KHZhckFyZ0NoaWxkKG5vZGUsIDEpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiA9IGF0KHZhckFyZ0NoaWxkKG5vZGUsIDApKS5wcmVkaWN0aW9uKCk7Ci0gICAgICAg
ICAgICBpZiAoIWlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbFNhZmU6IHsK
LSAgICAgICAgICAgIGlmICghYXQodmFyQXJnQ2hpbGQobm9kZSwgMSkpLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gYXQodmFyQXJnQ2hpbGQobm9kZSwgMCkpLnByZWRp
Y3Rpb24oKTsKLSAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlTXV0YWJsZUFycmF5U3BlY3Vs
YXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgaWYgKGlzQXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICAgICAgaWYg
KCFhdCh2YXJBcmdDaGlsZChub2RlLCAxKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBhdCh2YXJBcmdDaGlsZChub2RlLCAwKSkucHJlZGljdGlvbigpOwotICAgICAg
ICAgICAgaWYgKCFpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0aW9u
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAg
ICAgICAgICAgIGlmICghYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24gPSBhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCk7Ci0gICAgICAg
ICAgICBpZiAoIWlzQWN0aW9uYWJsZUFycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAg
ICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQXJyYXk6
OlN0cmluZzoKKyAgICAgICAgICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAg
ICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRCeVZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCkBAIC01NDksNyArNTIxLDYgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuICFpc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKTsKICAgICAgICAgY2FzZSBHZXRCeVZh
bDoKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgY2FzZSBQdXRCeVZhbFNhZmU6CiAg
ICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgICAgIHJldHVybiAhYnlWYWxJc1B1
cmUobm9kZSk7CiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTI2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHQWRqYWNlbmN5
TGlzdC5oIgorI2luY2x1ZGUgIkRGR0FycmF5TW9kZS5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5o
IgogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCkBA
IC03MzIsNiArNzMzLDM0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZv
OwogICAgIH0KICAgICAKKyAgICBib29sIGhhc0FycmF5TW9kZSgpCisgICAgeworICAgICAgICBz
d2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgor
ICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAg
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAg
IGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBBcnJheTo6TW9kZSBhcnJheU1v
ZGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FycmF5TW9kZSgpKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEFycmF5OjpNb2RlPihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0QXJyYXlNb2RlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChoYXNBcnJheU1vZGUoKSk7CisgICAgICAgIG1fb3BJbmZvID0gYXJyYXlNb2RlOwor
ICAgIH0KKyAgICAKICAgICBib29sIGhhc1ZpcnR1YWxSZWdpc3RlcigpCiAgICAgewogICAgICAg
ICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEyNjI3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTEzLDcgKzExMyw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
ICAgICAvKiBvcGNvZGVzIHVzZSBWYXJBcmdzIGJlYXVzZSB0aGV5IG1heSBoYXZlIHVwIHRvIDQg
Y2hpbGRyZW4uICovXAogICAgIG1hY3JvKEdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKFB1dEJ5VmFsLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCi0gICAg
bWFjcm8oUHV0QnlWYWxTYWZlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBO
b2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKEdl
dEJ5SWQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3Js
ZCkgXAogICAgIG1hY3JvKEdldEJ5SWRGbHVzaCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCkBAIC0xNDMsMTcgKzE0Miw2IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3Vs
dEpTKSBcCiAgICAgbWFjcm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhHZXRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0QXJn
dW1lbnRzTGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRTdHJpbmdMZW5n
dGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKEdldEludDhBcnJheUxlbmd0aCwgTm9k
ZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0SW50MTZBcnJheUxlbmd0aCwgTm9kZVJlc3Vs
dEludDMyKSBcCi0gICAgbWFjcm8oR2V0SW50MzJBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMy
KSBcCi0gICAgbWFjcm8oR2V0VWludDhBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0g
ICAgbWFjcm8oR2V0VWludDhDbGFtcGVkQXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAot
ICAgIG1hY3JvKEdldFVpbnQxNkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBt
YWNybyhHZXRVaW50MzJBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8o
R2V0RmxvYXQzMkFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRG
bG9hdDY0QXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEdldFNjb3Bl
Q2hhaW4sIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldFNjb3BlZFZhciwgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dFNjb3BlZFZhciwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTI2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMiwxNyAr
NjEyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEJ5VmFsQWxp
YXM6CiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0QXJndW1l
bnRzTGVuZ3RoOgotICAgICAgICBjYXNlIEdldEludDhBcnJheUxlbmd0aDoKLSAgICAgICAgY2Fz
ZSBHZXRJbnQxNkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEludDMyQXJyYXlMZW5ndGg6
Ci0gICAgICAgIGNhc2UgR2V0VWludDhBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50
OENsYW1wZWRBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRVaW50MTZBcnJheUxlbmd0aDoK
LSAgICAgICAgY2FzZSBHZXRVaW50MzJBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRGbG9h
dDMyQXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOgotICAg
ICAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgog
ICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtl
ZDoKQEAgLTYzNyw3ICs2MjYsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApXS5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhb
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVy
IHwgTm9kZVVzZWRBc0ludCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQxLDEyICsy
MzQxLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9
CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkg
fHwgIWF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSB8fCAhYXQobm9kZS5jaGlsZDIoKSku
cHJlZGljdGlvbigpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAg
ICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmICghYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpIHx8ICgh
bm9kZS5jaGlsZDMoKSAmJiAhYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJndW1l
bnRzKCkpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7IC8vIFNhdmUgYSBy
ZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJpZ2h0LgogICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAg
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC0yMzYxLDEyNSArMjM2Miw5
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRz
OiB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CiAgICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRz
KG5vZGUpOwogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBh
bmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9y
TGVuZ3RoKS4KKyAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRv
IGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAg
ICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCBpdCdzIHNvbWUga2lu
ZCBvZiBhcnJheSwgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKyAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworCisgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgcmVzdWx0VGFnLmdwcigpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCByZXN1bHRUYWcuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkLmdw
cigpKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3Vs
dFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSA9PSBT
cGVjU3RyaW5nKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlSW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6
ZW9mKGludDhfdCksIGlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRB
cnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVz
Y3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlzSW50MTZBcnJheVNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlw
ZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkg
ewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBp
c0ludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNr
cywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVVaW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDog
QWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQobm9kZS5j
aGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkgewotICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWlu
dDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50
OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hl
Y2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVk
VHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50
MzJBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQz
Ml90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
IHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xh
bXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlw
ZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2
QXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQu
Z2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQx
Nl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQz
MkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0KG5vZGUuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBpc1VpbnQxNkFycmF5U3BlY3Vs
YXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJy
YXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MzJB
cnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9q
aXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVp
bnQzMl90KSwgaXNVaW50MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJy
YXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpLCBpc0Zsb2F0MzJBcnJheVNwZWN1
bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzKTsKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSksIGlzRmxvYXQ2
NEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkg
PyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MpOwot
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGls
ZDIoKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMo
KSk7Ci0gICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAg
ICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gQ2hl
Y2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQg
d2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KLSAgICAgICAgLy8gSWYgd2UgaGF2
ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNo
ZWNrLgotICAgICAgICB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdw
cigpOwotICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGVjdWxhdGVkIHRoYXQgaXQncyBz
b21lIGtpbmQgb2YgYXJyYXksIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotCi0gICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1
bHRUYWcuZ3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
cmVzdWx0VGFnLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsK
LSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKLQotICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5VmFsOgotICAg
IGNhc2UgUHV0QnlWYWxTYWZlOiB7CisgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAg
IEVkZ2UgY2hpbGQxID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAg
ICAgRWRnZSBjaGlsZDIgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwogICAg
ICAgICBFZGdlIGNoaWxkMyA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAg
ICAgICAgIAotICAgICAgICBpZiAoIWF0KGNoaWxkMSkucHJlZGljdGlvbigpIHx8ICFhdChjaGls
ZDIpLnByZWRpY3Rpb24oKSkgeworICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBtb2Rl
Rm9yUHV0KG5vZGUuYXJyYXlNb2RlKCkpOworICAgICAgICBib29sIGFscmVhZHlIYW5kbGVkID0g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICBj
YXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUpOworICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghYXQoY2hpbGQyKS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgIHx8IGF0KGNoaWxkMSkuc2hvdWxkU3BlY3Vs
YXRlQXJndW1lbnRzKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAg
ICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBQdXRCeVZhbCk7CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsgLy8gU2F2ZSBh
IHJlZ2lzdGVyLCBzcGVjdWxhdGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUgcmlnaHQuCiAgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIpOwogICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKQEAgLTI0OTMsMjMzICsyNDYz
LDE0NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmlj
dCwgYmFzZUdQUiwgcHJvcGVydHlUYWdHUFIsIHByb3BlcnR5UGF5bG9hZEdQUiwgdmFsdWVUYWdH
UFIsIHZhbHVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBjaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgY2hpbGQyKTsKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxk
U3BlY3VsYXRlSW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgaXNJbnQ4QXJy
YXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgaXNJbnQxNkFycmF5U3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChj
aGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50
MzJfdCksIGlzSW50MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1f
dHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVj
a3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxh
dGVVaW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBpc1VpbnQ4QXJyYXlT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5
VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJy
YXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50OENsYW1wZWRBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhDbGFtcGVkQXJy
YXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVk
QXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRl
VWludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgaXNVaW50MTZBcnJh
eVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJy
YXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkp
IHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbiht
X3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVj
ayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgewotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+
ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKGZsb2F0KSwgaXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVk
QXJyYXlTcGVjQ2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAg
ICAgfQorICAgICAgICBpZiAoYWxyZWFkeUhhbmRsZWQpCisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9q
aXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSwgaXNGbG9hdDY0QXJyYXlTcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNw
ZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAKLSAgICAgICAgfQorICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIGNoaWxkMSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBjaGlsZDIpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgY2hpbGQzKTsKLSAgICAgICAgLy8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFsdWUg
aW50byByZWdpc3RlcnMsIGFsbG9jYXRlIGEgc2NyYXRjaCByZWdpc3Rlci4KICAgICAgICAgR1BS
UmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlVGFnUmVnID0gdmFsdWUudGFnR1BS
KCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAg
ICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWVUYWdSZWcsIGNoaWxkMywgV3JpdGVCYXJy
aWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwotICAgICAgICB9CiAKLSAgICAgICAg
c3BlY3VsYXRlQXJyYXkoY2hpbGQxLCBiYXNlUmVnKTsKKyAgICAgICAgc3BlY3VsYXRlQXJyYXko
YXJyYXlNb2RlLCBjaGlsZDEsIGJhc2VSZWcpOwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgIGlmIChub2RlLm9wKCkg
PT0gUHV0QnlWYWwpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKLQotICAgICAgICBiYXNl
LnVzZSgpOwotICAgICAgICBwcm9wZXJ0eS51c2UoKTsKLSAgICAgICAgdmFsdWUudXNlKCk7Ci0g
ICAgICAgIAotICAgICAgICAvLyBHZXQgdGhlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIEdQUlRl
bXBvcmFyeSBzdG9yYWdlKHRoaXMpOwotICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAg
IHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAotICAgICAgICAvLyBDaGVjayBpZiB3ZSdy
ZSB3cml0aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3Iu
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVU
YWcpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251
bVZhbHVlc0luVmVjdG9yKSkpOwotCi0gICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBo
b2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKLSAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgIG1f
aml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwotICAgICAgICBt
X2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLQotICAgICAgICBsZW5n
dGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG5vdEhvbGVWYWx1ZS5s
aW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4K
LSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIodmFs
dWVQYXlsb2FkUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFs
U2FmZSkgewotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBiZXlvbmRBcnJheUJvdW5kcywg
dGhpcywKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlv
blB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCi0gICAgICAgICAgICAgICAgICAg
IE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9h
ZFJlZykpOwotICAgICAgICB9CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVUYWdSZWcgPSB2YWx1
ZS50YWdHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcgPSB2YWx1ZS5w
YXlsb2FkR1BSKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICBFZGdlIGNoaWxkMSA9IG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgICAgIEVkZ2UgY2hpbGQyID0gbV9q
aXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBt
X2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAKLSAgICAgICAgaWYg
KCFhdChjaGlsZDEpLnByZWRpY3Rpb24oKSB8fCAhYXQoY2hpbGQyKS5wcmVkaWN0aW9uKCkpIHsK
LSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3Zl
cmFnZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoaXNBY3Rpb25hYmxlTXV0YWJsZUFycmF5U3Bl
Y3VsYXRpb24oYXQoY2hpbGQxKS5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgQVNTRVJUKGF0KGNo
aWxkMikuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKTsKLQotICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7Ci0gICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIpOwotCi0gICAgICAgIGlmIChhdChjaGlsZDEp
LnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIE5v
VHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGls
ZDEpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNj
cmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZf
dCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChh
dChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
aW50MzJfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkgewotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YodWludDhfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigp
OworICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZVRhZ1JlZywgY2hp
bGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaFJlZyk7CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDhDbGFt
cGVkQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBOb1R5cGVkQXJy
YXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0gICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0
QnlWYWxBbGlhcykgeworICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4K
KyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICAgICAgICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojpz
dG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgorICAgICAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIodmFsdWUudGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFs
dWUucGF5bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkp
IHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWlu
dDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgTm9UeXBlZEFycmF5U3Bl
Y0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRT
cGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
RmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSwgTm9U
eXBlZEFycmF5U3BlY0NoZWNrKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgp
KSk7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlID09IEFycmF5OjpKU0FycmF5KQorICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBiYXNl
LnVzZSgpOworICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CisgICAgICAgICAgICB2YWx1ZS51
c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBzdG9yYWdl
LgorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZz
ZXQoKSksIHN0b3JhZ2VSZWcpOworCisgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSB3cml0
aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
bnVtVmFsdWVzSW5WZWN0b3IpKSk7CisKKyAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcg
dG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgp
KSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVn
KTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVu
Z3RoKSkpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0
eVJlZyk7CisKKyAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgICAg
IC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHZhbHVlVGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkUmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Cisg
ICAgICAgIAorICAgICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheU91dE9m
Qm91bmRzKSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJleW9u
ZEFycmF5Qm91bmRzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJs
b2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5k
c1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZh
bHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpIHsKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZihkb3VibGUpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spOwotICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIGJyZWFrOyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBhdCBzb21lIHBv
aW50IG1ha2UgdGhpcyB3b3JrLiBSaWdodCBub3cgd2UncmUgYXNzdW1pbmcgdGhhdCB0aGUgcmVn
aXN0ZXIKKyAgICAgICAgICAgIC8vIHByZXNzdXJlIHdvdWxkIGJlIHRvbyBncmVhdC4KKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURl
c2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQ4
X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90
KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCks
IFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVk
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJh
eToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQu
Z2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXko
bV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKGF0KGNoaWxkMSku
c2hvdWxkU3BlY3VsYXRlQXJyYXkoKSk7Ci0KLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgY2hpbGQzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgYmFzZSk7
Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLQotICAgICAgICB3cml0ZUJhcnJp
ZXIoYmFzZVJlZywgdmFsdWUudGFnR1BSKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVy
dHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwotCi0gICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFn
ZS4KLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwotICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3Jh
Z2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCi0gICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0
byB0aGUgYXJyYXkuCi0gICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwotICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgbV9qaXQuc3RvcmUz
Mih2YWx1ZS5wYXlsb2FkR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpKTsKLQotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjc4Nyw3ICsyNjY4LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgd3JpdGVCYXJyaWVy
KGJhc2VHUFIsIHZhbHVlVGFnR1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9w
ZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIH0K
IAotICAgICAgICBzcGVjdWxhdGVBcnJheShub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKKyAgICAg
ICAgc3BlY3VsYXRlQXJyYXkoQXJyYXk6OkpTQXJyYXksIG5vZGUuY2hpbGQxKCksIGJhc2VHUFIp
OwogICAgICAgICAKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgICAg
IEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKQEAgLTI4MjcsNyArMjcwOCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0
aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGVB
cnJheShub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKKyAgICAgICAgc3BlY3VsYXRlQXJyYXkoQXJy
YXk6OkpTQXJyYXksIG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOwogICAgICAgICAKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojpz
dG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwpAQCAtMzM3Myw4MiArMzI1NCwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9k
ZS5jaGlsZDEoKSwgYmFzZUdQUik7Ci0gICAgICAgIAotICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0g
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgCi0gICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAg
Ci0gICAgY2FzZSBHZXRBcmd1bWVudHNMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldEFyZ3Vt
ZW50c0xlbmd0aChub2RlKTsKKyAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICBjb21w
aWxlR2V0QXJyYXlMZW5ndGgobm9kZSk7CiAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNh
c2UgR2V0U3RyaW5nTGVuZ3RoOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IWlzU3RyaW5nU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNT
dHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwotCi0gICAgICAgIGludGVnZXJS
ZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGNhc2UgR2V0SW50OEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBl
ZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCAhaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldEludDE2QXJy
YXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xv
YmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNJbnQxNkFycmF5U3Bl
Y3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRJbnQzMkFycmF5TGVuZ3RoOiB7Ci0gICAgICAg
IGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzSW50MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgR2V0VWludDhBcnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJh
eUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
ICFpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldFVpbnQ4Q2xhbXBl
ZEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0
Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc1Vp
bnQ4Q2xhbXBlZEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRVaW50MTZBcnJh
eUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9i
YWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNVaW50MTZBcnJheVNw
ZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0VWludDMyQXJyYXlMZW5ndGg6IHsKLSAgICAg
ICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEdldEZsb2F0MzJBcnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlw
ZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3Io
KSwgbm9kZSwgIWlzRmxvYXQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRG
bG9hdDY0QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0Zs
b2F0NjRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCiAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOiB7
CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1bmN0aW9uKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBmdW5jdGlv
bi5ncHIoKSwgbm9kZS5mdW5jdGlvbigpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyNjI3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNzQsMTIgKzIzNzQsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAg
aWYgKCFub2RlLnByZWRpY3Rpb24oKSB8fCAhYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigp
IHx8ICFhdChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgc3dpdGNoIChu
b2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAg
ICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRl
Q292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFhdChub2RlLmNoaWxkMigpKS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkgfHwgKCFub2RlLmNoaWxkMygpICYmICFhdChub2RlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6R2Vu
ZXJpYzogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hp
bGQyKCkpOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtMjM5
MiwxMjAgKzIzOTMsOTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
YXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOworICAgICAgICBjYXNlIEFycmF5
OjpKU0FycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJl
ZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
KyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugd2lsbCBoYXZl
IGFscmVhZHkgc3BlY3VsYXRlZCB0aGF0IHRoZSBiYXNlIGlzIHNvbWUga2luZCBvZiBhcnJheSwK
KyAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5n
cHIoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgPT0gU3Bl
Y1N0cmluZykgeworICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKLSAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJy
YXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0
Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90
KSwgaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0No
ZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCks
IG5vZGUsIHNpemVvZihpbnQxNl90KSwgaXNJbnQxNkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNr
IDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
YXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5p
bnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIGlzSW50MzJBcnJh
eVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9U
eXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRU
eXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5
KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90
KSwgaXNVaW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWND
aGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg
ICAgCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3Bl
Y3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNj
cmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50OENsYW1wZWRBcnJheVNwZWN1
bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNj
cmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmlu
dDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRB
cnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJh
eToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9i
YWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwg
VW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFy
cmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50
MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5n
bG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDMy
X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxv
YXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKGRvdWJsZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZVVpbnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2Rl
LCBzaXplb2YodWludDE2X3QpLCBpc1VpbnQxNkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDog
QWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChh
dChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51
aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgaXNVaW50MzJB
cnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8g
Tm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlRmxvYXQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRU
eXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCBzaXplb2YoZmxvYXQpLCBpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6
IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSksIGlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBl
U3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MpOwotICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7Ci0KLSAgICAgICAgR1BS
UmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwotICAgICAgICAKLSAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCB0
aGUgYmFzZSBpcyBzb21lIGtpbmQgb2YgYXJyYXksCi0gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQu
Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkp
KTsKLQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5VmFsOgotICAgIGNhc2Ug
UHV0QnlWYWxTYWZlOiB7CisgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgIEVkZ2Ug
Y2hpbGQxID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgRWRn
ZSBjaGlsZDIgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwogICAgICAgICBF
ZGdlIGNoaWxkMyA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgICAg
IAotICAgICAgICBpZiAoIWF0KGNoaWxkMSkucHJlZGljdGlvbigpIHx8ICFhdChjaGlsZDIpLnBy
ZWRpY3Rpb24oKSkgeworICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBtb2RlRm9yUHV0
KG5vZGUuYXJyYXlNb2RlKCkpOworICAgICAgICBib29sIGFscmVhZHlIYW5kbGVkID0gZmFsc2U7
CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICBjYXNlIEFy
cmF5OjpVbmRlY2lkZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwor
ICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghYXQoY2hpbGQyKS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICAg
ICAgQVNTRVJUKG5vZGUub3AoKSA9PSBQdXRCeVZhbCk7CisgICAgICAgICAgICAKICAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgY2hpbGQxKTsKICAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzIodGhpcywgY2hpbGQyKTsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzModGhpcywgY2hpbGQzKTsKQEAgLTI1MTcsMTkgKzI0ODgsOTcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbiht
X2ppdC5zdHJpY3RNb2RlRm9yKG5vZGUuY29kZU9yaWdpbikgPyBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBhcmcxR1BSLCBhcmcyR1BSLCBhcmcz
R1BSKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgp
OworICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChhbHJlYWR5SGFuZGxlZCkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBjaGlsZDEpOwogICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgY2hpbGQyKTsKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlQXJn
dW1lbnRzKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIiBpbiBoZXJlICIpOworICAgICAgICAK
KyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKworICAgICAgICBzcGVjdWxhdGVBcnJheShhcnJh
eU1vZGUsIGNoaWxkMSwgYmFzZVJlZyk7CisKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsK
KyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJh
eU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBj
aGlsZDMpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAg
ICAgICAgIC8vIE1hcCBiYXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGludG8gcmVnaXN0ZXJzLCBhbGxv
Y2F0ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIuCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2
YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVn
LCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2Ny
YXRjaFJlZyk7CisKKyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykg
eworICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAg
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgaWYg
KGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91
bmRzKTsKKworICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVz
ZSgpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgIAorICAgICAgICAgICAgLy8g
R2V0IHRoZSBhcnJheSBzdG9yYWdlLgorICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
Y3JhdGNoUmVnOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKwor
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGlu
Y3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKworICAgICAgICAgICAgLy8gSWYg
d2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgcHJvcGVydHlSZWcpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1t
MzIoMSksIHByb3BlcnR5UmVnKTsKKworICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRh
dGUubGluaygmbV9qaXQpOworICAgICAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsK
KworICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworCisgICAgICAgICAgICBpZiAo
YXJyYXlNb2RlID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMpIHsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgICAgICAgICAgYmV5b25kQXJyYXlCb3VuZHMsIHRoaXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBv
cGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlW
YWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5v
UmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czogewogICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0g
c2NyYXRjaDIuZ3ByKCk7CkBAIC0yNTM3LDE1ICsyNTg2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgaWYgKCFpc0FyZ3VtZW50c1Nw
ZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkpIHsKLSAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgY2hpbGQxLAotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZBcmd1bWVudHM6OnNf
aW5mbykpKTsKLSAgICAgICAgICAgIH0KLSAgICAKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgQXJndW1l
bnRzOjpvZmZzZXRPZkRhdGEoKSksCiAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZyk7CkBAIC0y
NTc5LDIyNSArMjYxOSw1MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxk
U3BlY3VsYXRlSW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgaXNJbnQ4QXJy
YXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgaXNJbnQxNkFycmF5U3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQoY2hpbGQxKS5z
aG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBp
c0ludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8g
Tm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWdu
ZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDhB
cnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1f
aml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50OEFycmF5U3BlY3VsYXRp
b24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVj
Q2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChh
dChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51
aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNr
IDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3Vu
ZGluZyk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWlu
dDE2QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgaXNVaW50MTZBcnJheVNw
ZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlU
eXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFs
RGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0
YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6
IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
YXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgewotICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+Zmxv
YXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
c2l6ZW9mKGZsb2F0KSwgaXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
Y2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJy
YXlTcGVjQ2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQ2
NEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpLCBpc0Zsb2F0NjRBcnJheVNw
ZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlU
eXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MpOwotICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgIAotICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7Ci0KLSAgICAgICAgLy8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFsdWUgaW50byBy
ZWdpc3RlcnMsIGFsbG9jYXRlIGEgc2NyYXRjaCByZWdpc3Rlci4KLSAgICAgICAgR1BSUmVnIGJh
c2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAg
IHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJG
b3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaFJlZyk7Ci0KLSAgICAgICAgc3BlY3VsYXRlQXJyYXko
Y2hpbGQxLCBiYXNlUmVnKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRB
cnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFs
KQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7Ci0KLSAgICAgICAgYmFzZS51c2UoKTsKLSAg
ICAgICAgcHJvcGVydHkudXNlKCk7Ci0gICAgICAgIHZhbHVlLnVzZSgpOwotICAgICAgICAKLSAg
ICAgICAgLy8gR2V0IHRoZSBhcnJheSBzdG9yYWdlLgotICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHNjcmF0Y2hSZWc7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0K
LSAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3Jl
bWVudCBtX251bVZhbHVlc0luVmVjdG9yLgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBu
b3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSkpOwotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0KLSAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0
byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwot
ICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAg
ICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7Ci0gICAg
ICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwotCi0gICAgICAg
IGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKLSAgICAgICAgbm90SG9sZVZh
bHVlLmxpbmsoJm1faml0KTsKLQotICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFy
cmF5LgotICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLQotICAgICAg
ICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsU2FmZSkgewotICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAg
ICAgICAgICBiZXlvbmRBcnJheUJvdW5kcywgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgbV9q
aXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRB
cnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25T
dHJpY3QsCi0gICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJl
ZywgdmFsdWVSZWcpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICBFZGdlIGNoaWxkMiA9IG1f
aml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgICAgIEVkZ2UgY2hpbGQzID0g
bV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghYXQoY2hpbGQxKS5wcmVkaWN0aW9uKCkgfHwgIWF0KGNoaWxkMikucHJlZGljdGlvbigpKSB7
Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292
ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGlzQWN0
aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKGF0KGNoaWxkMSkucHJlZGljdGlvbigpKSk7
Ci0gICAgICAgIEFTU0VSVChhdChjaGlsZDIpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7Ci0K
LSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEpOwotICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQyKTsKLSAg
ICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKLSAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YoaW50OF90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBTaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Ci0g
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZihpbnQxNl90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBTaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgp
KSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmds
b2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBTaWdu
ZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDhB
cnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1f
aml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNr
LCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDhD
bGFtcGVkQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBi
YXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBOb1R5cGVk
QXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0gICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
ZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
dWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51
aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5n
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQxNkFycmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFy
cmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQzMkFycmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
QXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0
VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFy
cmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0
Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9w
ZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoYXQo
Y2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
dWludDE2X3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0g
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKLSAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZih1aW50MzJfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5
KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjayk7
Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0g
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFs
RGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdw
cigpLCBub2RlLCBzaXplb2YoZG91YmxlKSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrKTsKLSAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
QVNTRVJUKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlQXJyYXkoKSk7Ci0KLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3By
KCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLQotICAgICAg
ICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJy
aWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwotCi0gICAgICAgIC8vIEdldCB0aGUg
YXJyYXkgc3RvcmFnZS4KLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwot
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
QXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCi0gICAgICAgIC8vIFN0b3Jl
IHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCi0gICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHBy
b3BlcnR5LmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAg
ICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAorCiAg
ICAgY2FzZSBSZWdFeHBFeGVjOiB7CiAgICAgICAgIGlmIChjb21waWxlUmVnRXhwRXhlYyhub2Rl
KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI4NTksNyArMjcyNSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIHdyaXRlQmFy
cmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJv
cGVydHlBY2Nlc3MsIHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogCi0gICAgICAgIHNw
ZWN1bGF0ZUFycmF5KG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOworICAgICAgICBzcGVjdWxhdGVB
cnJheShBcnJheTo6SlNBcnJheSwgbm9kZS5jaGlsZDEoKSwgYmFzZUdQUik7CiAKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojpz
dG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwpAQCAtMjg5Niw3ICsyNzYyLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcg
c3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3Ro
R1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZUFy
cmF5KG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOworICAgICAgICBzcGVjdWxhdGVBcnJheShBcnJh
eTo6SlNBcnJheSwgbm9kZS5jaGlsZDEoKSwgYmFzZUdQUik7CiAKICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zm
c2V0KCkpLCBzdG9yYWdlR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVu
Z3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwpAQCAtMzM4Niw4MSArMzI1MiwxMCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAotICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
LSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgCi0gICAg
ICAgIHNwZWN1bGF0ZUFycmF5KG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOwotCi0gICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3Rv
cmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMCkpKTsKLSAgICAgICAgCi0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBt
X2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgY2Fz
ZSBHZXRBcmd1bWVudHNMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0
aChub2RlKTsKKyAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICBjb21waWxlR2V0QXJy
YXlMZW5ndGgobm9kZSk7CiAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgR2V0U3Ry
aW5nTGVuZ3RoOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAg
IAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWlzU3RyaW5n
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBu
b2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkp
LCByZXN1bHRHUFIpOwotCi0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBp
bGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgR2V0SW50OEFycmF5
TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2Jh
bERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNJbnQ4QXJyYXlTcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIEdldEludDE2QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29t
cGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVz
Y3JpcHRvcigpLCBub2RlLCAhaXNJbnQxNkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBHZXRJbnQzMkFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVu
Z3RoKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlz
SW50MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0VWludDhBcnJheUxlbmd0
aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRh
KCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc1VpbnQ4QXJyYXlTcGVjdWxhdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIEdldFVpbnQ4Q2xhbXBlZEFycmF5TGVuZ3RoOiB7Ci0gICAgICAg
IGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFt
cGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc1VpbnQ4Q2xhbXBlZEFycmF5U3BlY3VsYXRp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBHZXRVaW50MTZBcnJheUxlbmd0aDogewotICAgICAgICBjb21w
aWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVz
Y3JpcHRvcigpLCBub2RlLCAhaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgR2V0VWludDMyQXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlM
ZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwg
IWlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldEZsb2F0MzJBcnJh
eUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9i
YWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzRmxvYXQzMkFycmF5
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRGbG9hdDY0QXJyYXlMZW5ndGg6IHsKLSAg
ICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9h
dDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQogICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRDYWNoZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRy
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgZnVuY3Rpb24uZ3ByKCksIG5vZGUuZnVuY3Rpb24oKSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDEyNjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksMTIgKzI2OSw3OSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjbGVhckdlbmVyYXRpb25JbmZvCiAgICAgbV9mcHJzID0gUmVn
aXN0ZXJCYW5rPEZQUkluZm8+KCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
ZUFycmF5KEVkZ2UgZWRnZSwgR1BSUmVnIGJhc2VSZWcpCitjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciogU3BlY3VsYXRpdmVKSVQ6OnR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlIGFy
cmF5TW9kZSkKIHsKLSAgICBBYnN0cmFjdFZhbHVlJiBhcnJheVZhbHVlID0gbV9zdGF0ZS5mb3JO
b2RlKGVkZ2UpOwotICAgIGlmIChhcnJheVZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhh
c1NpbmdsZXRvbigpCi0gICAgICAgICYmIGFycmF5VmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCktPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8pCi0gICAgICAg
IHJldHVybjsKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQXJyYXk6OkludDhB
cnJheToKKyAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2Ny
aXB0b3IoKTsKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gJm1f
aml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKTsKKyAgICBjYXNlIEFycmF5
OjpJbnQzMkFycmF5OgorICAgICAgICByZXR1cm4gJm1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJB
cnJheURlc2NyaXB0b3IoKTsKKyAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAg
ICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3Jp
cHRvcigpOworICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gJm1f
aml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgY2FzZSBBcnJh
eTo6VWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50
MzJBcnJheURlc2NyaXB0b3IoKTsKKyAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAg
ICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7
CisgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICByZXR1cm4gJm1faml0Lmds
b2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KK30KKworY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUsIEVkZ2Ug
ZWRnZSwgR1BSUmVnIGJhc2VSZWcpCit7CisgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Iq
IHJlc3VsdCA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKGFycmF5TW9kZSk7CisgICAgCisgICAgaWYg
KG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUoZWRnZSksIGFycmF5TW9kZSkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgY29uc3QgQ2xhc3NJbmZvKiBleHBlY3Rl
ZENsYXNzSW5mbyA9IDA7CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNl
IEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgorICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6c19pbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJy
YXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICAvLyBUaGlzIGNvZGUgZHVwbGljYXRl
cyB0aGUgY29kZSBiZWxvdyBpbiBhbnRpY2lwYXRpb24gb2YgdGhpcyBjb2RlIGJlaW5nCisgICAg
ICAgIC8vIHN1YnN0YW50aWFsbHkgY2hhbmdlZCBpbiB0aGUgZnV0dXJlLgorICAgICAgICBHUFJU
ZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAg
IFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5i
cmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVy
ZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgZXhwZWN0ZWRDbGFz
c0luZm8gPSAmQXJndW1lbnRzOjpzX2luZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJy
YXk6OkludDhBcnJheToKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgIGNhc2UgQXJy
YXk6OkludDMyQXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Cisg
ICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJh
eToKKyAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSByZXN1bHQtPm1fY2xhc3NJbmZvOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIAogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OwogICAgIG1faml0LmxvYWRQdHIoCkBAIC0yODQsNyArMzUxLDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRlQXJyYXkoRWRnZQogICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCiAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2lu
Zm8pKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihleHBlY3Rl
ZENsYXNzSW5mbykpKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGVJbmRleCBub2RlSW5kZXgpCkBAIC0xNjIwLDEx
ICsxNjg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdAogICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAgIGlmICghaXNTdHJpbmdTcGVjdWxhdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsK
LSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIEFTU0VSVChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLCBBcnJheTo6U3RyaW5nKSk7CiAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJpc29uIHNv
IHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhhdCBhcmUg
dG9vIGxhcmdlCiAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9m
ZnNldE9mTGVuZ3RoKCkpKSk7CkBAIC0yMDE4LDIzICsyMDgzLDcgQEAgc3RhdGljIHZvaWQgY29t
cGlsZUNsYW1wRG91YmxlVG9CeXRlKEpJVAogCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBOb2RlJiBub2RlLCBib29sIG5lZWRzU3BlY3VsYXRpb25DaGVjaykKLXsKLSAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgCi0gICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgCi0gICAgaWYg
KG5lZWRzU3BlY3VsYXRpb25DaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7Ci0gICAgCi0gICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIGRlc2NyaXB0b3IubV9s
ZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOwotICAgIAotICAgIGludGVnZXJSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRp
b25SZXF1aXJlbWVudHMgc3BlY3VsYXRpb25SZXF1aXJlbWVudHMsIFR5cGVkQXJyYXlTaWduZWRu
ZXNzIHNpZ25lZG5lc3MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbklu
dFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUm
IG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVz
cykKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNo
aWxkMigpKTsKQEAgLTIwNDcsMTIgKzIwOTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkluCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBHUFJS
ZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwogCi0gICAgaWYgKHNwZWN1bGF0aW9uUmVxdWly
ZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwotICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNTRVJUKG1vZGVBbHJlYWR5
Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkp
KTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCkBAIC0yMDk3LDEzICsyMTQxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwg
bV9jb21waWxlSW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVu
dFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlvblJlcXVp
cmVtZW50cywgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5k
aW5nIHJvdW5kaW5nKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVn
IGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBU
eXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgcm91bmRp
bmcpCiB7Ci0gICAgRWRnZSBiYXNlVXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCAwKTsKICAgICBFZGdlIHZhbHVlVXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCAyKTsKICAgICAKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFy
cmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZVVzZSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlND
ZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRl
c2NyaXB0b3IubV9jbGFzc0luZm8pKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlOwogICAgIEdQ
UlJlZyB2YWx1ZUdQUjsKICAgICAKQEAgLTIxNzQsNyArMjIxNSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBBU1NFUlQodmFsdWVHUFIgIT0gc3RvcmFn
ZVJlZyk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBk
ZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG91dE9mQm91bmRzOwotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAh
PSBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spCisgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkK
ICAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3Jp
cHRvci5tX2xlbmd0aE9mZnNldCkpOwogCiAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgewpAQCAt
MjE5MCwxMiArMjIzMSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxG
b3JJCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQot
ICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlTcGVjQ2hlY2sp
CisgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZCb3VuZHMubGlu
aygmbV9qaXQpOwogICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6
ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzIHNwZWN1bGF0aW9uUmVxdWlyZW1l
bnRzKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUmIG5vZGUsIHNp
emVfdCBlbGVtZW50U2l6ZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTIyMDQsMTcgKzIyNDUsMTEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFz
ZS5ncHIoKTsKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgCi0gICAgaWYgKHNwZWN1bGF0
aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spIHsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwotICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisKKyAgICBBU1NFUlQo
bW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5h
cnJheU1vZGUoKSkpOwogCiAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBGUFJS
ZWcgcmVzdWx0UmVnID0gcmVzdWx0LmZwcigpOwotICAgIEFTU0VSVChzcGVjdWxhdGlvblJlcXVp
cmVtZW50cyAhPSBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spOwogICAgIHNwZWN1bGF0aW9uQ2hlY2so
CiAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCiAgICAgICAgIG1f
aml0LmJyYW5jaDMyKApAQCAtMjIzOCwxNSArMjI3MywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21w
aWxlSW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQ
UlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6
ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzIHNwZWN1bGF0aW9uUmVxdWlyZW1l
bnRzKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFy
cmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUpCiB7CiAgICAg
RWRnZSBiYXNlVXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICBF
ZGdlIHZhbHVlVXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAK
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwogICAg
IAotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3Bl
Y0NoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlVXNlLmluZGV4KCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2Vs
bDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNj
cmlwdG9yLm1fY2xhc3NJbmZvKSkpOworICAgIEFTU0VSVF9VTlVTRUQoYmFzZVVzZSwgbW9kZUFs
cmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShiYXNlVXNlKSwgbm9kZS5hcnJheU1vZGUoKSkp
OwogICAgIAogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCkBAIC0yMjU1LDcg
KzIyODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAg
CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlw
dG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG91dE9mQm91bmRzOwotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5
cGVkQXJyYXlTcGVjQ2hlY2spCisgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKICAgICAg
ICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5t
X2xlbmd0aE9mZnNldCkpOwogICAgIAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKQEAgLTIy
NzIsNyArMjMwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckYK
ICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAg
aWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVNwZWNDaGVjaykKKyAg
ICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsKQogICAgICAgICBvdXRPZkJvdW5kcy5saW5rKCZt
X2ppdCk7CiAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogfQpAQCAtMzA2Niw3NSArMzEw
MCwzNiBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEoTm9kCiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKE5vZGUmIG5v
ZGUpCiB7Ci0gICAgQVNTRVJUKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSk7Ci0gICAg
QVNTRVJUKGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7Ci0gICAg
ICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIAogICAgIEdQUlRlbXBvcmFy
eSBzdG9yYWdlKHRoaXMpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
LSAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNo
aWxkMSgpKS5wcmVkaWN0aW9uKCkgPT0gU3BlY1N0cmluZykgewotICAgICAgICBpZiAoIWlzU3Ry
aW5nU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0KKyAgICAKKyAgICBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9CisgICAgICAgIHNwZWN1bGF0ZUFy
cmF5KG5vZGUuYXJyYXlNb2RlKCksIG5vZGUuY2hpbGQxKCksIGJhc2VSZWcpOworICAgIAorICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0
cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIAogICAgICAgICAv
LyBTcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWNjZXNzaW5nIGEgcm9wZQogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZVJlZykpOwogCiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3RyaW5n
SW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2Rl
LmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgewotICAgICAgICBjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50
OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICBpZiAoIWlzSW50OEFycmF5U3BlY3VsYXRpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcp
LCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNl
dCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5m
bykpKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxz
ZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Ci0g
ICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xv
YmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICBpZiAoIWlzSW50MTZB
cnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxs
OjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV9jbGFzc0luZm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdl
UmVnKTsKLSAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUlu
dDMyQXJyYXkoKSkgewotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAg
ICAgaWYgKCFpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdl
T2Zmc2V0KSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5z
aG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNj
cmlwdG9yKCk7Ci0gICAgICAgIGlmICghaXNVaW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNo
aWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNj
cmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxzZSBpZiAoYXQo
bm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkgewotICAg
ICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgIGlmICghaXNV
aW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0lu
Zm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9IGVs
c2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsK
LSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5n
bG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICBpZiAoIWlzVWlu
dDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
Q2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihk
ZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3Rv
cmFnZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKTsK
LSAgICAgICAgaWYgKCFpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKLSAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1f
c3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKLSAgICAgICAgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0
MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgaWYgKCFpc0Zsb2F0MzJBcnJheVNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNl
UmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpjbGFzc0luZm9P
ZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFz
c0luZm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9
IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgp
KSB7Ci0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9q
aXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgIGlmICgh
aXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0
KSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9k
ZS5jaGlsZDEoKSwgYmFzZVJlZyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNl
IEFycmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Fy
cmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yKTsKKyAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9y
LT5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQor
ICAgIAogICAgIHN0b3JhZ2VSZXN1bHQoc3RvcmFnZVJlZywgbV9jb21waWxlSW5kZXgpOwogfQog
CkBAIC0zMjUyLDYgKzMyNDcsNDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFy
Z3VtZW50cwogICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiB9
CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2RlJiBub2Rl
KQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIAorICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0K
KyAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9kZS5hcnJheU1vZGUoKSwgbm9kZS5jaGlsZDEoKSwg
YmFzZUdQUik7CisKKyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICBjYXNlIEFy
cmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5
OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX2xlbmd0aCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgCisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFy
cmF5OjpTdHJpbmc6CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEFyZ3Vt
ZW50c0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUKGRlc2NyaXB0b3IpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIp
OworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdG
dW5jdGlvbk5vQ2hlY2soTm9kZSYgbm9kZSkKIHsKICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gMTI2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgyLDYgKzIwODIsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhOb2RlJik7CiAgICAgdm9pZCBj
b21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUmKTsKICAgICAKKyAgICB2b2lkIGNvbXBpbGVH
ZXRBcnJheUxlbmd0aChOb2RlJik7CisgICAgCiAgICAgdm9pZCBjb21waWxlVmFsdWVUb0ludDMy
KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJlcihOb2RlJik7CiAgICAgdm9p
ZCBjb21waWxlRG91YmxlQXNJbnQzMihOb2RlJik7CkBAIC0yMDk1LDEyICsyMDk3LDYgQEAgcHVi
bGljOgogI2VuZGlmCiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSYpOwogICAgIHZvaWQg
Y29tcGlsZVNvZnRNb2R1bG8oTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldFR5cGVkQXJyYXlM
ZW5ndGgoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlJiwgYm9vbCBuZWVkc1NwZWN1
bGF0aW9uQ2hlY2spOwotICAgIGVudW0gVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRz
IHsKLSAgICAgICAgTm9UeXBlZEFycmF5U3BlY0NoZWNrLAotICAgICAgICBOb1R5cGVkQXJyYXlU
eXBlU3BlY0NoZWNrLAotICAgICAgICBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcwotICAgIH07CiAg
ICAgZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7CiAgICAgICAgIFNpZ25lZFR5cGVkQXJyYXks
CiAgICAgICAgIFVuc2lnbmVkVHlwZWRBcnJheQpAQCAtMjExMCwxMCArMjEwNiwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIENsYW1wUm91bmRpbmcKICAgICB9OwogICAgIHZvaWQgY29tcGlsZUdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBl
bGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5
U2lnbmVkbmVzcyk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwg
Tm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1l
bnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nID0gVHJ1bmNhdGVS
b3VuZGluZyk7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVk
QXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxG
b3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5
U3BlY3VsYXRpb25SZXF1aXJlbWVudHMpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVt
ZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNl
LCBHUFJSZWcgcHJvcGVydHksIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlT
aWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKKyAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgdm9pZCBjb21waWxlUHV0
QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKICAg
ICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSYpOwogICAgIHZvaWQgY29tcGls
ZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihOb2RlJik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhl
YyhOb2RlJik7CkBAIC0yMTk5LDcgKzIxOTUsOSBAQCBwdWJsaWM6CiAgICAgSnVtcFJlcGxhY2Vt
ZW50V2F0Y2hwb2ludCogZm9yd2FyZFNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCA9IFVu
Y291bnRhYmxlV2F0Y2hwb2ludCk7CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogc3Bl
Y3VsYXRpb25XYXRjaHBvaW50V2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKEV4aXRLaW5kLCBib29s
IGlzRm9yd2FyZCk7CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVBcnJheShFZGdlIGJhc2VFZGdl
LCBHUFJSZWcgYmFzZVJlZyk7CisgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVk
QXJyYXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlKTsKKyAgICAKKyAgICBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciogc3BlY3VsYXRlQXJyYXkoQXJyYXk6Ok1vZGUsIEVkZ2UgYmFzZUVkZ2UsIEdQ
UlJlZyBiYXNlUmVnKTsKICAgICAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJS
ZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJu
Rm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDEyNjI3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgog
ICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsU2FmZToKICAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgogICAg
ICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qg
Y291bnQgdGhlc2UgdXNlcy4KQEAgLTIxNSw1MyArMjE0LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0
QnlWYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkgfHwgIW1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZUFycmF5U3BlY3VsYXRpb24obV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIo
bGl2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZTogewotICAgICAg
ICAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7
Ci0gICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICgh
bV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rp
b24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1fZ3JhcGhbY2hpbGQyXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtjaGlsZDFd
LnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAg
ICAgICkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihsaXZlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0gUHV0QnlWYWxTYWZlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0u
c2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxh
dGVJbnQ4QXJyYXkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXko
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtj
aGlsZDFdLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3Vs
ZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVj
dWxhdGVVaW50MTZBcnJheSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDMy
QXJyYXkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXIobGl2ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CiAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160041</attachid>
            <date>2012-08-22 17:23:30 -0700</date>
            <delta_ts>2012-08-22 18:14:20 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>arraymode_patch_10.diff</filename>
            <type>text/plain</type>
            <size>173795</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2MzYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBA
CisyMDEyLTA4LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgYWNjZXNzZXMgc2hvdWxkIHJlbWVtYmVyIHdoYXQga2luZCBvZiBhcnJheSB0aGV5IGFy
ZSBwcmVkaWN0ZWQgdG8gYWNjZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NDQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEludHJvZHVjZWQgdGhlIG5vdGlvbiBvZiBERkc6OkFycmF5OjpNb2RlLCBz
dG9yZWQgaW4gbm9kZS5hcnJheU1vZGUoKSwgd2hpY2ggYWxsb3dzIG5vZGVzCisgICAgICAgIHRv
IHJlbWVtYmVyIGhvdyB0aGV5IGRlY2lkZWQgdG8gYWNjZXNzIGFycmF5cy4gVGhpcyBwZXJtaXRz
IHRoZSBieXRlY29kZSBwYXJzZXIgdG8gImxvY2sgaW4iCisgICAgICAgIHRoZSBtb2RlIG9mIGFj
Y2VzcyBpZiBpdCBoYXMgcHJvZmlsaW5nIGF0IGl0cyBkaXNwb3NhbCwgYW5kIGl0IGFsc28gYWxs
b3dzIHRoZSBwcmVkaWN0aW9uCisgICAgICAgIHByb3BhZ2F0b3IgdG8gZG8gYSBmaXh1cCBvZiB0
aGUgYXJyYXkgbW9kZSBsYXRlciBpbiB0aGUgb3B0aW1pemF0aW9uIGZpeHBvaW50LgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgaGVhbHRoeSBhbW91bnQgb2YgbmV3IGNhcGFi
aWxpdHkgKHNwZWNpZmljYWxseSB0aGUgYWJpbGl0eSBvZiB0aGUgcGFyc2VyCisgICAgICAgIHRv
IGxvY2sgaW4gYW4gYXJyYXkgbW9kZSByZWdhcmRsZXNzIG9mIHR5cGUgcHJlZGljdGlvbnMpIGFu
ZCBpdCBhbHNvIGJsb3dzIGF3YXkgYSBsb3Qgb2YKKyAgICAgICAgbWVzc3kgY29kZS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcv
REZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlNb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmZy
b21PYnNlcnZlZCk6CisgICAgICAgIChKU0M6OkRGRzo6cmVmaW5lQXJyYXlNb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjptb2RlQWxyZWFkeUNoZWNrZWQpOgorICAgICAgICAoSlNDOjpERkc6Om1v
ZGVUb1N0cmluZyk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5oOiBBZGRlZC4KKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkRGRzo6bW9kZUZvclB1dCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZXNDb21wYXRpYmxl
Rm9yU3RvcmFnZUxvYWQpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVTdXBwb3J0c0xlbmd0aCk6
CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEJ5dGVDb2Rl
UGFyc2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJyYXlNb2Rl
V2l0aG91dE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRB
cnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRy
aW5zaWMpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpnZXRCeVZhbExvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6c3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbik6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1p
bmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpieVZhbElzUHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmNsb2JiZXJzV29ybGQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzQXJyYXlNb2RlKToKKyAgICAgICAgKE5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OmFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
c2V0QXJyYXlNb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVzY3JpcHRvcik6CisgICAgICAgIChERkcpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAg
ICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2U6OnJ1bik6CisKIDIwMTItMDgtMjIgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5i
ZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBTZXBhcmF0ZSBNYXJrU3RhY2tUaHJlYWRTaGFyZWRE
YXRhIGZyb20gTWFya1N0YWNrCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NP
VVJDRVMKIAogICAgIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAogICAgIGRmZy9ERkdBcmd1bWVu
dHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdBcnJheU1vZGUuY3BwCiAgICAg
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKICAgICBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CiAgICAgZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1
NSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fz
c2VtYmx5SGVscGVycy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1i
bHlIZWxwZXJzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMjYyNzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtOTUsNiAr
OTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHAgXAogICAgIGRm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcCBcCiAgICAgZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwIFwKKyAgICBkZmcvREZHQXJyYXlNb2RlLmNwcCBcCiAgICAgZGZnL0RGR0Fz
c2VtYmx5SGVscGVycy5jcHAgXAogICAgIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgXAogICAg
IGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYg
KzE0Miw4IEBACiAJCTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGNjM5NDU0MTVEMDcwNTUwMDZBNTk3QyAvKiBBcnJh
eVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2Mzk0NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi87IH07CiAJ
CTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3
QyAvKiBBcnJheVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjYzOTQ4NDE1RTQ4MTE4MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDgx
MTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwICovOyB9OworCQkwRjYzOTQ4NTE1
RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJy
YXlNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY2Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDc2
MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0Yx
NjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGph
Y2VuY3lMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJF
NCAvKiBERkdFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTg5Niw2ICs4OTgsOCBAQAogCQkwRjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyog
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RG
R1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5UHJvZmlsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVBy
b2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlQcm9maWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAv
KiBERkdBcnJheU1vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQXJyYXlNb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcnJheU1vZGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlN
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FycmF5TW9kZS5oOyBw
YXRoID0gZGZnL0RGR0FycmF5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Lmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0
Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI1NywxMiArMjI2MSwxNSBAQAogCQk4NkVD
OURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKLQkJCQkwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1l
bnRQb3NpdGlvbi5oICovLAotCQkJCTBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1
bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywKLQkJCQkwRjE2MDE1QjE1NjE5OEJGMDBD
MjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oICovLAogCQkJCTBGNjIw
MTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJCQkwRjYy
MDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEY2NkUx
NjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLywKKwkJCQkwRjFFM0E0
MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oICovLAorCQkJCTBGMTYw
MTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cCAqLywKKwkJCQkwRjE2MDE1QjE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5oICovLAorCQkJCTBGNjM5NDgxMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdB
cnJheU1vZGUuY3BwICovLAorCQkJCTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJh
eU1vZGUuaCAqLywKIAkJCQkwRkMwOTc2QjE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlI
ZWxwZXJzLmNwcCAqLywKIAkJCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1i
bHlIZWxwZXJzLmggKi8sCiAJCQkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2lj
QmxvY2suaCAqLywKQEAgLTIzMDYsNyArMjMxMyw2IEBACiAJCQkJODZFQ0EzRTkxMzJERUYxQzAw
MkIyQUQ3IC8qIERGR05vZGUuaCAqLywKIAkJCQkwRkE1ODFCNzE1MEU5NTJBMDBCOUEyRDkgLyog
REZHTm9kZUZsYWdzLmNwcCAqLywKIAkJCQkwRkE1ODFCODE1MEU5NTJBMDBCOUEyRDkgLyogREZH
Tm9kZUZsYWdzLmggKi8sCi0JCQkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFj
ZW5jeUxpc3QuaCAqLywKIAkJCQkwRkE1ODFCOTE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZVR5
cGUuaCAqLywKIAkJCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovLAog
CQkJCTg2RUM5REJGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCAqLywKQEAg
LTI4ODQsNiArMjg5MCw3IEBACiAJCQkJRkU0QTMzMjAxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5z
cGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyog
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYz
OTQ1NTE1RDA3MDU3MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CkBAIC0zNDg1LDYgKzM0OTIsNyBAQAogCQkJCUZFNEEzMzFGMTVCRDJF
MDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ0
MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNjM5NDU0MTVEMDcwNTUwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2Mzk0ODQxNUU0ODExODAwNkE1OTdDIC8qIERG
R0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTI2MjcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODY4LDY1ICs4NjgsNjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkgfHwgIW1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnByZWRpY3Rpb24oKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsK
KyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VF
eGl0OgogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpIHx8ICghbm9kZS5jaGlsZDMoKSAmJiAhbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4
SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
U3RyaW5nOgorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0
cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjU3RyaW5nKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQXJndW1lbnRzKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
ID09IFNwZWNTdHJpbmcpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNTdHJpbmcpOworICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcgb2YgdGhlIG91dC1vZi1ib3Vu
ZHMKKyAgICAgICAgICAgIC8vIGNhc2UuCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKKyAgICAgICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0ludDhBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJh
eSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRl
VWludDhBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxk
U3BlY3VsYXRlVWludDhDbGFtcGVkQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50
OENsYW1wZWRBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKSkgewor
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDMy
QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKICAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAg
ICAgaWYgKG5vZGUuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtOTM0LDU1ICs5MzUsNDcg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgeworICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkp
IHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0NjRBcnJheSk7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsK
LSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6
Ci0gICAgY2FzZSBQdXRCeVZhbFNhZmU6IHsKKyAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotCiAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpOwogICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMik7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFtX2dyYXBoW2No
aWxkMV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW2NoaWxkMl0ucHJlZGljdGlvbigpKSB7Cisg
ICAgICAgIHN3aXRjaCAobW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9ncmFwaFtjaGlsZDJd
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAg
ICAgICB8fCBtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkKLSNlbmRp
ZgotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFB1dEJ5
VmFsIHx8IG5vZGUub3AoKSA9PSBQdXRCeVZhbFNhZmUpOworICAgICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOgogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGhb
Y2hpbGQxXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkgeworICAgICAgICBjYXNlIEFycmF5
OjpKU0FycmF5OgorICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7
CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBjbG9iYmVyV29y
bGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQx
KS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmls
dGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBp
ZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7CisgICAgICAg
IGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0
ZXIoU3BlY0ludDhBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKQEAgLTk5MCw4ICs5ODMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJh
eSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxk
M10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtOTk5LDggKzk5MSw3IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRT
cGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToK
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwogICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
aWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC0xMDA4LDgg
Kzk5OSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNO
dW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3Jh
cGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBB
cnJheTo6VWludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3Bl
Y1VpbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCkBAIC0xMDE3LDggKzEwMDcsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVk
QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQpAQCAtMTAyNiw4
ICsxMDE1LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3Bl
Y051bWJlcik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDE2QXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVy
KFNwZWNVaW50MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKQEAgLTEwMzUsOCArMTAyMyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVVaW50MzJB
cnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwogICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhb
Y2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC0xMDQ0LDIzICsxMDMxLDIwIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQx
XS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpG
bG9hdDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9h
dDMyQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hv
dWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjRmxvYXQ2NEFy
cmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShjaGls
ZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbFNhZmUpCi0gICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzNTYsNjkgKzEzNDAsODIgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Nl
bGwpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBHZXRBcmd1bWVudHNMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0FyZ3VtZW50cyk7Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
KyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6
OlVuZGVjaWRlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIG1f
aXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICBub2RlLnNl
dENhbkV4aXQoIWlzU3RyaW5nU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJp
bmcpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6SlNB
cnJheU91dE9mQm91bmRzOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0ludDhBcnJheVNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFycmF5KTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KCFpc0ludDE2QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDE2
QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzSW50MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50OEFycmF5
U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCghaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQx
NkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoIWlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY1VpbnQzMkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmxvYXQzMkFycmF5U3Bl
Y3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCghaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0Zsb2F0NjRBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAot
ICAgIGNhc2UgR2V0U3RyaW5nTGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzU3Ry
aW5nU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAot
ICAgIGNhc2UgR2V0SW50OEFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
SW50OEFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhBcnJheSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHZXRJbnQxNkFycmF5TGVuZ3RoOgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
SW50MTZBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKLSAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdldEludDMyQXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgh
aXNJbnQzMkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsK
LSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwot
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR2V0VWludDhBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KCFpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
OwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhBcnJheSk7
Ci0gICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KCFpc1VpbnQ4Q2xhbXBlZEFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKLSAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldFVpbnQxNkFycmF5TGVuZ3Ro
OgotICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjVWludDE2QXJyYXkpOwotICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR2V0VWludDMyQXJyYXlM
ZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50MzJBcnJheVNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7Ci0gICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRGbG9hdDMy
QXJyYXlMZW5ndGg6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNGbG9hdDMyQXJyYXlTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQzMkFycmF5KTsKLSAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdl
dEZsb2F0NjRBcnJheUxlbmd0aDoKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0Zsb2F0NjRB
cnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwotICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVj
a1N0cnVjdHVyZTogewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJv
cGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcyku
CkBAIC0xNDg5LDY1ICsxNDg2LDQ4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7IC8vIFRoZSByZXN1
bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCkpOwotICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMigpXS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOwogICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7
IC8vIExpZXMsIGJ1dCB0aGlzIGlzIChhbG1vc3QpIGFsd2F5cyBmb2xsb3dlZCBieSBHZXRCeVZh
bCwgd2hpY2ggZG9lcyBleGl0LiBTbyBubyBwb2ludCBpbiB0cnlpbmcgdG8gYmUgbW9yZSBwcmVj
aXNlLgotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVB
cmd1bWVudHMoKSkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCkgPT0gU3BlY1N0cmluZykgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxh
dGVJbnQ4QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgICAgICAvLyBUaGlzIGRvZXNu
J3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2FudCB0byBh
ZGQKKyAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9u
cywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgorICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKKyAgICAg
ICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkg
eworICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OENsYW1w
ZWRBcnJheSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFy
cmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
c2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVaW50
MTZBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNV
aW50MTZBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNPdGhl
cik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoU3BlY1VpbnQzMkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJh
eSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwotICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAg
ICAgYnJlYWs7IAogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTI2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2
YXJpYWJsZXMgYWxpYXMgdGhlIGFyZ3VtZW50cyBhbmQgbm90aGluZyBlbHNlLCBhbmQgYXJlCi0g
ICAgICAgIC8vIHVzZWQgb25seSBmb3IgR2V0QnlWYWwgYW5kIEdldEFyZ3VtZW50c0xlbmd0aCBh
Y2Nlc3Nlcy4gQXQgdGhlIHNhbWUgdGltZSwKKyAgICAgICAgLy8gdXNlZCBvbmx5IGZvciBHZXRC
eVZhbCBhbmQgR2V0QXJyYXlMZW5ndGggYWNjZXNzZXMuIEF0IHRoZSBzYW1lIHRpbWUsCiAgICAg
ICAgIC8vIGlkZW50aWZ5IHVzZXMgb2YgQ3JlYXRlQXJndW1lbnRzIHRoYXQgYXJlIG5vdCBjb25z
aXN0ZW50IHdpdGggdGhlIGFyZ3VtZW50cwogICAgICAgICAvLyBiZWluZyBhbGlhc2VkIG9ubHkg
dG8gdmFyaWFibGVzIHRoYXQgc2F0aXNmeSB0aGVzZSBjb25zdHJhaW50cy4KICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewpAQCAtMjc3LDM0ICsyNzcsMjUgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRCeVZhbDogewotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUucHJlZGljdGlv
bigpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5w
cmVkaWN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2dyYXBoW25vZGUuY2hp
bGQyKCldLnByZWRpY3Rpb24oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJh
eU1vZGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBv
YnNlcnZlQmFkQXJndW1lbnRzVXNlcyhub2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhh
dCdzIHNvIGF3ZnVsIGFuZCBwcmV0dHkgbXVjaCBpbXBvc3NpYmxlIHNpbmNlIGl0IHdvdWxkCisg
ICAgICAgICAgICAgICAgICAgIC8vIGltcGx5IHRoYXQgdGhlIGFyZ3VtZW50cyB3ZXJlIHByZWRp
Y3RlZCBpbnRlZ2VyLCBidXQgaXQncworICAgICAgICAgICAgICAgICAgICAvLyBnb29kIHRvIGJl
IGRlZmVuc2l2ZSBhbmQgdGhvcm91Z2guCisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2Uobm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVQ
cm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8
ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUuYXJyYXlNb2RlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAgICAgICAg
ICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hv
dWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElm
IGFyZ3VtZW50cyBpcyB1c2VkIGFzIGFuIGluZGV4LCB0aGVuIGl0J3MgYW4gZXNjYXBpbmcgdXNl
LgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhhdCdzIHNvIGF3ZnVsIGFuZCBwcmV0dHkg
bXVjaCBpbXBvc3NpYmxlIHNpbmNlIGl0IHdvdWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbXBseSB0aGF0IHRoZSBhcmd1bWVudHMgd2VyZSBwcmVkaWN0ZWQgaW50ZWdlciwgYnV0IGl0
J3MKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdvb2QgdG8gYmUgZGVmZW5zaXZlIGFuZCB0
aG9yb3VnaC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uo
bm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlUHJvcGVyQXJn
dW1lbnRzVXNlKG5vZGUsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJndW1lbnRzTGVuZ3RoOiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZVByb3BlckFyZ3VtZW50
c1VzZShub2RlLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtNDk2LDM4ICs0ODcsMzIgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRC
eVZhbDogewotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUucHJlZGljdGlvbigpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnBy
ZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVBcnJheVNwZWN1
bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91
bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBjYW4gYmUgc2ltcGxpZmllZCB0byBHZXRNeUFyZ3VtZW50QnlWYWwgaWYgd2Uga25vdyB0aGF0
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBzYXRpc2ZpZXMgZWl0aGVyIGNvbmRpdGlv
biAoMSkgb3IgKDIpOgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gMSkgSXRzIGZpcnN0IGNo
aWxkIGlzIGEgdmFsaWQgQXJndW1lbnRzQWxpYXNpbmdEYXRhIGFuZCB0aGUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICAgIElubGluZUNhbGxGcmFtZSogaXMgbm90IG1hcmtlZCBhcyBjcmVh
dGluZyBhcmd1bWVudHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAyKSBJdHMgZmlyc3Qg
Y2hpbGQgaXMgQ3JlYXRlQXJndW1lbnRzIGFuZCBpdHMgSW5saW5lQ2FsbEZyYW1lKgotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gICAgaXMgbm90IG1hcmtlZCBhcyBjcmVhdGluZyBhcmd1bWVu
dHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNoaWxkMSgpXSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGls
ZDIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkgPSBF
ZGdlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdz
KEdldE15QXJndW1lbnRCeVZhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSBy
ZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBvcCBub3cgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudEJ5
VmFsLgorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKSAhPSBBcnJheTo6
QXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbiBiZSBzaW1wbGlmaWVk
IHRvIEdldE15QXJndW1lbnRCeVZhbCBpZiB3ZSBrbm93IHRoYXQKKyAgICAgICAgICAgICAgICAg
ICAgLy8gaXQgc2F0aXNmaWVzIGVpdGhlciBjb25kaXRpb24gKDEpIG9yICgyKToKKyAgICAgICAg
ICAgICAgICAgICAgLy8gMSkgSXRzIGZpcnN0IGNoaWxkIGlzIGEgdmFsaWQgQXJndW1lbnRzQWxp
YXNpbmdEYXRhIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgSW5saW5lQ2FsbEZy
YW1lKiBpcyBub3QgbWFya2VkIGFzIGNyZWF0aW5nIGFyZ3VtZW50cy4KKyAgICAgICAgICAgICAg
ICAgICAgLy8gMikgSXRzIGZpcnN0IGNoaWxkIGlzIENyZWF0ZUFyZ3VtZW50cyBhbmQgaXRzIElu
bGluZUNhbGxGcmFtZSoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgaXMgbm90IG1hcmtlZCBh
cyBjcmVhdGluZyBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAg
ICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50
QnlWYWwpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlz
IG9wIG5vdyB0aGF0IGl0J3MgYSBHZXRNeUFyZ3VtZW50QnlWYWwuCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudHNMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICBj
YXNlIEdldEFycmF5TGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5
TW9kZSgpICE9IEFycmF5OjpBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1Rv
T3B0aW1pemUobV9ncmFwaFtub2RlLmNoaWxkMSgpXSkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBt
b2RlcywgYm9vbCBtYWtlU2FmZSkKK3sKKyAgICAvLyBGSVhNRTogd2UgbWF5IHdhbnQgdG8gYWRk
IHNvbWUgcG9seW1vcnBoaWMgc3VwcG9ydCBpbiB0aGUgZnV0dXJlLiBUaGF0J3Mgd2h5IHRoaXMK
KyAgICAvLyBpcyBhIHN3aXRjaCBzdGF0ZW1lbnQgcmlnaHQgbm93LgorICAgIAorICAgIHN3aXRj
aCAobW9kZXMpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNpZGVk
OworICAgIGNhc2UgSXNKU0FycmF5OgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzIDogQXJyYXk6OkpTQXJyYXk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgaXMgcG9zc2libHkgYSBraW5kIG9mIGFycmF5IGZvciB3
aGljaCwgdGhvdWdoIHRoZXJlIGlzIG5vCisgICAgICAgIC8vIHVzZWZ1bCBkYXRhIGluIHRoZSBh
cnJheSBwcm9maWxlLCB3ZSBtYXkgYmUgYWJsZSB0byBleHRyYWN0IHVzZWZ1bCBkYXRhIGZyb20K
KyAgICAgICAgLy8gdGhlIHZhbHVlIHByb2ZpbGVzIG9mIHRoZSBpbnB1dHMuIEhlbmNlLCB3ZSBs
ZWF2ZSBpdCBhcyB1bmRlY2lkZWQsIGFuZCBsZXQKKyAgICAgICAgLy8gdGhlIHByZWRpY3Rpb25z
IHByb3BhZ2F0b3IgZGVjaWRlIGxhdGVyLgorICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRl
ZDsKKyAgICB9Cit9CisKK0FycmF5OjpNb2RlIHJlZmluZUFycmF5TW9kZShBcnJheTo6TW9kZSBh
cnJheU1vZGUsIFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KQorewor
ICAgIGlmICghYmFzZSB8fCAhaW5kZXgpIHsKKyAgICAgICAgLy8gSXQgY2FuIGJlIHRoYXQgd2Ug
aGFkIGEgbGVnaXRpbWF0ZSBhcnJheU1vZGUgYnV0IG5vIGluY29taW5nIHByZWRpY3Rpb25zLiBU
aGF0J2xsCisgICAgICAgIC8vIGhhcHBlbiBpZiB3ZSBpbmxpbmVkIGNvZGUgYmFzZWQgb24sIHNh
eSwgYSBnbG9iYWwgdmFyaWFibGUgd2F0Y2hwb2ludCwgYnV0IGxhdGVyCisgICAgICAgIC8vIHJl
YWxpemVkIHRoYXQgdGhlIGNhbGxzaXRlIGNvdWxkIG5vdCBoYXZlIHBvc3NpYmx5IGV4ZWN1dGVk
LiBJdCBtYXkgYmUgd29ydGh3aGlsZQorICAgICAgICAvLyB0byBmaXggdGhhdCwgYnV0IGZvciBu
b3cgSSdtIGxlYXZpbmcgaXQgYXMtaXMuCisgICAgICAgIHJldHVybiBBcnJheTo6Rm9yY2VFeGl0
OworICAgIH0KKyAgICAKKyAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihpbmRleCkgfHwgIWlz
Q2VsbFNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OkdlbmVyaWM7Cisg
ICAgCisgICAgLy8gUGFzcyB0aHJvdWdoIGFueSBhcnJheSBtb2RlcyB0aGF0IHdvdWxkIGhhdmUg
YmVlbiBkZWNpZGVkIGJ5IHRoZSBhcnJheSBwcm9maWxlLCBzaW5jZQorICAgIC8vIHRoZSBwcmVk
aWN0aW9ucyBvZiB0aGUgaW5wdXRzIHdpbGwgbm90IHRlbGwgdXMgYW55dGhpbmcgdXNlZnVsIHRo
YXQgd2UgZGlkbid0IGFscmVhZHkKKyAgICAvLyBnZXQgZnJvbSB0aGUgYXJyYXkgcHJvZmlsZS4K
KyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czoKKyAgICAgICAgcmV0dXJuIGFycmF5TW9kZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgCisgICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oYmFzZSkpCisgICAg
ICAgIHJldHVybiBBcnJheTo6U3RyaW5nOworICAgIAorICAgIGlmIChpc0FyZ3VtZW50c1NwZWN1
bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OkFyZ3VtZW50czsKKyAgICAKKyAg
ICBpZiAoaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5
OjpJbnQ4QXJyYXk7CisgICAgCisgICAgaWYgKGlzSW50MTZBcnJheVNwZWN1bGF0aW9uKGJhc2Up
KQorICAgICAgICByZXR1cm4gQXJyYXk6OkludDE2QXJyYXk7CisgICAgCisgICAgaWYgKGlzSW50
MzJBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OkludDMyQXJy
YXk7CisgICAgCisgICAgaWYgKGlzVWludDhBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAg
ICByZXR1cm4gQXJyYXk6OlVpbnQ4QXJyYXk7CisgICAgCisgICAgaWYgKGlzVWludDhDbGFtcGVk
QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVaW50OENsYW1w
ZWRBcnJheTsKKyAgICAKKyAgICBpZiAoaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQor
ICAgICAgICByZXR1cm4gQXJyYXk6OlVpbnQxNkFycmF5OworICAgIAorICAgIGlmIChpc1VpbnQz
MkFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgIHJldHVybiBBcnJheTo6VWludDMyQXJy
YXk7CisgICAgCisgICAgaWYgKGlzRmxvYXQzMkFycmF5U3BlY3VsYXRpb24oYmFzZSkpCisgICAg
ICAgIHJldHVybiBBcnJheTo6RmxvYXQzMkFycmF5OworICAgIAorICAgIGlmIChpc0Zsb2F0NjRB
cnJheVNwZWN1bGF0aW9uKGJhc2UpKQorICAgICAgICByZXR1cm4gQXJyYXk6OkZsb2F0NjRBcnJh
eTsKKyAgICAKKyAgICByZXR1cm4gQXJyYXk6OkdlbmVyaWM7Cit9CisKK2Jvb2wgbW9kZUFscmVh
ZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHZhbHVlLCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7
CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
KyAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAg
ICAgCisgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5o
YXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCktPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm87CisgICAgICAg
IAorICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIGlzQXJndW1lbnRz
U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgorICAgICAgICByZXR1cm4gaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICByZXR1
cm4gaXNJbnQxNkFycmF5U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIGlzSW50MzJBcnJheVNwZWN1
bGF0aW9uKHZhbHVlLm1fdHlwZSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJy
YXk6CisgICAgICAgIHJldHVybiBpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUp
OworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAg
cmV0dXJuIGlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworICAg
ICAgICAKKyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIGlzVWlu
dDE2QXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBjYXNlIEFy
cmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIGlzVWludDMyQXJyYXlTcGVjdWxhdGlv
bih2YWx1ZS5tX3R5cGUpOworCisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAg
ICByZXR1cm4gaXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworCisgICAg
Y2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICByZXR1cm4gaXNGbG9hdDY0QXJyYXlT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpVbmRl
Y2lkZWQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhB
cnJheTo6TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQXJyYXk6
OlVuZGVjaWRlZDoKKyAgICAgICAgcmV0dXJuICJVbmRlY2lkZWQiOworICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6CisgICAgICAgIHJldHVybiAiR2VuZXJpYyI7CisgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OgorICAgICAgICByZXR1cm4gIkZvcmNlRXhpdCI7CisgICAgY2FzZSBBcnJheTo6U3Ry
aW5nOgorICAgICAgICByZXR1cm4gIlN0cmluZyI7CisgICAgY2FzZSBBcnJheTo6SlNBcnJheToK
KyAgICAgICAgcmV0dXJuICJKU0FycmF5IjsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZC
b3VuZHM6CisgICAgICAgIHJldHVybiAiSlNBcnJheU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6CisgICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKKyAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiAiSW50OEFycmF5IjsKKyAgICBjYXNlIEFy
cmF5OjpJbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gIkludDE2QXJyYXkiOworICAgIGNhc2Ug
QXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgIHJldHVybiAiSW50MzJBcnJheSI7CisgICAgY2Fz
ZSBBcnJheTo6VWludDhBcnJheToKKyAgICAgICAgcmV0dXJuICJVaW50OEFycmF5IjsKKyAgICBj
YXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgcmV0dXJuICJVaW50OENsYW1w
ZWRBcnJheSI7CisgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiAi
VWludDE2QXJyYXkiOworICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAgICByZXR1
cm4gIlVpbnQzMkFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAg
IHJldHVybiAiRmxvYXQzMkFycmF5IjsKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Cisg
ICAgICAgIHJldHVybiAiRmxvYXQ2NEFycmF5IjsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBC
ZXR0ZXIgdG8gcmV0dXJuIHNvbWV0aGluZyB0aGVuIGl0IGlzIHRvIGNyYXNoLiBSZW1lbWJlciwg
dGhpcyBtZXRob2QKKyAgICAgICAgLy8gaXMgYmVpbmcgY2FsbGVkIGZyb20gb3VyIG1haW4gZGlh
Z25vc3RpYyB0b29sLCB0aGUgSVIgZHVtcGVyLiBJdCdzIGxpa2UKKyAgICAgICAgLy8gYSBzdGFj
ayB0cmFjZS4gU28gaWYgd2UgZ2V0IGhlcmUgdGhlbiBwcm9iYWJseSBzb21ldGhpbmcgaGFzIGFs
cmVhZHkKKyAgICAgICAgLy8gZ29uZSB3cm9uZy4KKyAgICAgICAgcmV0dXJuICJVbmtub3duISI7
CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBcnJheU1vZGVfaAorI2RlZmlu
ZSBERkdBcnJheU1vZGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIlNwZWN1
bGF0ZWRUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0
IEFic3RyYWN0VmFsdWU7CisKKy8vIFVzZSBhIG5hbWVzcGFjZSArIGVudW0gaW5zdGVhZCBvZiBl
bnVtIGFsb25lIHRvIGF2b2lkIHRoZSBuYW1lc3BhY2UgY29sbGlzaW9uCisvLyB0aGF0IHdvdWxk
IG90aGVyd2lzZSBvY2N1ciwgc2luY2Ugd2Ugc2F5IHRoaW5ncyBsaWtlICJJbnQ4QXJyYXkiIGFu
ZCAiSlNBcnJheSIKKy8vIGluIGxvdHMgb2Ygb3RoZXIgcGxhY2VzLCB0byBtZWFuIHN1YnRseSBk
aWZmZXJlbnQgdGhpbmdzLgorbmFtZXNwYWNlIEFycmF5IHsKK2VudW0gTW9kZSB7CisgICAgVW5k
ZWNpZGVkLCAvLyBJbXBsaWVzIHRoYXQgd2UgbmVlZCBwcmVkaWN0aW9ucyB0byBkZWNpZGUuIFdl
IHdpbGwgbmV2ZXIgZ2V0IHRvIHRoZSBiYWNrZW5kIGluIHRoaXMgbW9kZS4KKyAgICBGb3JjZUV4
aXQsIC8vIEltcGxpZXMgdGhhdCB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGV4ZWN1dGUgdGhpcyBv
cGVyYXRpb24sIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCisgICAgR2VuZXJpYywKKyAgICBT
dHJpbmcsCisgICAgSlNBcnJheSwKKyAgICBKU0FycmF5T3V0T2ZCb3VuZHMsCisgICAgQXJndW1l
bnRzLAorICAgIEludDhBcnJheSwKKyAgICBJbnQxNkFycmF5LAorICAgIEludDMyQXJyYXksCisg
ICAgVWludDhBcnJheSwKKyAgICBVaW50OENsYW1wZWRBcnJheSwKKyAgICBVaW50MTZBcnJheSwK
KyAgICBVaW50MzJBcnJheSwKKyAgICBGbG9hdDMyQXJyYXksCisgICAgRmxvYXQ2NEFycmF5Cit9
OworfSAvLyBuYW1lc3BhY2UgQXJyYXkKKworQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5
TW9kZXMgbW9kZXMsIGJvb2wgbWFrZVNhZmUpOworCitBcnJheTo6TW9kZSByZWZpbmVBcnJheU1v
ZGUoQXJyYXk6Ok1vZGUsIFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4
KTsKKworYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYsIEFycmF5OjpNb2Rl
KTsKKworY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlKTsKKworaW5saW5lIGJv
b2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgY2FzZSBBcnJheTo6
Rm9yY2VFeGl0OgorICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorfQorCitpbmxpbmUgQXJyYXk6Ok1vZGUgbW9kZUZvclB1dChBcnJh
eTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNl
IEFycmF5OjpTdHJpbmc6CisgICAgICAgIHJldHVybiBBcnJheTo6R2VuZXJpYzsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJu
IEFycmF5OjpHZW5lcmljOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGFy
cmF5TW9kZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIG1vZGVzQ29tcGF0aWJsZUZvclN0b3Jh
Z2VMb2FkKEFycmF5OjpNb2RlIGxlZnQsIEFycmF5OjpNb2RlIHJpZ2h0KQoreworICAgIGlmIChs
ZWZ0ID09IHJpZ2h0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBib29sIGxlZnRJ
c0pTQXJyYXkgPQorICAgICAgICBsZWZ0ID09IEFycmF5OjpKU0FycmF5CisgICAgICAgIHx8IGxl
ZnQgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczsKKyAgICAKKyAgICBib29sIHJpZ2h0SXNK
U0FycmF5ID0KKyAgICAgICAgcmlnaHQgPT0gQXJyYXk6OkpTQXJyYXkKKyAgICAgICAgfHwgcmln
aHQgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczsKKyAgICAKKyAgICBpZiAobGVmdElzSlNB
cnJheSAmJiByaWdodElzSlNBcnJheSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6
Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpVbmRl
Y2lkZWQ6CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgIGNhc2UgQXJyYXk6OkdlbmVy
aWM6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQXJyYXlNb2RlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlz
aW9uIDEyNjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXJyYXlD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAiREZHQnl0ZUNv
ZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkdldEJ5
SWRTdGF0dXMuaCIKQEAgLTgxNiw2ICs4MTcsMzYgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IHJldHVybiBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRQcm9maWxpbmdJ
bmRleCk7CiAgICAgfQorICAgIAorICAgIEFycmF5OjpNb2RlIGdldEFycmF5TW9kZVdpdGhvdXRP
U1JFeGl0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVJbmRleCBiYXNlKQor
ICAgIHsKKyAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9u
WzRdLnUuYXJyYXlQcm9maWxlOworICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24oKTsKKyAgICAgICAgaWYgKHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpCisg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKKyAgICAg
ICAgCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBp
ZiAobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5udW1iZXJPZlJhcmVDYXNlUHJv
ZmlsZXMoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIlNsb3cgY2FzZSBwcm9maWxlIGZvciBiYyMl
dTogJXVcbiIsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9j
b3VudGVyKTsKKyAgICAgICAgZGF0YUxvZygiQXJyYXkgcHJvZmlsZSBmb3IgYmMjJXU6ICVwJXMs
ICV1XG4iLCBtX2N1cnJlbnRJbmRleCwgcHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSwgcHJv
ZmlsZS0+c3RydWN0dXJlSXNQb2x5bW9ycGhpYygpID8gIiAocG9seW1vcnBoaWMpIiA6ICIiLCBw
cm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAg
IGJvb2wgbWFrZVNhZmUgPQorICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgIHx8
IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIE91dE9mQm91bmRzKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmcm9tT2JzZXJ2ZWQo
cHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCksIG1ha2VTYWZlKTsKKyAgICB9CisgICAgCisg
ICAgQXJyYXk6Ok1vZGUgZ2V0QXJyYXlNb2RlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIE5vZGVJbmRleCBiYXNlKQorICAgIHsKKyAgICAgICAgQXJyYXk6Ok1vZGUgcmVzdWx0ID0g
Z2V0QXJyYXlNb2RlV2l0aG91dE9TUkV4aXQoY3VycmVudEluc3RydWN0aW9uLCBiYXNlKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChyZXN1bHQgPT0gQXJyYXk6OkZvcmNlRXhpdCkKKyAgICAgICAg
ICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQogCiAgICAgTm9kZUluZGV4IG1ha2VTYWZlKE5vZGVJbmRleCBub2RlSW5k
ZXgpCiAgICAgewpAQCAtMTU0OCw4ICsxNTc5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljKGJvbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAg
ICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJh
bmQoMSk7Ci0gICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gYWRkVG9HcmFwaChHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGluZGV4T3BlcmFu
ZCkpOwotICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJD
b2RlQXQsIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSwgc3RvcmFn
ZSk7CisgICAgICAgIE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNv
ZGVBdCwgT3BJbmZvKEFycmF5OjpTdHJpbmcpLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMy
KGluZGV4T3BlcmFuZCkpOwogCiAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAgICAgICAgICAg
c2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKQEAgLTE1NjUsOCArMTU5NSw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICBpbnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1
bWVudFRvT3BlcmFuZCgxKTsKLSAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBhZGRUb0dyYXBo
KEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIo
aW5kZXhPcGVyYW5kKSk7Ci0gICAgICAgIE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3JhcGgo
U3RyaW5nQ2hhckF0LCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGluZGV4T3BlcmFuZCks
IHN0b3JhZ2UpOworICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmlu
Z0NoYXJBdCwgT3BJbmZvKEFycmF5OjpTdHJpbmcpLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0lu
dDMyKGluZGV4T3BlcmFuZCkpOwogCiAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAgICAgICAg
ICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKQEAgLTIxNDgsMTMgKzIxNzcsOSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9k
ZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhc2UpOwogICAgICAgICAgICAgTm9kZUluZGV4IHByb3Bl
cnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9m
aWxlOwotICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7Ci0g
ICAgICAgICAgICBpZiAocHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAg
ICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2UsIGJhc2UsIHByb3BlcnR5KTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBnZXRC
eVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBiYXNlLCBwcm9wZXJ0eSwgcHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgICAgIE5vZGVJbmRl
eCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUpLCBPcElu
Zm8ocHJlZGljdGlvbiksIGJhc2UsIHByb3BlcnR5KTsKICAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZhbCk7CiAKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2dldF9ieV92YWwpOwpAQCAtMjE2MiwyNiArMjE4NywxNiBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9wdXRfYnlf
dmFsOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKTsKKworICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0g
Z2V0QXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFzZSk7CisgICAgICAgICAgICAKICAg
ICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwot
ICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7Ci0gICAgICAg
ICAgICBpZiAocHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLQotI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2coIlNsb3cg
Y2FzZSBwcm9maWxlIGZvciBiYyMldTogJXVcbiIsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0
KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBib29s
IG1ha2VTYWZlID0KLSAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPmNvdWxkVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQotICAgICAgICAgICAgICAg
IHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIE91dE9mQm91bmRzKTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoYmFzZSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CiAgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKE5v
ZGU6OlZhckFyZywgbWFrZVNhZmUgPyBQdXRCeVZhbFNhZmUgOiBQdXRCeVZhbCwgT3BJbmZvKDAp
LCBPcEluZm8oMCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIFB1dEJ5
VmFsLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKDApKTsKIAogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcHV0X2J5X3ZhbCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDgg
KzI4NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZTog
eworICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgICAgICAgICAgaWYg
KCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9Ob2RlOwogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDAp
ID09IGNoaWxkMSAmJiBjYW5vbmljYWxpemUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkg
PT0gY2Fub25pY2FsaXplKGNoaWxkMikpCkBAIC0zNjUsNyArMzY0LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewogICAgICAgICAgICAg
ICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4g
YXJyYXkgd2l0aCBhbgogICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVu
IGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKQEAgLTQwOSw3ICs0
MDcsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgIGNhc2Ug
UHV0QnlWYWxTYWZlOgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5v
ZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhh
dCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAgICAgICAgICAgIC8v
IGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0
cnVjdHVyZQpAQCAtNTE1LDcgKzUxMiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OgotICAgICAgICAgICAgY2FzZSBQdXRCeVZhbFNhZmU6CiAgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0
QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAg
ICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUg
Zm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCkBAIC01NjAsNyArNTU2LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxp
YXM6CiAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgY2FzZSBQdXRCeVZh
bFNhZmU6CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3Mg
YWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdl
ciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJl
CkBAIC02MTMsNyArNjA4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5i
eVZhbElzUHVyZShub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBz
cGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAg
ICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQg
dG8gY2F1c2UgYSBzdHJ1Y3R1cmUKQEAgLTkyNSwxNyArOTE5LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgY2FzZSBBcml0aE1heDoKICAgICAgICAgY2FzZSBB
cml0aFNxcnQ6Ci0gICAgICAgIGNhc2UgR2V0SW50OEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNl
IEdldEludDE2QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0SW50MzJBcnJheUxlbmd0aDoK
LSAgICAgICAgY2FzZSBHZXRVaW50OEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQ4
Q2xhbXBlZEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQxNkFycmF5TGVuZ3RoOgot
ICAgICAgICBjYXNlIEdldFVpbnQzMkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEZsb2F0
MzJBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRGbG9hdDY0QXJyYXlMZW5ndGg6CiAgICAg
ICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKICAgICAg
ICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKICAg
ICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgpAQCAtMTEwMyw4ICsxMDg3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihu
b2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAg
Y2FzZSBQdXRCeVZhbFNhZmU6IHsKKyAgICAgICAgY2FzZSBQdXRCeVZhbDogewogICAgICAgICAg
ICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICAg
ICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwogICAgICAgICAg
ICAgaWYgKGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbY2hpbGQx
XS5wcmVkaWN0aW9uKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAJKHJldmlzaW9uIDEyNjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDk3ICs3NCw4OSBAQCBw
cml2YXRlOgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEdl
dEJ5SWQ6IHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbm9kZTsKKyAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9ncmFwaFttX2NvbXBpbGVJ
bmRleF0ucHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkgIT0g
Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGJvb2wgaXNBcnJheSA9IGlzQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBib29sIGlzQXJndW1l
bnRzID0gaXNBcmd1bWVudHNTcGVjdWxhdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRp
Y3Rpb24oKSk7Ci0gICAgICAgICAgICBib29sIGlzU3RyaW5nID0gaXNTdHJpbmdTcGVjdWxhdGlv
bihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBib29s
IGlzSW50OEFycmF5ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQ4
QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNJbnQxNkFycmF5ID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCk7Ci0gICAgICAgICAgICBib29sIGlz
SW50MzJBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MzJB
cnJheSgpOwotICAgICAgICAgICAgYm9vbCBpc1VpbnQ4QXJyYXkgPSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNV
aW50OENsYW1wZWRBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRl
VWludDhDbGFtcGVkQXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNVaW50MTZBcnJheSA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKTsKLSAgICAg
ICAgICAgIGJvb2wgaXNVaW50MzJBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxk
U3BlY3VsYXRlVWludDMyQXJyYXkoKTsKLSAgICAgICAgICAgIGJvb2wgaXNGbG9hdDMyQXJyYXkg
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpOwot
ICAgICAgICAgICAgYm9vbCBpc0Zsb2F0NjRBcnJheSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
c2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCk7Ci0gICAgICAgICAgICBpZiAoIWlzQXJyYXkg
JiYgIWlzQXJndW1lbnRzICYmICFpc1N0cmluZyAmJiAhaXNJbnQ4QXJyYXkgJiYgIWlzSW50MTZB
cnJheSAmJiAhaXNJbnQzMkFycmF5ICYmICFpc1VpbnQ4QXJyYXkgJiYgIWlzVWludDhDbGFtcGVk
QXJyYXkgJiYgIWlzVWludDE2QXJyYXkgJiYgIWlzVWludDMyQXJyYXkgJiYgIWlzRmxvYXQzMkFy
cmF5ICYmICFpc0Zsb2F0NjRBcnJheSkKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRl
bnRpZmllcihub2RlUHRyLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBk
YXRhTG9nKCIgIEAldSAtPiAlcyIsIG1fY29tcGlsZUluZGV4LCBpc0FycmF5ID8gIkdldEFycmF5
TGVuZ3RoIiA6ICJHZXRTdHJpbmdMZW5ndGgiKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKGlz
QXJyYXkpIHsKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldEFycmF5TGVuZ3RoKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQobm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7Ci0g
ICAgICAgICAgICAgICAgbm9kZS5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS5jb2RlT3JpZ2lu
KS0+Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmICghYXJyYXlQcm9maWxlKQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJy
YXlQcm9maWxlID0gCisgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlUHRyLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAorICAgICAgICAgICAgICAg
ICAgICBub2RlUHRyLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQXJy
YXk6Ok1vZGUgYXJyYXlNb2RlID0gQXJyYXk6OlVuZGVjaWRlZDsKKyAgICAgICAgICAgIGlmIChh
cnJheVByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIGlmICghYXJyYXlQcm9maWxlLT5oYXNE
ZWZpbml0ZVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoLnJlZihub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBOb2Rl
IGNoZWNrU3RydWN0dXJlKENoZWNrU3RydWN0dXJlLCBub2RlLmNvZGVPcmlnaW4sIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkp
KSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVy
ZS5yZWYoKTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hlY2tTdHJ1Y3R1cmVJbmRleCA9
IG1fZ3JhcGguc2l6ZSgpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrU3Ry
dWN0dXJlKTsKLSAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleElu
QmxvY2ssIGNoZWNrU3RydWN0dXJlSW5kZXgpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGFycmF5TW9kZSA9IHJlZmluZUFycmF5TW9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCksIGZh
bHNlKSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCksCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRp
Y3Rpb24oKSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobW9kZVN1
cHBvcnRzTGVuZ3RoKGFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgJiYgYXJyYXlQcm9m
aWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgucmVmKG5vZGVQdHItPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSBjaGVj
a1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkp
LCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tT
dHJ1Y3R1cmUucmVmKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGVja1N0cnVj
dHVyZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
YXBwZW5kKGNoZWNrU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBjaGVja1N0cnVjdHVyZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFycmF5TW9k
ZSA9IHJlZmluZUFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlNb2RlLAorICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKKyAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc0FyZ3VtZW50cykKLSAgICAgICAgICAg
ICAgICBub2RlLnNldE9wKEdldEFyZ3VtZW50c0xlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChpc1N0cmluZykKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldFN0cmluZ0xlbmd0aCk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0ludDhBcnJheSkKLSAgICAgICAgICAgICAgICBub2Rl
LnNldE9wKEdldEludDhBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0ludDE2
QXJyYXkpCi0gICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRJbnQxNkFycmF5TGVuZ3RoKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50MzJBcnJheSkKLSAgICAgICAgICAgICAgICBub2Rl
LnNldE9wKEdldEludDMyQXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNVaW50
OEFycmF5KQotICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0VWludDhBcnJheUxlbmd0aCk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1VpbnQ4Q2xhbXBlZEFycmF5KQotICAgICAgICAgICAg
ICAgIG5vZGUuc2V0T3AoR2V0VWludDhDbGFtcGVkQXJyYXlMZW5ndGgpOwotICAgICAgICAgICAg
ZWxzZSBpZiAoaXNVaW50MTZBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldFVp
bnQxNkFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzVWludDMyQXJyYXkpCi0g
ICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRVaW50MzJBcnJheUxlbmd0aCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChpc0Zsb2F0MzJBcnJheSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9w
KEdldEZsb2F0MzJBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0Zsb2F0NjRB
cnJheSkKLSAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldEZsb2F0NjRBcnJheUxlbmd0aCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICAvLyBObyBsb25nZXIgTXVzdEdlbmVyYXRlCi0gICAgICAgICAgICBBU1NF
UlQobm9kZS5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBub2RlLmNs
ZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICBpZiAoIW1vZGVTdXBwb3J0
c0xlbmd0aChhcnJheU1vZGUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
bm9kZVB0ci0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGVQ
dHItPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgIG5vZGVQdHItPmNs
ZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1v
ZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpCi0gICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAgICAgfHwgbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkgewotICAgICAgICAg
ICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoTm9wKTsKLSAgICAgICAgICAgICAgICBt
X2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFw
aC5jbGVhckFuZERlcmVmQ2hpbGQyKG5vZGUpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xl
YXJBbmREZXJlZkNoaWxkMyhub2RlKTsKLSAgICAgICAgICAgICAgICBub2RlLnNldFJlZkNvdW50
KDApOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCisgICAg
ICAgICAgICAgICAgcmVmaW5lQXJyYXlNb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLmFy
cmF5TW9kZSgpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5w
cmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIC8vIFByZWRpY3Rpb25zIHNob3VsZCBvbmx5IGJl
Y29tZSBtb3JlLCByYXRoZXIgdGhhbiBsZXNzLCByZWZpbmVkLiBIZW5jZQorICAgICAgICAgICAg
Ly8gaWYgd2Ugd2VyZSBldmVyIGFibGUgdG8gQ1NFIHRoZSBzdG9yYWdlIHBvaW50ZXIgZm9yIHRo
aXMgb3BlcmF0aW9uLAorICAgICAgICAgICAgLy8gdGhlbiB3ZSBzaG91bGQgYWx3YXlzIGNvbnRp
bnVlIHRvIGJlIGFibGUgdG8gZG8gc28uCisgICAgICAgICAgICBBU1NFUlQoY2FuQ1NFU3RvcmFn
ZShub2RlLmFycmF5TW9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAg
Y2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7Ci0gICAgICAgICAgICBpZiAoISFub2RlLmNoaWxkMygp
ICYmIG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ub3AoKSA9PSBOb3ApCi0gICAgICAgICAgICAgICAg
bm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgIG5vZGUuc2V0QXJy
YXlNb2RlKAorICAgICAgICAgICAgICAgIHJlZmluZUFycmF5TW9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS5hcnJheU1vZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChjYW5DU0VTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUuY2hpbGQzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9k
ZS5jaGlsZDMoKV0ub3AoKSA9PSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1vZGVzQ29tcGF0aWJsZUZvclN0b3JhZ2VMb2FkKG1fZ3JhcGhb
bm9kZS5jaGlsZDMoKV0uYXJyYXlNb2RlKCksIG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9u
J3QgdXNlIHRoZSBub2RlIHJlZmVyZW5jZSBhZnRlciB3ZSBkbyB0aGUgYXBwZW5kLgorICAgICAg
ICAgICAgICAgICAgICBOb2RlIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgICAg
ICAgICAgICAgICAgICBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBub2RlLmNvZGVPcmlnaW4s
IE9wSW5mbyhub2RlLmFycmF5TW9kZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1fZ3JhcGgu
c2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygpID0gRWRn
ZShnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmFwcGVuZChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBuID0gMjsgbi0tOykKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgucmVmKGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2luZGV4SW5CbG9jaywgZ2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFNlZSBhYm92ZS4gQ29udGludWVkIGZpeHVwIG9m
IHRoZSBncmFwaCBzaG91bGQgbm90IHJlZ3Jlc3Mgb3VyIGFiaWxpdHkKKyAgICAgICAgICAgICAg
ICAvLyB0byBzcGVjdWxhdGUuCisgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLmNoaWxkMygp
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKQEAgLTMzMywyNiArMzI1LDMyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAg
IGNhc2UgUHV0QnlWYWxTYWZlOiB7CisgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKICAgICAgICAg
ICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAg
ICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAg
ICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAg
ICAgIGlmICghbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtjaGlsZDJd
LnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICgh
bV9ncmFwaFtjaGlsZDJdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGlmIChpc0FjdGlvbmFibGVJbnRNdXRhYmxlQXJyYXlTcGVj
dWxhdGlvbihtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoW2NoaWxkM10uaXNDb25zdGFudCgpKQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIG5vZGUuc2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIHJl
ZmluZUFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKSwgbV9n
cmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSwgbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJh
eU1vZGUoKSkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6
VWludDE2QXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgyKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChpc0FjdGlvbmFibGVGbG9hdE11dGFibGVBcnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbY2hp
bGQxXS5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJy
YXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CiAgICAgICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgyKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDEyNjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDEwIEBAIHZvaWQgR3Jh
cGg6OmR1bXAoY29uc3QgY2hhciogcHJlZml4LCBOb2QKICAgICAgICAgZGF0YUxvZygiJXMlcyIs
IGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGVGbGFnc0FzU3RyaW5nKG5vZGUuZmxhZ3MoKSkp
OwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CisgICAgaWYgKG5vZGUuaGFzQXJy
YXlNb2RlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiJXMlcyIsIGhhc1ByaW50ZWQgPyAiLCAiIDog
IiIsIG1vZGVUb1N0cmluZyhub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOworICAgIH0KICAgICBpZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkgewogICAgICAgICBk
YXRhTG9nKCIlc3ZhciV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS52YXJOdW1iZXIo
KSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTI2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODgsNDggKzQ4OCwyMCBAQCBwdWJs
aWM6CiAgICAgCiAgICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBub2RlKQogICAgIHsKLSAgICAg
ICAgc3dpdGNoIChub2RlLm9wKCkpIHsKLSAgICAgICAgY2FzZSBQdXRCeVZhbDogewotICAgICAg
ICAgICAgaWYgKCFhdCh2YXJBcmdDaGlsZChub2RlLCAxKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSBhdCh2YXJBcmdDaGlsZChub2RlLCAwKSkucHJlZGljdGlvbigp
OwotICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0QnlW
YWxTYWZlOiB7Ci0gICAgICAgICAgICBpZiAoIWF0KHZhckFyZ0NoaWxkKG5vZGUsIDEpKS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGF0KHZhckFyZ0NoaWxkKG5vZGUs
IDApKS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZU11dGFibGVB
cnJheVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGlmIChpc0FycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAg
ICAgICAgIGlmICghYXQodmFyQXJnQ2hpbGQobm9kZSwgMSkpLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gYXQodmFyQXJnQ2hpbGQobm9kZSwgMCkpLnByZWRpY3Rpb24o
KTsKLSAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlTXV0YWJsZUFycmF5U3BlY3VsYXRpb24o
cHJlZGljdGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldEJ5
VmFsOiB7Ci0gICAgICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigp
OwotICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVBcnJheVNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgY2FzZSBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5
VmFsOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKKyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0QnlWYWwpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNTQ5LDcgKzUyMSw2IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiAhaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSk7CiAgICAgICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0QnlW
YWxTYWZlOgogICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgICAgICByZXR1cm4g
IWJ5VmFsSXNQdXJlKG5vZGUpOwogICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEyNjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRG
R0FkamFjZW5jeUxpc3QuaCIKKyNpbmNsdWRlICJERkdBcnJheU1vZGUuaCIKICNpbmNsdWRlICJE
RkdDb21tb24uaCIKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdOb2Rl
VHlwZS5oIgpAQCAtNzMyLDYgKzczMywzNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVy
biBtX29wSW5mbzsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNBcnJheU1vZGUoKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZToKKyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBQdXRC
eVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAgICBjYXNlIEdldEJ5VmFs
OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29k
ZUF0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQXJyYXk6Ok1v
ZGUgYXJyYXlNb2RlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBcnJheU1vZGUoKSk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBcnJheTo6TW9kZT4obV9vcEluZm8pOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldEFycmF5TW9kZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAg
eworICAgICAgICBBU1NFUlQoaGFzQXJyYXlNb2RlKCkpOworICAgICAgICBtX29wSW5mbyA9IGFy
cmF5TW9kZTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNWaXJ0dWFsUmVnaXN0ZXIoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZp
c2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgLyogb3Bjb2RlcyB1c2UgVmFyQXJncyBiZWF1c2UgdGhleSBtYXkgaGF2
ZSB1cCB0byA0IGNoaWxkcmVuLiAqL1wKICAgICBtYWNybyhHZXRCeVZhbCwgTm9kZVJlc3VsdEpT
IHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwKICAgICBtYWNybyhQdXRC
eVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU1pZ2h0Q2xvYmJl
cikgXAotICAgIG1hY3JvKFB1dEJ5VmFsU2FmZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNW
YXJBcmdzIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKFB1dEJ5VmFsQWxpYXMsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNaWdodENsb2JiZXIpIFwKICAg
ICBtYWNybyhHZXRCeUlkLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNs
b2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhHZXRCeUlkRmx1c2gsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXApAQCAtMTQzLDE3ICsxNDIsNiBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0QnlPZmZzZXQs
IE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFB1dEJ5T2Zmc2V0LCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oR2V0QXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1h
Y3JvKEdldEFyZ3VtZW50c0xlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgbWFjcm8oR2V0
U3RyaW5nTGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICBtYWNybyhHZXRJbnQ4QXJyYXlM
ZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKEdldEludDE2QXJyYXlMZW5ndGgs
IE5vZGVSZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKEdldEludDMyQXJyYXlMZW5ndGgsIE5vZGVS
ZXN1bHRJbnQzMikgXAotICAgIG1hY3JvKEdldFVpbnQ4QXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJ
bnQzMikgXAotICAgIG1hY3JvKEdldFVpbnQ4Q2xhbXBlZEFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0
SW50MzIpIFwKLSAgICBtYWNybyhHZXRVaW50MTZBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMy
KSBcCi0gICAgbWFjcm8oR2V0VWludDMyQXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAot
ICAgIG1hY3JvKEdldEZsb2F0MzJBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAg
bWFjcm8oR2V0RmxvYXQ2NEFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNy
byhHZXRTY29wZUNoYWluLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRTY29wZWRWYXIs
IE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRTY29wZWRW
YXIsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEyNjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MTIsMTcgKzYxMiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQ
dXRCeVZhbEFsaWFzOgogICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICBjYXNl
IEdldEFyZ3VtZW50c0xlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRJbnQ4QXJyYXlMZW5ndGg6Ci0g
ICAgICAgIGNhc2UgR2V0SW50MTZBcnJheUxlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRJbnQzMkFy
cmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6Ci0gICAgICAgIGNh
c2UgR2V0VWludDhDbGFtcGVkQXJyYXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0VWludDE2QXJy
YXlMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0VWludDMyQXJyYXlMZW5ndGg6Ci0gICAgICAgIGNh
c2UgR2V0RmxvYXQzMkFycmF5TGVuZ3RoOgotICAgICAgICBjYXNlIEdldEZsb2F0NjRBcnJheUxl
bmd0aDoKLSAgICAgICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6CiAgICAgICAgIGNhc2UgSW50MzJU
b0RvdWJsZToKICAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgICAgICBjYXNlIEdldExv
Y2FsVW5saW5rZWQ6CkBAIC02MzcsNyArNjI2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgY2FzZSBQdXRCeVZhbFNhZmU6
CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW21fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSldLm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc051bWJlciB8IE5vZGVVc2VkQXNJbnQpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW21fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMildLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1Zh
bHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTI2MjcxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM0MSwxMiArMjM0MSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBpZiAoIW5vZGUucHJl
ZGljdGlvbigpIHx8ICFhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgfHwgIWF0KG5vZGUu
Y2hpbGQyKCkpLnByZWRpY3Rpb24oKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNlIEFycmF5
OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSB8fCAoIW5vZGUuY2hpbGQzKCkgJiYgIWF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZUFyZ3VtZW50cygpKSkgeworICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOyAv
LyBTYXZlIGEgcmVnaXN0ZXIsIHNwZWN1bGF0ZSBjZWxsLiBXZSdsbCBwcm9iYWJseSBiZSByaWdo
dC4KICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtMjM2MSwx
MjUgKzIzNjIsOTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kczogeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
dG9yYWdlLmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkFyZ3VtZW50cyhub2RlKTsKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBh
biBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAo
PCBtX3ZlY3Rvckxlbmd0aCkuCisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0
aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3By
KCk7CisgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGVjdWxhdGVkIHRoYXQgaXQn
cyBzb21lIGtpbmQgb2YgYXJyYXksIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWco
dGhpcyk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKwor
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0VGFnLmdwcigpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0
UGF5bG9hZC5ncHIoKSk7CisKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdw
cigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0
aW9uKCkgPT0gU3BlY1N0cmluZykgeworICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCks
IG5vZGUsIHNpemVvZihpbnQ4X3QpLCBpc0ludDhBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6
IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewotICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50
MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBpc0ludDE2QXJyYXlT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlw
ZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2lnbmVkVHlw
ZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQz
MkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheSht
X2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihp
bnQzMl90KSwgaXNJbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJh
eVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhBcnJheVNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNw
ZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwot
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhf
dCksIGlzVWludDhDbGFtcGVkQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFy
cmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgQXJyYXk6
OkFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5
cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQu
Z2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZf
dCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNp
emVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChh
dChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51
aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgaXNVaW50MTZB
cnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8g
Tm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlVWludDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
IHNpemVvZih1aW50MzJfdCksIGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSwgaXNGbG9hdDMy
QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/
IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcyk7Ci0g
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkg
ewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xv
YmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUp
LCBpc0Zsb2F0NjRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVj
Q2hlY2tzKTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUuY2hpbGQzKCkpOwotICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAK
LSAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMg
Y29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCi0gICAgICAgIC8v
IElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBz
a2lwIHRoZSBjaGVjay4KLSAgICAgICAgewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVn
ID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc3BlY3VsYXRlZCB0
aGF0IGl0J3Mgc29tZSBraW5kIG9mIGFycmF5LCBhdCB0aGlzIHBvaW50LgotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMp
OwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLQotICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIHJlc3VsdFRhZy5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0KLSAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRC
eVZhbDoKLSAgICBjYXNlIFB1dEJ5VmFsU2FmZTogeworICAgIGNhc2UgUHV0QnlWYWxBbGlhczog
ewogICAgICAgICBFZGdlIGNoaWxkMSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
MCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIDIpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFhdChjaGlsZDEpLnByZWRpY3Rpb24oKSB8
fCAhYXQoY2hpbGQyKS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlN
b2RlID0gbW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKTsKKyAgICAgICAgYm9vbCBhbHJlYWR5
SGFuZGxlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsK
KyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNlIEFycmF5OjpGb3Jj
ZUV4aXQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWF0KGNoaWxk
Mikuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICB8fCBhdChjaGlsZDEpLnNo
b3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
IHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlWYWwpOworICAgICAgICAg
ICAgCiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7
IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJp
Z2h0LgogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQyKTsK
ICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CkBAIC0yNDkz
LDIzMyArMjQ2MywxNDQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RN
b2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbENl
bGxOb25TdHJpY3QsIGJhc2VHUFIsIHByb3BlcnR5VGFnR1BSLCBwcm9wZXJ0eVBheWxvYWRHUFIs
IHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9
IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMik7Ci0gICAgICAgIGlmIChhdChjaGls
ZDEpLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3Jp
cHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCks
IGlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/
IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDE2
QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSht
X2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlzSW50MTZBcnJheVNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3Bl
Y0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5p
bnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
c2l6ZW9mKGludDMyX3QpLCBpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
Y2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJy
YXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hv
dWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgaXNV
aW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5v
VHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWdu
ZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDhD
bGFtcGVkQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBi
YXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBpc1VpbnQ4
Q2xhbXBlZEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/
IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5z
aWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3Vs
ZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIGlz
VWludDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8g
Tm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50
MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBpc1VpbnQzMkFycmF5U3Bl
Y3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5
cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9i
YWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCksIGlzRmxvYXQzMkFycmF5U3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sg
OiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcyk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg
ICAgCi0gICAgICAgIH0KKyAgICAgICAgaWYgKGFscmVhZHlIYW5kbGVkKQorICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVG
bG9hdDY0QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBl
ZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSksIGlzRmxvYXQ2NEFy
cmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRB
cnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcyk7Ci0gICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQyKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAgICAgIC8vIE1hcCBiYXNlLCBwcm9wZXJ0
eSAmIHZhbHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIuCiAg
ICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVRhZ1JlZyA9IHZh
bHVlLnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnID0gdmFsdWUucGF5
bG9hZEdQUigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigp
OwotICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlVGFnUmVnLCBjaGlsZDMs
IFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgfQog
Ci0gICAgICAgIHNwZWN1bGF0ZUFycmF5KGNoaWxkMSwgYmFzZVJlZyk7CisgICAgICAgIHNwZWN1
bGF0ZUFycmF5KGFycmF5TW9kZSwgY2hpbGQxLCBiYXNlUmVnKTsKIAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICBpZiAo
bm9kZS5vcCgpID09IFB1dEJ5VmFsKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7Ci0KLSAg
ICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgcHJvcGVydHkudXNlKCk7Ci0gICAgICAgIHZhbHVl
LnVzZSgpOwotICAgICAgICAKLSAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBzdG9yYWdlLgotICAg
ICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcp
OworICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgorICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAKLSAgICAgICAgLy8gQ2hl
Y2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVl
c0luVmVjdG9yLgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSk7Ci0gICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLQotICAgICAgICAvLyBJZiB3ZSdyZSB3cml0
aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgp
KSk7Ci0gICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwot
ICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsK
LSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0KLSAg
ICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOwotICAgICAgICBub3RI
b2xlVmFsdWUubGluaygmbV9qaXQpOwotCi0gICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0
aGUgYXJyYXkuCi0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdSZWcsIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAgICBtX2ppdC5z
dG9yZTMyKHZhbHVlUGF5bG9hZFJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUub3AoKSA9
PSBQdXRCeVZhbFNhZmUpIHsKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgYmV5b25kQXJy
YXlCb3VuZHMsIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5p
c1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3Qg
OiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAotICAgICAgICAg
ICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlVGFnUmVnLCB2
YWx1ZVBheWxvYWRSZWcpKTsKLSAgICAgICAgfQorICAgICAgICAgICAgR1BSUmVnIHZhbHVlVGFn
UmVnID0gdmFsdWUudGFnR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkUmVn
ID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAgICAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgRWRnZSBjaGls
ZDEgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICBFZGdlIGNo
aWxkMiA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgICAgIEVkZ2Ug
Y2hpbGQzID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghYXQoY2hpbGQxKS5wcmVkaWN0aW9uKCkgfHwgIWF0KGNoaWxkMikucHJlZGlj
dGlvbigpKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFk
ZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGlzQWN0aW9uYWJsZU11dGFi
bGVBcnJheVNwZWN1bGF0aW9uKGF0KGNoaWxkMSkucHJlZGljdGlvbigpKSk7Ci0gICAgICAgIEFT
U0VSVChhdChjaGlsZDIpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7Ci0KLSAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEpOwotICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQyKTsKLQotICAgICAgICBpZiAo
YXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgewotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihp
bnQ4X3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFNpZ25lZFR5cGVkQXJyYXkpOwogICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQx
NkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6
ZW9mKGludDE2X3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFNpZ25lZFR5cGVkQXJyYXkpOwot
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKLSAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKGludDMyX3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFNpZ25lZFR5cGVkQXJy
YXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFs
RGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFVuc2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWVU
YWdSZWcsIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcp
OworICAgICAgICAgICAgfQogCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0
ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0
b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwg
Tm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcp
OwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS5v
cCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFycmF5
IHN0b3JhZ2UuCisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICAg
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50
MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBOb1R5cGVkQXJyYXlTcGVj
Q2hlY2ssIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg
ICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNw
ZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIE5vVHlw
ZWRBcnJheVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KGNoaWxk
MSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihm
bG9hdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjayk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOworICAgICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJh
eSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAgICAgICAg
ICAgdmFsdWUudXNlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdldCB0aGUgYXJy
YXkgc3RvcmFnZS4KKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojpz
dG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sgaWYg
d2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0luVmVj
dG9yLgorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworCisgICAgICAgICAgICAvLyBJZiB3ZSdy
ZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbGVuZ3RoKSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBw
cm9wZXJ0eVJlZyk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcHJvcGVydHlSZWcpOworCisgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICBub3RIb2xlVmFsdWUubGluaygmbV9qaXQpOworCisg
ICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgorICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5
bG9hZFJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSkpOworICAgICAgICAKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpT
QXJyYXlPdXRPZkJvdW5kcykgeworICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAg
ICAgICBiZXlvbmRBcnJheUJvdW5kcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
aml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9u
U3RyaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3Bl
cnR5UmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9q
aXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSwgTm9UeXBlZEFycmF5U3BlY0NoZWNr
KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgICAgICAvLyBGSVhNRTogd2UgY291bGQg
YXQgc29tZSBwb2ludCBtYWtlIHRoaXMgd29yay4gUmlnaHQgbm93IHdlJ3JlIGFzc3VtaW5nIHRo
YXQgdGhlIHJlZ2lzdGVyCisgICAgICAgICAgICAvLyBwcmVzc3VyZSB3b3VsZCBiZSB0b28gZ3Jl
YXQuCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5p
bnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFy
cmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9m
KGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1
aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVp
bnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6
VWludDE2QXJyYXk6CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJy
YXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJh
eTo6VWludDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFy
cmF5KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3By
KCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVk
QXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRU
eXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBi
YXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJy
YXk6CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQu
Z2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3Bl
cnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChh
dChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUFycmF5KCkpOwotCi0gICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMsIGJhc2UpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0KLSAgICAgICAg
d3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLnRhZ0dQUigpLCBjaGlsZDMsIFdyaXRlQmFycmll
ckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoUmVnKTsKLQotICAgICAgICAvLyBHZXQgdGhlIGFy
cmF5IHN0b3JhZ2UuCi0gICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKLSAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Fy
cmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLQotICAgICAgICAvLyBTdG9yZSB0
aGUgdmFsdWUgdG8gdGhlIGFycmF5LgotICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9w
ZXJ0eS5ncHIoKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIG1f
aml0LnN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0KLSAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI3ODcsNyArMjY2OCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIHdy
aXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZVRhZ0dQUiwgbm9kZS5jaGlsZDIoKSwgV3JpdGVCYXJy
aWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9kZS5jaGlsZDEoKSwgYmFzZUdQ
Uik7CisgICAgICAgIHNwZWN1bGF0ZUFycmF5KEFycmF5OjpKU0FycmF5LCBub2RlLmNoaWxkMSgp
LCBiYXNlR1BSKTsKICAgICAgICAgCiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMp
OwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CkBAIC0yODI3LDcg
KzI3MDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAg
c3BlY3VsYXRlQXJyYXkobm9kZS5jaGlsZDEoKSwgYmFzZUdQUik7CisgICAgICAgIHNwZWN1bGF0
ZUFycmF5KEFycmF5OjpKU0FycmF5LCBub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKICAgICAgICAg
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKQEAgLTMzNzMsODIg
KzMyNTQsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0
ZUFycmF5KG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOwotICAgICAgICAKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKLQotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgIAotICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgICAgIAotICAgIGNhc2UgR2V0QXJndW1lbnRzTGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBp
bGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CisgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAg
ICAgICAgY29tcGlsZUdldEFycmF5TGVuZ3RoKG5vZGUpOwogICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKCFpc1N0cmluZ1NwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwog
ICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKLQotICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBjYXNlIEdldEludDhBcnJheUxlbmd0aDogewotICAgICAgICBjb21w
aWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgIWlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBH
ZXRJbnQxNkFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3Ro
KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzSW50
MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0SW50MzJBcnJheUxlbmd0aDog
ewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCkt
PmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0ludDMyQXJyYXlTcGVjdWxhdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdl
dFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCAhaXNVaW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRV
aW50OENsYW1wZWRBcnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxl
bmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCAhaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0
VWludDE2QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgo
bV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzVWlu
dDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldFVpbnQzMkFycmF5TGVuZ3Ro
OiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEo
KS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc1VpbnQzMkFycmF5U3BlY3VsYXRp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBHZXRGbG9hdDMyQXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29t
cGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlE
ZXNjcmlwdG9yKCksIG5vZGUsICFpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFy
cmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCAhaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQogICAgIGNhc2UgQ2hlY2tG
dW5jdGlvbjogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVh
bCwgZnVuY3Rpb24uZ3ByKCksIG5vZGUuZnVuY3Rpb24oKSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAx
MjYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc0LDEyICsyMzc0LDEzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7
Ci0gICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkgfHwgIWF0KG5vZGUuY2hpbGQxKCkpLnBy
ZWRpY3Rpb24oKSB8fCAhYXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigpKSB7CisgICAgICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lk
ZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
SW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghYXQobm9kZS5jaGlsZDIo
KSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpIHx8ICghbm9kZS5jaGlsZDMoKSAmJiAhYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpKSB7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKQEAgLTIzOTIsMTIwICsyMzkzLDkwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsKKyAgICAgICAg
Y2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91
bmRzOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BS
UmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdl
IHdpbGwgaGF2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCB0aGUgYmFzZSBpcyBzb21lIGtpbmQg
b2YgYXJyYXksCisgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LgorICAgICAgICAgICAgCisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxl
UHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlv
bigpID09IFNwZWNTdHJpbmcpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlSW50OEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6
ZW9mKGludDhfdCksIGlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRB
cnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVz
Y3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlzSW50MTZBcnJheVNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlw
ZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBTaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkg
ewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBp
c0ludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNr
cywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
VWludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJy
YXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXpl
b2YodWludDhfdCksIGlzVWludDhBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVk
QXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgIAotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4Q2xhbXBl
ZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhDbGFtcGVk
QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/
IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQx
NkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJy
YXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6
CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFs
RGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNp
Z25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXko
bV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
dWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5Ogor
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERh
dGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVu
c2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJh
eTo6VWludDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJy
YXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6
ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURl
c2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNj
cmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5z
aG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0
b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlwZVNw
ZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwot
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDMyQXJyYXkoKSkg
ewotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCks
IGlzVWludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0No
ZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSwgaXNGbG9hdDMyQXJyYXlTcGVjdWxhdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVT
cGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcyk7Ci0gICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXkoKSkgewotICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpLCBpc0Zsb2F0NjRBcnJheVNw
ZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpID8gTm9UeXBl
ZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzKTsKLSAgICAgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwot
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwotCi0g
ICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYWxyZWFkeSBzcGVjdWxh
dGVkIHRoYXQgdGhlIGJhc2UgaXMgc29tZSBraW5kIG9mIGFycmF5LAotICAgICAgICAvLyBhdCB0
aGlzIHBvaW50LgotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5n
cHIoKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVz
dWx0LmdwcigpKSk7Ci0KLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbDoK
LSAgICBjYXNlIFB1dEJ5VmFsU2FmZTogeworICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewogICAg
ICAgICBFZGdlIGNoaWxkMSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAg
ICAgICAgIEVkZ2UgY2hpbGQyID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKTsK
ICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIp
OwogICAgICAgICAKLSAgICAgICAgaWYgKCFhdChjaGlsZDEpLnByZWRpY3Rpb24oKSB8fCAhYXQo
Y2hpbGQyKS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0g
bW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKTsKKyAgICAgICAgYm9vbCBhbHJlYWR5SGFuZGxl
ZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICAg
ICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlKTsKKyAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWF0KGNoaWxkMikuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsK
KyAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlWYWwpOworICAgICAgICAgICAg
CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIGNoaWxkMSk7CiAgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIGNoaWxkMik7CiAgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhcmczKHRoaXMsIGNoaWxkMyk7CkBAIC0yNTE3LDE5ICsyNDg4LDk3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24obV9qaXQuc3RyaWN0TW9kZUZvcihub2RlLmNvZGVPcmlnaW4pID8gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdCwgYXJnMUdQUiwgYXJn
MkdQUiwgYXJnM0dQUik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYWxyZWFkeUhhbmRsZWQpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgY2hpbGQxKTsKICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIGNoaWxkMik7Ci0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNw
ZWN1bGF0ZUFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgaW4gaGVyZSAiKTsK
KyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisKKyAgICAgICAgc3BlY3VsYXRl
QXJyYXkoYXJyYXlNb2RlLCBjaGlsZDEsIGJhc2VSZWcpOworCisgICAgICAgIHN3aXRjaCAoYXJy
YXlNb2RlKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgIGNhc2UgQXJy
YXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OworCisgICAgICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkgJiB2YWx1ZSBpbnRvIHJlZ2lz
dGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgorICAgICAgICAgICAgR1BSUmVnIHZh
bHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNj
cmF0Y2guZ3ByKCk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgICAgICB3cml0ZUJhcnJp
ZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlB
Y2Nlc3MsIHNjcmF0Y2hSZWcpOworCisgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5
VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHNjcmF0Y2hS
ZWc7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFy
cmF5LgorICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OworICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAg
ICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXkpCisgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlv
bmRBcnJheUJvdW5kcyk7CisKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgICAgICBw
cm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAKKyAgICAg
ICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KKyAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc2NyYXRjaFJlZzsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFn
ZVJlZyk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xl
OyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisKKyAgICAgICAg
ICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhl
IGFycmF5OyAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3RO
ZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisKKyAgICAgICAgICAgIGxlbmd0aERvZXNO
b3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5r
KCZtX2ppdCk7CisKKyAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXku
CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKworICAgICAg
ICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzKSB7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJleW9uZEFycmF5Qm91bmRzLCB0
aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0
TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJh
dGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0
aGlzKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdw
cigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMlJlZyA9IHNjcmF0Y2gyLmdwcigpOwpAQCAtMjUzNywxNSArMjU4Niw2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGlmICghaXNB
cmd1bWVudHNTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpKSB7Ci0g
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIGNoaWxkMSwKLSAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmQXJn
dW1lbnRzOjpzX2luZm8pKSk7Ci0gICAgICAgICAgICB9Ci0gICAgCiAgICAgICAgICAgICBtX2pp
dC5sb2FkUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZEYXRhKCkpLAogICAgICAgICAgICAgICAgIHNjcmF0Y2hS
ZWcpOwpAQCAtMjU3OSwyMjUgKzI2MTksNTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGls
ZDEpLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3Jp
cHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCks
IGlzSW50OEFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/
IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgU2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDE2
QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSht
X2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIGlzSW50MTZBcnJheVNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJyYXlUeXBlU3Bl
Y0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0
KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihp
bnQzMl90KSwgaXNJbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSku
bV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0No
ZWNrcywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1
bGF0ZVVpbnQ4QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2Uu
Z3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhBcnJh
eVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDEpLm1fdHlwZSkgPyBOb1R5cGVkQXJy
YXlUeXBlU3BlY0NoZWNrIDogQWxsVHlwZWRBcnJheVNwZWNDaGVja3MsIFVuc2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50OENsYW1wZWRBcnJheSgpKSB7
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3Bl
cnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIGlzVWludDhDbGFtcGVkQXJyYXlTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9UeXBlZEFycmF5VHlw
ZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25lZFR5cGVkQXJyYXks
IENsYW1wUm91bmRpbmcpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkludDhB
cnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQu
Z2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNw
ZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIGlzVWlu
dDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9U
eXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzLCBVbnNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50MzJB
cnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1f
aml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBpc1VpbnQzMkFycmF5U3BlY3Vs
YXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVT
cGVjQ2hlY2sgOiBBbGxUeXBlZEFycmF5U3BlY0NoZWNrcywgVW5zaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC5nbG9iYWxE
YXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZihmbG9hdCksIGlzRmxvYXQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKGNoaWxkMSkubV90eXBlKSA/IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2sgOiBB
bGxUeXBlZEFycmF5U3BlY0NoZWNrcyk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1
bGF0ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9h
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSwgaXNGbG9h
dDY0QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQxKS5tX3R5cGUpID8gTm9U
eXBlZEFycmF5VHlwZVNwZWNDaGVjayA6IEFsbFR5cGVkQXJyYXlTcGVjQ2hlY2tzKTsKLSAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwotCi0gICAgICAgIC8vIE1hcCBiYXNlLCBwcm9wZXJ0eSAmIHZh
bHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIuCi0gICAgICAg
IEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigp
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IAotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3Jp
dGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwotCi0gICAgICAgIHNwZWN1
bGF0ZUFycmF5KGNoaWxkMSwgYmFzZVJlZyk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgaWYgKG5vZGUub3AoKSA9
PSBQdXRCeVZhbCkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOwotCi0gICAgICAgIGJhc2Uu
dXNlKCk7Ci0gICAgICAgIHByb3BlcnR5LnVzZSgpOwotICAgICAgICB2YWx1ZS51c2UoKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KLSAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3Jh
Z2VSZWcpOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBp
ZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotCi0gICAgICAgIC8vIElmIHdlJ3Jl
IHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xl
bmd0aCkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJl
Zyk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3Ro
KSkpOwotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsK
LQotICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAg
IG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVl
IHRvIHRoZSBhcnJheS4KLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7
Ci0KLSAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbFNhZmUpIHsKLSAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAg
ICAgICAgICAgICAgICAgICAgYmV5b25kQXJyYXlCb3VuZHMsIHRoaXMsCi0gICAgICAgICAgICAg
ICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5
VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5
Qm91bmRzTm9uU3RyaWN0LAotICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywg
cHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAgIEVkZ2UgY2hp
bGQxID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgRWRnZSBj
aGlsZDIgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICBFZGdl
IGNoaWxkMyA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIWF0KGNoaWxkMSkucHJlZGljdGlvbigpIHx8ICFhdChjaGlsZDIpLnByZWRp
Y3Rpb24oKSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5h
ZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICBjYXNlIEFy
cmF5OjpJbnQxNkFycmF5OgorICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3By
KCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJy
YXkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFT
U0VSVChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihhdChjaGlsZDEpLnByZWRp
Y3Rpb24oKSkpOwotICAgICAgICBBU1NFUlQoYXQoY2hpbGQyKS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpOwotCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQx
KTsKLSAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNo
aWxkMik7Ci0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDhBcnJheSgp
KSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmds
b2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5n
cHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywgU2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJy
YXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3Bl
cnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIE5vVHlwZWRBcnJheVNwZWNDaGVjaywg
U2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUlu
dDMyQXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIE5vVHlwZWRBcnJheVNwZWND
aGVjaywgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1
bGF0ZVVpbnQ4QXJyYXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2Uu
Z3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIE5vVHlwZWRBcnJh
eVNwZWNDaGVjaywgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1
bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90
KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRp
bmcpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRh
KCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6
CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3Bl
cnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xh
bXBSb3VuZGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2ln
bmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckludFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVu
c2lnbmVkVHlwZWRBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNj
cmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6
OkZsb2F0NjRBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRB
cnJheShtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5n
cHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKGF0KGNoaWxkMSkuc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKSkgewotICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC5nbG9iYWxEYXRhKCkt
PnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKHVpbnQxNl90KSwgTm9UeXBlZEFycmF5U3BlY0NoZWNrLCBVbnNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgp
KSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0Lmds
b2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBOb1R5cGVkQXJyYXlTcGVjQ2hlY2ssIFVu
c2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUZs
b2F0MzJBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVk
QXJyYXkobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2Uu
Z3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpLCBOb1R5cGVkQXJyYXlT
cGVjQ2hlY2spOwotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAoYXQoY2hpbGQxKS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJy
YXkoKSkgewotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1f
aml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSksIE5vVHlwZWRBcnJheVNwZWNDaGVj
ayk7Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIEFTU0VSVChhdChjaGlsZDEpLnNob3VsZFNwZWN1bGF0ZUFycmF5KCkpOwotCi0g
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7
Ci0KLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBjaGlsZDMs
IFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoUmVnKTsKLQotICAgICAgICAv
LyBHZXQgdGhlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2Ny
YXRjaFJlZzsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLQotICAgICAg
ICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgotICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUu
Z3ByKCk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotCi0gICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
ICAgICAKKwogICAgIGNhc2UgUmVnRXhwRXhlYzogewogICAgICAgICBpZiAoY29tcGlsZVJlZ0V4
cEV4ZWMobm9kZSkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yODU5LDcgKzI3MjUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAg
ICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFy
cmllckZvclByb3BlcnR5QWNjZXNzLCBzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsKIAot
ICAgICAgICBzcGVjdWxhdGVBcnJheShub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKKyAgICAgICAg
c3BlY3VsYXRlQXJyYXkoQXJyYXk6OkpTQXJyYXksIG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOwog
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKQEAgLTI4OTYsNyAr
Mjc2Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3Rv
cmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBz
cGVjdWxhdGVBcnJheShub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKKyAgICAgICAgc3BlY3VsYXRl
QXJyYXkoQXJyYXk6OkpTQXJyYXksIG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOwogCiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6
c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKQEAgLTMzODYsODEgKzMyNTIsMTAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAg
ICAgIAotICAgICAgICBzcGVjdWxhdGVBcnJheShub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKLQot
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
QXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgIAotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAg
IAotICAgIGNhc2UgR2V0QXJndW1lbnRzTGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRBcmd1
bWVudHNMZW5ndGgobm9kZSk7CisgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgY29t
cGlsZUdldEFycmF5TGVuZ3RoKG5vZGUpOwogICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBj
YXNlIEdldFN0cmluZ0xlbmd0aDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAKLSAgICAgICAgaWYg
KCFpc1N0cmluZ1NwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRP
Zkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKLQotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdl
dEludDhBcnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aCht
X2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzSW50OEFy
cmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRJbnQxNkFycmF5TGVuZ3RoOiB7Ci0g
ICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+aW50
MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzSW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgR2V0SW50MzJBcnJheUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0VHlw
ZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCks
IG5vZGUsICFpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdldFVpbnQ4
QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQu
Z2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNVaW50OEFycmF5
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRVaW50OENsYW1wZWRBcnJheUxlbmd0aDog
ewotICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aChtX2ppdC5nbG9iYWxEYXRhKCkt
PnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNVaW50OENsYW1wZWRBcnJh
eVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0VWludDE2QXJyYXlMZW5ndGg6IHsKLSAg
ICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50
MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgIWlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIEdldFVpbnQzMkFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRU
eXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCksIG5vZGUsICFpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHZXRG
bG9hdDMyQXJyYXlMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldFR5cGVkQXJyYXlMZW5ndGgo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsICFpc0Zs
b2F0MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR2V0RmxvYXQ2NEFycmF5TGVu
Z3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKG1faml0Lmdsb2JhbERh
dGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCAhaXNGbG9hdDY0QXJyYXlTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGZ1bmN0aW9uLmdwcigpLCBub2RlLmZ1
bmN0aW9uKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMjYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDEyICsy
NjksODIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2xlYXJHZW5lcmF0aW9uSW5mbwogICAgIG1f
ZnBycyA9IFJlZ2lzdGVyQmFuazxGUFJJbmZvPigpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVBcnJheShFZGdlIGVkZ2UsIEdQUlJlZyBiYXNlUmVnKQorY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVzY3JpcHRvcihBcnJh
eTo6TW9kZSBhcnJheU1vZGUpCiB7Ci0gICAgQWJzdHJhY3RWYWx1ZSYgYXJyYXlWYWx1ZSA9IG1f
c3RhdGUuZm9yTm9kZShlZGdlKTsKLSAgICBpZiAoYXJyYXlWYWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAmJiBhcnJheVZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZv
KQotICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4
QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAg
cmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCk7CisgICAg
Y2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRh
KCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7CisgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToK
KyAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9y
KCk7CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiAm
bV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKTsKKyAgICBj
YXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRh
KCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOworICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5
OgorICAgICAgICByZXR1cm4gJm1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlw
dG9yKCk7CisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gJm1f
aml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOworICAgIGNhc2UgQXJy
YXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmZs
b2F0MzJBcnJheURlc2NyaXB0b3IoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKK2NvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRlQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBFZGdlIGVkZ2UsIEdQUlJlZyBi
YXNlUmVnKQoreworICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiByZXN1bHQgPSB0eXBl
ZEFycmF5RGVzY3JpcHRvcihhcnJheU1vZGUpOworICAgIAorICAgIGlmIChtb2RlQWxyZWFkeUNo
ZWNrZWQobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLCBhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIAorICAgIGNvbnN0IENsYXNzSW5mbyogZXhwZWN0ZWRDbGFzc0luZm8gPSAw
OworICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBcnJheTo6Rm9yY2VF
eGl0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAg
ICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6IHsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGR1cGxpY2F0ZXMgdGhlIGNvZGUgYmVs
b3cgaW4gYW50aWNpcGF0aW9uIG9mIHRoaXMgY29kZSBiZWluZworICAgICAgICAvLyBzdWJzdGFu
dGlhbGx5IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIo
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09m
ZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigm
SlNBcnJheTo6c19pbmZvKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBj
YXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkFyZ3Vt
ZW50czo6c19pbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6
CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5
OgorICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFt
cGVkQXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6CisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgIGNhc2UgQXJy
YXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSByZXN1bHQtPm1f
Y2xhc3NJbmZvOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIAogICAgIEdQUlRlbXBv
cmFyeSB0ZW1wKHRoaXMpOwogICAgIG1faml0LmxvYWRQdHIoCkBAIC0yODQsNyArMzU0LDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQXJyYXkoRWRnZQogICAgICAgICBtX2ppdC5i
cmFuY2hQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmNsYXNz
SW5mb09mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihleHBlY3RlZENsYXNzSW5mbykpKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGVJbmRleCBub2RlSW5k
ZXgpCkBAIC0xNjIwLDExICsxNjkyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25TdAogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAgIGlmICghaXNTdHJpbmdT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewotICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlKTsKLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBBcnJheTo6U3RyaW5nKSk7CiAKICAgICAvLyB1bnNpZ25l
ZCBjb21wYXJpc29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGlu
ZGljZXMgdGhhdCBhcmUgdG9vIGxhcmdlCiAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CkBAIC0yMDE4LDIzICsyMDg2LDcgQEAg
c3RhdGljIHZvaWQgY29tcGlsZUNsYW1wRG91YmxlVG9CeXRlKEpJVAogCiB9CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlJiBub2RlLCBib29sIG5lZWRzU3BlY3VsYXRpb25D
aGVjaykKLXsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgCi0gICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
Ci0gICAgCi0gICAgaWYgKG5lZWRzU3BlY3VsYXRpb25DaGVjaykKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlR1BSKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7
Ci0gICAgCi0gICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOwotICAgIAotICAgIGludGVn
ZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBl
ZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMgc3BlY3VsYXRpb25SZXF1aXJlbWVudHMsIFR5
cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIE5vZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25l
ZG5lc3Mgc2lnbmVkbmVzcykKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTIwNDcsMTIgKzIwOTksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwogCi0gICAgaWYgKHNw
ZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spIHsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwotICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNT
RVJUKG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5v
ZGUuYXJyYXlNb2RlKCkpKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCkBAIC0yMDk3LDEzICsyMTQ0LDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBkb3VibGVSZXN1bHQo
ZnJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2Rl
LCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyBz
cGVjdWxhdGlvblJlcXVpcmVtZW50cywgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcywg
VHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYgbm9kZSwgc2l6ZV90
IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzLCBUeXBlZEFycmF5
Um91bmRpbmcgcm91bmRpbmcpCiB7Ci0gICAgRWRnZSBiYXNlVXNlID0gbV9qaXQuZ3JhcGgoKS52
YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICBFZGdlIHZhbHVlVXNlID0gbV9qaXQuZ3JhcGgoKS52
YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVu
dHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZVVzZSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZSwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHZhbHVlOwogICAgIEdQUlJlZyB2YWx1ZUdQUjsKICAgICAKQEAgLTIxNzQsNyArMjIxOCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBBU1NFUlQodmFs
dWVHUFIgIT0gc3RvcmFnZVJlZyk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzOwotICAgIGlmIChzcGVjdWxhdGlv
blJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spCisgICAgaWYgKG5vZGUub3Ao
KSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOwogCiAgICAgc3dpdGNoIChlbGVt
ZW50U2l6ZSkgewpAQCAtMjE5MCwxMiArMjIzNCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlWYWxGb3JJCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVk
QXJyYXlTcGVjQ2hlY2spCisgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAg
b3V0T2ZCb3VuZHMubGluaygmbV9qaXQpOwogICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUmIG5vZGUsIHNp
emVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzIHNwZWN1
bGF0aW9uUmVxdWlyZW1lbnRzKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25GbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IE5vZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTIyMDQsMTcgKzIyNDgs
MTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbAogICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgCi0g
ICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hl
Y2spIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwot
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisKKyAgICBBU1NFUlQobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpOwogCiAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKICAgICBGUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmZwcigpOwotICAgIEFTU0VSVChz
cGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spOwogICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsCiAgICAgICAgIG1faml0LmJyYW5jaDMyKApAQCAtMjIzOCwxNSArMjI3NiwxNCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgZG91YmxlUmVzdWx0KHJl
c3VsdFJlZywgbV9jb21waWxlSW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUmIG5vZGUsIHNp
emVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzIHNwZWN1
bGF0aW9uUmVxdWlyZW1lbnRzKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFs
Rm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVu
dFNpemUpCiB7CiAgICAgRWRnZSBiYXNlVXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCAwKTsKICAgICBFZGdlIHZhbHVlVXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCAyKTsKICAgICAKICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywg
dmFsdWVVc2UpOwogICAgIAotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5
cGVkQXJyYXlUeXBlU3BlY0NoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlVXNlLmluZGV4KCksIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2UsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOworICAgIEFTU0VSVF9VTlVTRUQo
YmFzZVVzZSwgbW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShiYXNlVXNlKSwgbm9k
ZS5hcnJheU1vZGUoKSkpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAg
ICAgCkBAIC0yMjU1LDcgKzIyOTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlWYWxGb3JGCiAgICAgCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzOwotICAgIGlmIChzcGVjdWxhdGlvblJlcXVp
cmVtZW50cyAhPSBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spCisgICAgaWYgKG5vZGUub3AoKSA9PSBQ
dXRCeVZhbCkKICAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOwogICAgIAogICAgIHN3aXRjaCAoZWxlbWVu
dFNpemUpIHsKQEAgLTIyNzIsNyArMjMwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeVZhbEZvckYKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICB9Ci0gICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJh
eVNwZWNDaGVjaykKKyAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsKQogICAgICAgICBvdXRP
ZkJvdW5kcy5saW5rKCZtX2ppdCk7CiAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogfQpA
QCAtMzA2Niw3NSArMzEwMywzNiBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0
RXEoTm9kCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlKE5vZGUmIG5vZGUpCiB7Ci0gICAgQVNTRVJUKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRp
Y3Rpb24oKSk7Ci0gICAgQVNTRVJUKGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKSk7Ci0gICAgICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIAog
ICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKLSAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
QXJndW1lbnRzKCkpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfSBlbHNl
IGlmIChhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgPT0gU3BlY1N0cmluZykgewotICAg
ICAgICBpZiAoIWlzU3RyaW5nU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0K
KyAgICAKKyAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9CisgICAg
ICAgIHNwZWN1bGF0ZUFycmF5KG5vZGUuYXJyYXlNb2RlKCksIG5vZGUuY2hpbGQxKCksIGJhc2VS
ZWcpOworICAgIAorICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgIGNhc2UgQXJy
YXk6OlN0cmluZzoKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc3RvcmFnZVJlZyk7CiAgICAg
ICAgIAogICAgICAgICAvLyBTcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWNjZXNzaW5nIGEgcm9w
ZQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZVJl
ZykpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBl
bHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgewot
ICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmds
b2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICBpZiAoIWlzSW50OEFy
cmF5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6
OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3Jp
cHRvci5tX2NsYXNzSW5mbykpKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VS
ZWcpOwotICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50
MTZBcnJheSgpKSB7Ci0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAg
ICBpZiAoIWlzSW50MTZBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VP
ZmZzZXQpLCBzdG9yYWdlUmVnKTsKLSAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2Ny
aXB0b3IoKTsKLSAgICAgICAgaWYgKCFpc0ludDMyQXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2Ny
aXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKLSAgICAgICAgY29u
c3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCkt
PnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgIGlmICghaXNVaW50OEFycmF5U3BlY3Vs
YXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5m
b09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2Ns
YXNzSW5mbykpKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAg
IH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDhDbGFtcGVk
QXJyYXkoKSkgewotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciA9IG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0g
ICAgICAgIGlmICghaXNVaW50OENsYW1wZWRBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV9jbGFzc0luZm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdl
UmVnKTsKLSAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVp
bnQxNkFycmF5KCkpIHsKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAg
ICAgICBpZiAoIWlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9y
YWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7Ci0gICAgICAgIGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICAgICAgaWYgKCFpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBu
b2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykp
KTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIH0gZWxzZSBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKLSAg
ICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9i
YWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgaWYgKCFpc0Zsb2F0
MzJBcnJheVNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlND
ZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRl
c2NyaXB0b3IubV9jbGFzc0luZm8pKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9y
YWdlUmVnKTsKLSAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZUZsb2F0NjRBcnJheSgpKSB7Ci0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7
Ci0gICAgICAgIGlmICghaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCks
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOwotICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3Iu
bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3Bl
Y3VsYXRlQXJyYXkobm9kZS5jaGlsZDEoKSwgYmFzZVJlZyk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kczoKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChkZXNjcmlw
dG9yKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgfQorICAgIAogICAgIHN0b3JhZ2VSZXN1bHQoc3RvcmFnZVJlZywgbV9jb21w
aWxlSW5kZXgpOwogfQogCkBAIC0zMjUyLDYgKzMyNTAsNDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEFyZ3VtZW50cwogICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2Nv
bXBpbGVJbmRleCk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxl
bmd0aChOb2RlJiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yID0KKyAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9kZS5hcnJheU1vZGUoKSwg
bm9kZS5jaGlsZDEoKSwgYmFzZUdQUik7CisKKyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkp
IHsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczoKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJl
c3VsdEdQUik7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAg
Y29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOworICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZz
ZXQpLCByZXN1bHRHUFIpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSYgbm9kZSkKIHsKICAgICBHUFJSZXN1
bHQgcmVzdWx0KHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTI2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgyLDYgKzIw
ODIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhOb2Rl
Jik7CiAgICAgdm9pZCBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKE5vZGUmKTsKICAgICAKKyAg
ICB2b2lkIGNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2RlJik7CisgICAgCiAgICAgdm9pZCBjb21w
aWxlVmFsdWVUb0ludDMyKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJlcihO
b2RlJik7CiAgICAgdm9pZCBjb21waWxlRG91YmxlQXNJbnQzMihOb2RlJik7CkBAIC0yMDk1LDEy
ICsyMDk3LDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9k
ZSYpOwogICAgIHZvaWQgY29tcGlsZVNvZnRNb2R1bG8oTm9kZSYpOwotICAgIHZvaWQgY29tcGls
ZUdldFR5cGVkQXJyYXlMZW5ndGgoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlJiwg
Ym9vbCBuZWVkc1NwZWN1bGF0aW9uQ2hlY2spOwotICAgIGVudW0gVHlwZWRBcnJheVNwZWN1bGF0
aW9uUmVxdWlyZW1lbnRzIHsKLSAgICAgICAgTm9UeXBlZEFycmF5U3BlY0NoZWNrLAotICAgICAg
ICBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrLAotICAgICAgICBBbGxUeXBlZEFycmF5U3BlY0No
ZWNrcwotICAgIH07CiAgICAgZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7CiAgICAgICAgIFNp
Z25lZFR5cGVkQXJyYXksCiAgICAgICAgIFVuc2lnbmVkVHlwZWRBcnJheQpAQCAtMjExMCwxMCAr
MjEwNiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIENsYW1wUm91bmRpbmcKICAgICB9OwogICAgIHZv
aWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwotICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwg
Tm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1l
bnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJ
bnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2UsIEdQ
UlJlZyBwcm9wZXJ0eSwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1
bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5k
aW5nID0gVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0
VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIE5vZGUmLCBzaXplX3QgZWxl
bWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyk7Ci0gICAgdm9pZCBj
b21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRT
aXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMpOworICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9k
ZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOworICAgIHZvaWQg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUmLCBzaXplX3QgZWxlbWVudFNp
emUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJv
dW5kaW5nKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAg
dm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiwgc2l6ZV90IGVs
ZW1lbnRTaXplKTsKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSYpOwog
ICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihOb2RlJik7CiAgICAgYm9vbCBj
b21waWxlUmVnRXhwRXhlYyhOb2RlJik7CkBAIC0yMTk5LDcgKzIxOTUsOSBAQCBwdWJsaWM6CiAg
ICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogZm9yd2FyZFNwZWN1bGF0aW9uV2F0Y2hwb2lu
dChFeGl0S2luZCA9IFVuY291bnRhYmxlV2F0Y2hwb2ludCk7CiAgICAgSnVtcFJlcGxhY2VtZW50
V2F0Y2hwb2ludCogc3BlY3VsYXRpb25XYXRjaHBvaW50V2l0aENvbmRpdGlvbmFsRGlyZWN0aW9u
KEV4aXRLaW5kLCBib29sIGlzRm9yd2FyZCk7CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVBcnJh
eShFZGdlIGJhc2VFZGdlLCBHUFJSZWcgYmFzZVJlZyk7CisgICAgY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlKTsKKyAgICAKKyAgICBj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogc3BlY3VsYXRlQXJyYXkoQXJyYXk6Ok1vZGUsIEVk
Z2UgYmFzZUVkZ2UsIEdQUlJlZyBiYXNlUmVnKTsKICAgICAKICAgICB0ZW1wbGF0ZTxib29sIHN0
cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0
YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDEyNjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsU2FmZToKICAgICAgICAgICAgICAgICBjYXNlIEdldEFy
cmF5TGVuZ3RoOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKICAgICAgICAgICAgICAg
ICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNlcy4KQEAgLTIxNSw1MyArMjE0LDEyIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5wcmVk
aWN0aW9uKCkgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpIHx8ICFtX2dy
YXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZUFycmF5U3BlY3Vs
YXRpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpIHx8ICFtX2dyYXBoW25v
ZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNsb2JiZXIobGl2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFs
U2FmZTogewotICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIGlmICghbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtj
aGlsZDJdLnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGhbY2hpbGQyXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgICAgICAgICAgICAgfHwg
bV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpCi0jZW5kaWYKLSAgICAg
ICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2xvYmJlcihs
aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0gUHV0QnlWYWxTYWZlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQx
XS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1
bGF0ZUludDE2QXJyYXkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUludDMyQXJy
YXkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZVVpbnQ4QXJyYXkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZVVpbnQ4Q2xhbXBlZEFycmF5KCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hp
bGQxXS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxk
U3BlY3VsYXRlVWludDMyQXJyYXkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUZs
b2F0MzJBcnJheSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5
KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNsb2Ji
ZXIobGl2ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
c0xlbmd0aFNhZmU6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZl
Ogo=
</data>
<flag name="review"
          id="170508"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>