<?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>95013</bug_id>
          
          <creation_ts>2012-08-25 15:48:12 -0700</creation_ts>
          <short_desc>Array type checks and storage accesses should be uniformly represented and available to CSE</short_desc>
          <delta_ts>2012-08-26 15:35:36 -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>
          <dependson>95014</dependson>
          <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>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>704738</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-25 15:48:12 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704757</commentid>
    <comment_count>1</comment_count>
      <attachid>160580</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-25 16:59:28 -0700</bug_when>
    <thetext>Created attachment 160580
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704800</commentid>
    <comment_count>2</comment_count>
      <attachid>160593</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-26 00:06:48 -0700</bug_when>
    <thetext>Created attachment 160593
work in progress

It runs simple things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704863</commentid>
    <comment_count>3</comment_count>
      <attachid>160607</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-26 11:40:11 -0700</bug_when>
    <thetext>Created attachment 160607
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704865</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-26 11:42:51 -0700</bug_when>
    <thetext>Attachment 160607 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGArrayMode.h:66:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:79:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:79:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704867</commentid>
    <comment_count>5</comment_count>
      <attachid>160608</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-26 11:57:28 -0700</bug_when>
    <thetext>Created attachment 160608
the patch

Fixed style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704873</commentid>
    <comment_count>6</comment_count>
      <attachid>160611</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-26 12:15:38 -0700</bug_when>
    <thetext>Created attachment 160611
the patch

Minor build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704880</commentid>
    <comment_count>7</comment_count>
      <attachid>160611</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-08-26 12:48:39 -0700</bug_when>
    <thetext>Comment on attachment 160611
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704897</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-26 15:35:36 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/126715</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160580</attachid>
            <date>2012-08-25 16:59:28 -0700</date>
            <delta_ts>2012-08-26 00:06:48 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>cseindexing_patch_1.diff</filename>
            <type>text/plain</type>
            <size>58244</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2NjkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBA
CisyMDEyLTA4LTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgdHlwZSBjaGVja3MgYW5kIHN0b3JhZ2UgYWNjZXNzZXMgc2hvdWxkIGJlIGF2YWlsYWJs
ZSB1bmlmb3JtbHkgcmVwcmVzZW50ZWQgYW5kIGF2YWlsYWJsZSB0byBDU0UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1MDEzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4KKwor
ICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpmcm9tU3RydWN0dXJlKToKKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChKU0M6OkRGRzo6cmVmaW5lQXJyYXlNb2RlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlN
b2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Omxlbmd0aE5lZWRzU3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzU3BlY2lmaWMpOgorICAgICAgICAoSlND
OjpERkc6Om1vZGVTdXBwb3J0c0xlbmd0aCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJz
ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1vZGUpOgor
ICAgICAgICAoQnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWMpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9j
a3MpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q1NFUGhhc2U6OkNTRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tT
dHJ1Y3R1cmVFbGltaW5hdGlvbik6CisgICAgICAgIChDU0VQaGFzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6Q1NFUGhhc2U6OmNoZWNrQXJyYXlFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OmdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgIChK
U0M6OkRGRzo6cGVyZm9ybUNTRSk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9s
ZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpjaGVja0FycmF5KToKKyAgICAgICAgKEZpeHVwUGhh
c2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24p
OgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OkdyYXBoKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNvbGxl
Y3RHYXJiYWdlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnN1YnN0aXR1dGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzQXJyYXlNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzZXRB
cnJheU1vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZHKToK
KyAgICAgICAgKiBkZmcvREZHUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6bWVyZ2VEZWZhdWx0RmxhZ3MpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp1
c2VDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aCk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChTcGVjdWxhdGl2
ZUpJVCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMi0wOC0yNSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFRoZSByZWR1bmRhbnQgcGhpIGVs
aW1pbmF0aW9uIHBoYXNlIGlzIG5vdCB1c2VkIGFuZCBzaG91bGQgYmUgcmVtb3ZlZApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZp
c2lvbiAxMjY2ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODcsMTIgKzg4NywxMCBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJp
bmcpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
OTAwLDQyICs4OTgsMzQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CiAgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcgb2YgdGhl
IG91dC1vZi1ib3VuZHMKICAgICAgICAgICAgIC8vIGNhc2UuCi0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjSW50OEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMkFycmF5KTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNVaW50MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1VpbnQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIp
OwpAQCAtOTQzLDEyICs5MzMsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJs
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5
OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJB
cnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQ2NEFycmF5KTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC05NzAsMjAgKzk1OCwxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsK
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQXJndW1lbnRzKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0
ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJ
bnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQ4QXJy
YXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAg
ICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwpAQCAtOTkx
LDcgKzk3NSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBo
W2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTk5OSw3ICs5ODIsNiBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZp
bHRlcihTcGVjSW50MzJBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNw
ZWNJbnQzMik7CkBAIC0xMDA3LDcgKzk4OSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNw
ZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4
QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OEFycmF5
KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAg
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTEwMTUs
NyArOTk2LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CkBAIC0xMDIzLDcgKzEw
MDMsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2No
aWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTEwMzEsNyArMTAxMCw2IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZp
bHRlcihTcGVjVWludDMyQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRl
cihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihT
cGVjSW50MzIpOwpAQCAtMTAzOSwxMiArMTAxNywxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpG
bG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9h
dDMyQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA1
NywxMyArMTAzMywxMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICAKICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY051bWJlcik7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xNDkyLDggKzE0NjYsMTMgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigp
OyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyAoYWxtb3N0KSBhbHdheXMgZm9sbG93ZWQgYnkg
R2V0QnlWYWwsIHdoaWNoIGRvZXMgZXhpdC4gU28gbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGJlIG1v
cmUgcHJlY2lzZS4KKyAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAgICAgaWYgKG1vZGVBbHJl
YWR5Q2hlY2tlZChmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSkgewor
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2RlLnNl
dENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBieSBv
cGVyYXRpb25zIChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBpcyBu
byBwb2ludCBpbiB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCiAgICAgICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKQEAgLTE1MDQs
NiArMTQ4Myw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9ucywgYnV0
IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTM1LDYgKzE1MTcsMTAg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7
CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5jbGVhcigpOwogICAgICAgICBicmVhazsgCiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTI2Njg0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw4ICs1MSwxNiBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2Rl
CiAgICAgfQogfQogCitBcnJheTo6TW9kZSBmcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0
dXJlLCBib29sIG1ha2VTYWZlKQoreworICAgIHJldHVybiBmcm9tT2JzZXJ2ZWQoYXJyYXlNb2Rl
RnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpLCBtYWtlU2FmZSk7Cit9CisKIEFycmF5OjpNb2RlIHJl
ZmluZUFycmF5TW9kZShBcnJheTo6TW9kZSBhcnJheU1vZGUsIFNwZWN1bGF0ZWRUeXBlIGJhc2Us
IFNwZWN1bGF0ZWRUeXBlIGluZGV4KQogeworICAgIGlmIChhcnJheU1vZGUgIT0gQXJyYXk6OlVu
ZGVjaWRlZCkKKyAgICAgICAgcmV0dXJuIGFycmF5TW9kZTsKKyAgICAKICAgICBpZiAoIWJhc2Ug
fHwgIWluZGV4KSB7CiAgICAgICAgIC8vIEl0IGNhbiBiZSB0aGF0IHdlIGhhZCBhIGxlZ2l0aW1h
dGUgYXJyYXlNb2RlIGJ1dCBubyBpbmNvbWluZyBwcmVkaWN0aW9ucy4gVGhhdCdsbAogICAgICAg
ICAvLyBoYXBwZW4gaWYgd2UgaW5saW5lZCBjb2RlIGJhc2VkIG9uLCBzYXksIGEgZ2xvYmFsIHZh
cmlhYmxlIHdhdGNocG9pbnQsIGJ1dCBsYXRlcgpAQCAtNjQsMTggKzcyLDYgQEAgQXJyYXk6Ok1v
ZGUgcmVmaW5lQXJyYXlNb2RlKEFycmF5OjpNb2RlIAogICAgIGlmICghaXNJbnQzMlNwZWN1bGF0
aW9uKGluZGV4KSB8fCAhaXNDZWxsU3BlY3VsYXRpb24oYmFzZSkpCiAgICAgICAgIHJldHVybiBB
cnJheTo6R2VuZXJpYzsKICAgICAKLSAgICAvLyBQYXNzIHRocm91Z2ggYW55IGFycmF5IG1vZGVz
IHRoYXQgd291bGQgaGF2ZSBiZWVuIGRlY2lkZWQgYnkgdGhlIGFycmF5IHByb2ZpbGUsIHNpbmNl
Ci0gICAgLy8gdGhlIHByZWRpY3Rpb25zIG9mIHRoZSBpbnB1dHMgd2lsbCBub3QgdGVsbCB1cyBh
bnl0aGluZyB1c2VmdWwgdGhhdCB3ZSBkaWRuJ3QgYWxyZWFkeQotICAgIC8vIGdldCBmcm9tIHRo
ZSBhcnJheSBwcm9maWxlLgotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBBcnJh
eTo6Rm9yY2VFeGl0OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzOgotICAgICAgICByZXR1cm4gYXJyYXlNb2RlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKICAgICBpZiAoaXNTdHJpbmdTcGVjdWxh
dGlvbihiYXNlKSkKICAgICAgICAgcmV0dXJuIEFycmF5OjpTdHJpbmc7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDEyNjY4NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDYgKzYzLDggQEAgZW51bSBNb2RlIHsKIAogQXJyYXk6Ok1vZGUgZnJvbU9ic2Vy
dmVkKEFycmF5TW9kZXMgbW9kZXMsIGJvb2wgbWFrZVNhZmUpOwogCitBcnJheTo6TW9kZSBmcm9t
U3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBib29sIG1ha2VTYWZlKTsKKwogQXJyYXk6
Ok1vZGUgcmVmaW5lQXJyYXlNb2RlKEFycmF5OjpNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBT
cGVjdWxhdGVkVHlwZSBpbmRleCk7CiAKIGJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0
VmFsdWUmLCBBcnJheTo6TW9kZSk7CkBAIC04Miw2ICs4NCwxNyBAQCBpbmxpbmUgYm9vbCBjYW5D
U0VTdG9yYWdlKEFycmF5OjpNb2RlIGFyCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBsZW5ndGhO
ZWVkc1N0b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlN
b2RlKSB7CisgICAgY2FzZSBKU0FycmF5OgorICAgIGNhc2UgSlNBcnJheU91dE9mQm91bmRzOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCiBpbmxpbmUgQXJyYXk6Ok1vZGUgbW9kZUZvclB1dChBcnJheTo6TW9kZSBh
cnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKQEAgLTExNSw3ICsxMjgsNyBA
QCBpbmxpbmUgYm9vbCBtb2Rlc0NvbXBhdGlibGVGb3JTdG9yYWdlTG9hCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1pbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1vZGUgbW9k
ZSkKK2lubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAg
c3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgpAQCAtMTI3LDYgKzE0
MCwxMSBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1vCiAgICAgfQog
fQogCitpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1vZGUgbW9kZSkKK3sK
KyAgICByZXR1cm4gbW9kZUlzU3BlY2lmaWMobW9kZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyNjY4
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lubGlu
ZVN0YWNrVG9wKDApCiAgICAgICAgICwgbV9oYXZlQnVpbHRPcGVyYW5kTWFwcyhmYWxzZSkKICAg
ICAgICAgLCBtX2VtcHR5SlNWYWx1ZUluZGV4KFVJTlRfTUFYKQorICAgICAgICAsIG1fY3VycmVu
dEluc3RydWN0aW9uKDApCiAgICAgewogICAgICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsK
ICAgICAgICAgCkBAIC04MTgsOSArODE5LDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGdl
dFByZWRpY3Rpb24obV9ncmFwaC5zaXplKCksIG1fY3VycmVudFByb2ZpbGluZ0luZGV4KTsKICAg
ICB9CiAgICAgCi0gICAgQXJyYXk6Ok1vZGUgZ2V0QXJyYXlNb2RlV2l0aG91dE9TUkV4aXQoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZUluZGV4IGJhc2UpCisgICAgQXJyYXk6
Ok1vZGUgZ2V0QXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgTm9kZUluZGV4IGJhc2Up
CiAgICAgewotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CiAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbigpOwogICAgICAgICBpZiAocHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChwcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIGJhc2UpOwpAQCAt
ODM4LDE2ICs4MzgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZyb21PYnNlcnZlZChw
cm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSwgbWFrZVNhZmUpOwogICAgIH0KICAgICAKLSAg
ICBBcnJheTo6TW9kZSBnZXRBcnJheU1vZGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgTm9kZUluZGV4IGJhc2UpCisgICAgQXJyYXk6Ok1vZGUgZ2V0QXJyYXlNb2RlKE5vZGVJbmRl
eCBiYXNlKQogICAgIHsKLSAgICAgICAgQXJyYXk6Ok1vZGUgcmVzdWx0ID0gZ2V0QXJyYXlNb2Rl
V2l0aG91dE9TUkV4aXQoY3VycmVudEluc3RydWN0aW9uLCBiYXNlKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChyZXN1bHQgPT0gQXJyYXk6OkZvcmNlRXhpdCkKLSAgICAgICAgICAgIGFkZFRvR3Jh
cGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIHJldHVybiBnZXRBcnJheU1vZGUobV9jdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVBy
b2ZpbGUsIGJhc2UpOwogICAgIH0KLQorICAgIAogICAgIE5vZGVJbmRleCBtYWtlU2FmZShOb2Rl
SW5kZXggbm9kZUluZGV4KQogICAgIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9k
ZUluZGV4XTsKQEAgLTExNTAsNiArMTE0NSw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gQ2Fj
aGUgb2YgY29kZSBibG9ja3MgdGhhdCB3ZSd2ZSBnZW5lcmF0ZWQgYnl0ZWNvZGUgZm9yLgogICAg
IEJ5dGVDb2RlQ2FjaGU8Y2FuSW5saW5lRnVuY3Rpb25Gb3I+IG1fY29kZUJsb2NrQ2FjaGU7Cisg
ICAgCisgICAgSW5zdHJ1Y3R1cmUqIG1fY3VycmVudEluc3RydWN0aW9uOwogfTsKIAogI2RlZmlu
ZSBORVhUX09QQ09ERShuYW1lKSBcCkBAIC0xNTUzLDcgKzE1NTAsOSBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAg
ICAgICAgTm9kZUluZGV4IGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcEluZm8o
MCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09w
ZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwor
ICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9P
cGVyYW5kKDApKTsKKyAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2Rl
KG1fY3VycmVudEluc3RydWN0aW9uWzVdLnUuYXJyYXlQcm9maWxlLCBiYXNlKTsKKyAgICAgICAg
Tm9kZUluZGV4IGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlN
b2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1
bWVudFRvT3BlcmFuZCgxKSkpOwogICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAg
IHNldChyZXN1bHRPcGVyYW5kLCBhcnJheVB1c2gpOwogICAgICAgICAKQEAgLTE1NjQsNyArMTU2
Myw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAg
aWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDEpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIAotICAgICAgICBOb2RlSW5kZXggYXJyYXlQb3AgPSBhZGRUb0dyYXBo
KEFycmF5UG9wLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zm
c2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpKTsKKyAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBn
ZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSk7CisgICAgICAgIEFycmF5
OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJbnN0cnVjdGlvbls1XS51
LmFycmF5UHJvZmlsZSwgYmFzZSk7CisgICAgICAgIE5vZGVJbmRleCBhcnJheVBvcCA9IGFkZFRv
R3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJlZGljdGlvbiksIGJh
c2UpOwogICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVy
YW5kLCBhcnJheVBvcCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc5Miw2ICsxNzkzLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAKICAg
ICAgICAgLy8gU3dpdGNoIG9uIHRoZSBjdXJyZW50IGJ5dGVjb2RlIG9wY29kZS4KICAgICAgICAg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2luICsgbV9j
dXJyZW50SW5kZXg7CisgICAgICAgIG1fY3VycmVudEluc3RydWN0aW9uID0gY3VycmVudEluc3Ry
dWN0aW9uOyAvLyBTb21lIG1ldGhvZHMgd2FudCB0byB1c2UgdGhpcywgYW5kIHdlJ2QgcmF0aGVy
IG5vdCB0aHJlYWQgaXQgdGhyb3VnaCBjYWxscy4KICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQg
PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7
CiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKIApAQCAtMjE3Nyw3ICsyMTc5LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUo
Y3VycmVudEluc3RydWN0aW9uLCBiYXNlKTsKKyAgICAgICAgICAgIEFycmF5OjpNb2RlIGFycmF5
TW9kZSA9IGdldEFycmF5TW9kZShiYXNlKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0
eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5v
ZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUp
LCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHByb3BlcnR5KTsKICAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZhbCk7CkBAIC0yMTg4LDcgKzIx
OTAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
IGNhc2Ugb3BfcHV0X2J5X3ZhbDogewogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIEFycmF5OjpN
b2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhc2UpOwor
ICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJhc2UpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CkBAIC0yMTk2LDYgKzIxOTgs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3Bl
cnR5KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHZhbHVlKTsKKyAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKE5vTm9kZSk7IC8vIExlYXZlIHJvb20gZm9yIHByb3BlcnR5IHN0b3JhZ2Uu
CiAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgUHV0QnlWYWwsIE9wSW5mbyhh
cnJheU1vZGUpLCBPcEluZm8oMCkpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRf
YnlfdmFsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTI2Njg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjU5LDggKzY1OSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlm
IChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewogICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRy
ZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KQotICAgICAgICAgICAg
ICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBtX2dyYXBoLm1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBjaGFuZ2VSZWYpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5b
Y2hpbGRJZHhdLCBjaGFuZ2VSZWYpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICghIW5vZGUuY2hpbGQxKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
Zml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBj
aGFuZ2VSZWYpOwogICAgICAgICAgICAgICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24g
MTI2Njg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCiBjbGFzcyBDU0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJsaWM6Ci0gICAgQ1NF
UGhhc2UoR3JhcGgmIGdyYXBoLCBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIGZpeHBvaW50U3Rh
dGUpCisgICAgQ1NFUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
Y29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24iKQotICAgICAgICAsIG1fZml4cG9pbnRT
dGF0ZShmaXhwb2ludFN0YXRlKQogICAgIHsKICAgICAgICAgLy8gUmVwbGFjZW1lbnRzIGFyZSB1
c2VkIHRvIGltcGxlbWVudCBsb2NhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbi4K
ICAgICAgICAgbV9yZXBsYWNlbWVudHMucmVzaXplKG1fZ3JhcGguc2l6ZSgpKTsKQEAgLTMyNyw3
ICszMjYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
Ym9vbCBjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZVNldCwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICBib29sIGNoZWNrU3RydWN0dXJlRWxp
bWluYXRpb24oY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIE5vZGVJbmRleCBjaGls
ZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0t
OykgewogICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkp
OwpAQCAtNjI0LDggKzYyMywzNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBOb05vZGU7CiAgICAgfQorICAgIAorICAgIGJvb2wgY2hlY2tBcnJheUVsaW1pbmF0aW9uKE5v
ZGVJbmRleCBjaGlsZDEsIEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2Rl
SW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoaW5k
ZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgIE5vZGVJbmRleCBn
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEs
IGJvb2wgaGFzSW50ZWdlckluZGV4UHJlZGljdGlvbikKKyAgICAgICAgICAgIE5vZGUmIG5vZGUg
PSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAg
ICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
CisgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBvciBwdXR0aW5nIHRv
IHRoZSBzdG9yYWdlIGNhbm5vdAorICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcHJvcGVy
dHkgc3RvcmFnZSBwb2ludGVyLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2RlLmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIE5vZGVJbmRleCBnZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFy
cmF5OjpNb2RlIGFycmF5TW9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
aW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1
cnJlbnRCbG9jay0+YXQoaSk7CkBAIC02MzUsOSArNjYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsK
LSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBiYXNlUHJlZGljdGlvbiA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIGJvb2wgbm9kZUhh
c0ludGVnZXJJbmRleFByZWRpY3Rpb24gPSAhKCEoYmFzZVByZWRpY3Rpb24gJiBTcGVjSW50MzIp
ICYmIGJhc2VQcmVkaWN0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9
PSBjaGlsZDEgJiYgaGFzSW50ZWdlckluZGV4UHJlZGljdGlvbiA9PSBub2RlSGFzSW50ZWdlcklu
ZGV4UHJlZGljdGlvbikKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGls
ZDEgJiYgbm9kZS5hcnJheU1vZGUoKSA9PSBhcnJheU1vZGUpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTk4OCw3ICsxMDE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVu
dC52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEpOwogICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSBTZXRMb2NhbHMgdGhhdCBj
YW4gZXhpdDsgd2UganVzdCBuZWVkCiAgICAgICAgICAgICAvLyB0byByZXBsYWNlIHRoZW0gd2l0
aCBhcHByb3ByaWF0ZSB0eXBlIGNoZWNrcy4KLSAgICAgICAgICAgIGlmIChtX2ZpeHBvaW50U3Rh
dGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpIHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
Zml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCkgewogICAgICAgICAgICAgICAg
IC8vIE5lZWQgdG8gYmUgY29uc2VydmF0aXZlIGF0IHRoaXMgdGltZTsgaWYgdGhlIFNldExvY2Fs
IGhhcyBhbnkgY2hhbmNlIG9mIHBlcmZvcm1pbmcKICAgICAgICAgICAgICAgICAvLyBhbnkgc3Bl
Y3VsYXRpb25zIHRoZW4gd2UgY2Fubm90IGRvIGFueXRoaW5nLgogICAgICAgICAgICAgICAgIGlm
ICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewpAQCAtMTA3Nyw3ICsxMTAzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAg
ICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoKLSAgICAgICAgICAgIGlmIChtX2ZpeHBvaW50
U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5t
X2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBlbGltaW5hdGUoZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihu
b2RlLnJlZ2lzdGVyUG9pbnRlcigpKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTExMDMsNyAr
MTEyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKICAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICBp
ZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24obm9kZS5zdHJ1Y3R1cmVTZXQoKSwgbm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSkKKyAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUVsaW1p
bmF0aW9uKG5vZGUuc3RydWN0dXJlU2V0KCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCiAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IApAQCAtMTExNCw3ICsxMTQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgaWYgKG1f
Zml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCkKKyAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGVsaW1pbmF0ZShwdXRTdHJ1Y3R1cmVTdG9yZUVs
aW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSksIFBoYW50b21QdXRTdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTI0LDEwICsxMTUwLDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBDaGVja0FycmF5OgorICAgICAgICAgICAgaWYgKGNoZWNrQXJy
YXlFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuYXJyYXlNb2RlKCkpKQor
ICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBiYXNlUHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAgYm9vbCBub2RlSGFzSW50ZWdlckluZGV4UHJl
ZGljdGlvbiA9ICEoIShiYXNlUHJlZGljdGlvbiAmIFNwZWNJbnQzMikgJiYgYmFzZVByZWRpY3Rp
b24pOwotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZUxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGVIYXNJbnRlZ2VySW5k
ZXhQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5h
cnJheU1vZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTE0MCw3
ICsxMTY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICBpZiAobV9maXhwb2ludFN0YXRl
ID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhw
b2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgZWxpbWluYXRlKHB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5hdGlvbihtX2dy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlk
ZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMTc4LDE0ICsxMjA3LDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9pbmRl
eEluQmxvY2s7CiAgICAgVmVjdG9yPE5vZGVJbmRleCwgMTY+IG1fcmVwbGFjZW1lbnRzOwogICAg
IEZpeGVkQXJyYXk8dW5zaWduZWQsIExhc3ROb2RlVHlwZT4gbV9sYXN0U2VlbjsKLSAgICBPcHRp
bWl6YXRpb25GaXhwb2ludFN0YXRlIG1fZml4cG9pbnRTdGF0ZTsKICAgICBib29sIG1fY2hhbmdl
ZDsgLy8gT25seSB0cmFja3MgY2hhbmdlcyB0aGF0IGhhdmUgYSBzdWJzdGFudGl2ZSBlZmZlY3Qg
b24gb3RoZXIgb3B0aW1pemF0aW9ucy4KIH07CiAKLWJvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3Jh
cGgsIE9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUgZml4cG9pbnRTdGF0ZSkKK2Jvb2wgcGVyZm9y
bUNTRShHcmFwaCYgZ3JhcGgpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBDU0UgUGhhc2UiKTsKLSAgICByZXR1cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoLCBm
aXhwb2ludFN0YXRlKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMTI2Njg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNs
YXNzIEdyYXBoOwogLy8gYSB3aWRlIHJhbmdlIG9mIHN1YmV4cHJlc3Npb24gc2ltaWxhcml0aWVz
LiBJdCdzIGtub3duIHRvIHByb2R1Y2UgYmlnIHdpbnMKIC8vIG9uIGEgZmV3IGJlbmNobWFya3Ms
IGFuZCBpcyByZWxhdGl2ZWx5IGNoZWFwIHRvIHJ1bi4KIAotYm9vbCBwZXJmb3JtQ1NFKEdyYXBo
JiwgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSk7Citib29sIHBlcmZvcm1DU0UoR3JhcGgmKTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDEyNjY4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBlbnVt
IFNwaWxsUmVnaXN0ZXJzTW9kZSB7IE5lZWRUb1NwaWxsLCBECiAKIGVudW0gTm9SZXN1bHRUYWcg
eyBOb1Jlc3VsdCB9OwogCi1lbnVtIE9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUgeyBGaXhwb2lu
dENvbnZlcmdlZCwgRml4cG9pbnROb3RDb252ZXJnZWQgfTsKK2VudW0gT3B0aW1pemF0aW9uRml4
cG9pbnRTdGF0ZSB7IEJlZm9yZUZpeHBvaW50LCBGaXhwb2ludE5vdENvbnZlcmdlZCwgRml4cG9p
bnRDb252ZXJnZWQgfTsKIAogaW5saW5lIGJvb2wgc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxMjY2ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAx
LDcgKzEwMSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnZlcnRU
b1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVZhbHVlLnNpbmdsZXRvbigp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsK
KyAgICAgICAgICAgICAgICBpZiAoIW1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOworICAg
ICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAg
ICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTI2Njg0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDcg
QEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIHBlcmZvcm1G
aXh1cChkZmcpOwogICAgIHBlcmZvcm1TdHJ1Y3R1cmVDaGVja0hvaXN0aW5nKGRmZyk7CiAgICAg
dW5zaWduZWQgY250ID0gMTsKKyAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnROb3RD
b252ZXJnZWQ7CiAgICAgZm9yICg7OyArK2NudCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVS
Qk9TRSkKICAgICAgICAgZGF0YUxvZygiREZHIGJlZ2lubmluZyBvcHRpbWl6YXRpb24gZml4cG9p
bnQgaXRlcmF0aW9uICMldS5cbiIsIGNudCk7CkBAIC0xMzIsNiArMTMzLDcgQEAgaW5saW5lIGJv
b2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgICAgICBkZmcucmVzZXRFeGl0U3Rh
dGVzKCk7CiAgICAgICAgIHBlcmZvcm1GaXh1cChkZmcpOwogICAgIH0KKyAgICBkZmcubV9maXhw
b2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7CiAgICAgcGVyZm9ybUNTRShkZmcsIEZpeHBv
aW50Q29udmVyZ2VkKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxv
ZygiREZHIG9wdGltaXphdGlvbiBmaXhwb2ludCBjb252ZXJnZWQgaW4gJXUgaXRlcmF0aW9ucy5c
biIsIGNudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDEyNjY4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBHZXRCeUlkOiB7
CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2lu
dCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTm9k
ZSogbm9kZVB0ciA9ICZub2RlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlzSW50
MzJTcGVjdWxhdGlvbihtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpKQpAQCAt
OTAsOCArOTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmcm9tT2JzZXJ2ZWQo
YXJyYXlQcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSwgZmFsc2UpLAogICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKTsgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtb2RlU3VwcG9ydHNMZW5ndGgoYXJyYXlN
b2RlKQotICAgICAgICAgICAgICAgICAgICAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3Ry
dWN0dXJlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobW9kZVN1cHBvcnRzTGVuZ3RoKGFycmF5
TW9kZSkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5vZGVQdHItPmNoaWxkMSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgTm9kZSBjaGVja1N0cnVjdHVyZShDaGVja1N0cnVjdHVyZSwgbm9kZVB0ci0+Y29k
ZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhw
ZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUucmVmKCk7CkBAIC0xMTMsNTMgKzExNSwzNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbm9kZVB0ci0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRl
KTsKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOwogICAgICAgICAg
ICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGVQdHIt
PmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCksIGxlbmd0aE5lZWRzU3RvcmFn
ZSk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFttX2Nv
bXBpbGVJbmRleF07CisgICAgICAgICAgICBub2RlUHRyLT5jaGlsZHJlbi5jaGlsZDIoKSA9IHN0
b3JhZ2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIG5vZGUuc2V0QXJyYXlNb2RlKAot
ICAgICAgICAgICAgICAgIHJlZmluZUFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS5hcnJheU1vZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0ucHJlZGljdGlvbigpKSk7Ci0gICAgICAgICAgICAvLyBQcmVkaWN0aW9ucyBzaG91bGQgb25s
eSBiZWNvbWUgbW9yZSwgcmF0aGVyIHRoYW4gbGVzcywgcmVmaW5lZC4gSGVuY2UKLSAgICAgICAg
ICAgIC8vIGlmIHdlIHdlcmUgZXZlciBhYmxlIHRvIENTRSB0aGUgc3RvcmFnZSBwb2ludGVyIGZv
ciB0aGlzIG9wZXJhdGlvbiwKLSAgICAgICAgICAgIC8vIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBj
b250aW51ZSB0byBiZSBhYmxlIHRvIGRvIHNvLgogICAgICAgICAgICAgQVNTRVJUKGNhbkNTRVN0
b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAg
ICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewotICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1v
ZGUoCi0gICAgICAgICAgICAgICAgcmVmaW5lQXJyYXlNb2RlKAotICAgICAgICAgICAgICAgICAg
ICBub2RlLmFycmF5TW9kZSgpLAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
Mik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoY2FuQ1NFU3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgewotICAgICAgICAgICAg
ICAgIGlmIChub2RlLmNoaWxkMygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dy
YXBoW25vZGUuY2hpbGQzKCldLm9wKCkgPT0gR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChtb2Rlc0NvbXBhdGlibGVGb3JTdG9yYWdlTG9hZCht
X2dyYXBoW25vZGUuY2hpbGQzKCldLmFycmF5TW9kZSgpLCBub2RlLmFycmF5TW9kZSgpKSk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IHdlIGRvbid0IHVzZSB0aGUgbm9kZSByZWZlcmVuY2UgYWZ0ZXIgd2UgZG8gdGhlIGFwcGVuZC4K
LSAgICAgICAgICAgICAgICAgICAgTm9kZSBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgbm9kZS5jb2Rl
T3JpZ2luLCBPcEluZm8obm9kZS5hcnJheU1vZGUoKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXggPSBt
X2dyYXBoLnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDMo
KSA9IEVkZ2UoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5hcHBlbmQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCk7
IC8vIE9uY2UgYmVjYXVzZSBpdCdzIE11c3RHZW5lcmF0ZS4KLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5yZWYoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsgLy8gQW5kIGFnYWlu
IGJlY2F1c2UgaXQncyByZWZlcmVuY2VkIGZyb20gdGhlIEdldEJ5VmFsLgotICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2VJbmRleCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAvLyBTZWUgYWJvdmUuIENvbnRpbnVlZCBmaXh1cCBvZiB0
aGUgZ3JhcGggc2hvdWxkIG5vdCByZWdyZXNzIG91ciBhYmlsaXR5Ci0gICAgICAgICAgICAgICAg
Ly8gdG8gc3BlY3VsYXRlLgotICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS5jaGlsZDMoKSk7
Ci0gICAgICAgICAgICB9CisgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7CisgICAgICAgICAgICBi
bGVzc0FycmF5T3BlcmF0aW9uKDIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5UG9wOiB7CisgICAgICAgICAgICBibGVzc0Fy
cmF5T3BlcmF0aW9uKDEpOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBW
YWx1ZVRvSW50MzI6IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpCiAgICAgICAgICAgICAgICAgJiYgbm9kZS5tdXN0R2VuZXJh
dGUoKSkgewpAQCAtMzI3LDE0ICszMTEsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAg
ICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAg
ICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAg
ICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAg
ICAgICAgIG5vZGUuc2V0QXJyYXlNb2RlKAotICAgICAgICAgICAgICAgIHJlZmluZUFycmF5TW9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKSwgbV9ncmFwaFtjaGlsZDFd
LnByZWRpY3Rpb24oKSwgbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkpOworICAgICAgICAg
ICAgYmxlc3NBcnJheU9wZXJhdGlvbigzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9k
ZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgICAgIEVkZ2Ug
Y2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZCgqbm9kZVB0ciwgMCk7CisgICAgICAgICAgICBF
ZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQoKm5vZGVQdHIsIDEpOworICAgICAgICAg
ICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKCpub2RlUHRyLCAyKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChtb2RlRm9yUHV0KG5vZGUuYXJyYXlNb2RlKCkp
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZVB0ci0+YXJyYXlNb2RlKCkp
KSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgICAgICBjYXNl
IEFycmF5OjpJbnQxNkFycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToK
QEAgLTM2OCw2ICszNTIsNTUgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIH0KICAgICAKKyAgICBO
b2RlSW5kZXggY2hlY2tBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgTm9kZUluZGV4IGFycmF5LCBib29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6TW9k
ZSkgPSBjYW5DU0VTdG9yYWdlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1vZGVJc1NwZWNpZmlj
KGFycmF5TW9kZSkpOworICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5yZWYoYXJyYXkpOworICAg
ICAgICBOb2RlIGNoZWNrQXJyYXkoQ2hlY2tBcnJheSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5
TW9kZSksIGFycmF5KTsKKyAgICAgICAgY2hlY2tBcnJheS5yZWYoKTsKKyAgICAgICAgTm9kZUlu
ZGV4IGNoZWNrQXJyYXlJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICBtX2dyYXBoLmFw
cGVuZChjaGVja0FycmF5KTsKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJ
bkJsb2NrLCBjaGVja0FycmF5SW5kZXgpOworCisgICAgICAgIGlmICghc3RvcmFnZUNoZWNrKGFy
cmF5TW9kZSkpCisgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAKKyAgICAgICAg
bV9ncmFwaC5yZWYoYXJyYXkpOworICAgICAgICBOb2RlIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2UoCisgICAgICAgICAgICBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBP
cEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpOworICAgICAgICBnZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlLnJlZigpOworICAgICAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUlu
ZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBF
ZGdlKGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCk7CisgICAgICAgIG1fZ3JhcGguYXBw
ZW5kKGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICBtX2luc2VydGlvblNldC5h
cHBlbmQobV9pbmRleEluQmxvY2ssIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCk7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4Owor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24odW5zaWduZWQgY2hpbGRJ
ZHgpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVG
aXhwb2ludCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIE5vZGUq
IG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgICAgICAKKyAgICAg
ICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgcmVmaW5lQXJyYXlNb2RlKAor
ICAgICAgICAgICAgICAgIG5vZGVQdHItPmFycmF5TW9kZSgpLAorICAgICAgICAgICAgICAgIG1f
Z3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCldLnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICBt
X2dyYXBoW25vZGVQdHItPmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBpZiAoIW1vZGVJc1NwZWNpZmljKG5vZGVQdHItPmFycmF5TW9kZSgpKSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0g
Y2hlY2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgbm9k
ZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIG1fZ3JhcGguY2hpbGQo
bV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIGNoaWxkSWR4KSA9IHN0b3JhZ2U7CisgICAgfQorICAg
IAogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQogICAgIHsKICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbZWRnZV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkocmV2aXNpb24gMTI2Njg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE4IEBAIHN0YXRpYyBjb25z
dCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAjdW5kZWYgU1RSSU5HSVpFX0RGR19PUF9FTlVNCiB9
OwogCitHcmFwaDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxK
U1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcykKKyAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwgbV9wcm9maWxlZEJsb2NrKGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKKyAgICAsIG1faGFzQXJndW1lbnRzKGZhbHNlKQorICAg
ICwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQorICAgICwg
bV9tdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1ZXMpCisgICAgLCBtX2ZpeHBvaW50U3Rh
dGUoQmVmb3JlRml4cG9pbnQpCit7CisgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7Cit9CisK
IGNvbnN0IGNoYXIgKkdyYXBoOjpvcE5hbWUoTm9kZVR5cGUgb3ApCiB7CiAgICAgcmV0dXJuIGRm
Z09wTmFtZXNbb3BdOwpAQCAtMzkyLDggKzQwNCwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKCkKICAg
ICAgICAgaWYgKF9ub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25v
ZGUuZmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgX2NoaWxk
SWR4IDwgX25vZGUuZmlyc3RDaGlsZCgpICsgX25vZGUubnVtQ2hpbGRyZW4oKTsgIFwKLSAgICAg
ICAgICAgICAgICAgX2NoaWxkSWR4KyspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92YXJBcmdDaGlsZHJlbltf
Y2hpbGRJZHhdKTsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgX2NoaWxkSWR4
KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKG1fdmFyQXJnQ2hpbGRyZW5b
X2NoaWxkSWR4XSk7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSBl
bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgICAgIGlmICghX25vZGUuY2hpbGQxKCkpIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLmNo
aWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTQ4Myw2ICs0OTcs
OCBAQCB2b2lkIEdyYXBoOjpjb2xsZWN0R2FyYmFnZSgpCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7CiAgICAgICAgICAgICAgICAgIGNoaWxk
SWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7CiAgICAgICAgICAg
ICAgICAgICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggY2hpbGROb2RlSW5kZXggPSBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XS5pbmRleCgpOwogICAgICAgICAgICAgICAgIGlmICghYXQoY2hpbGROb2RlSW5kZXgpLnJlZigp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyNjY4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNzYsMTYgKzc2LDcgQEAgc3RydWN0
IFJlc29sdmVHbG9iYWxEYXRhIHsKIC8vIE5vZGVzIHRoYXQgYXJlICdkZWFkJyByZW1haW4gaW4g
dGhlIHZlY3RvciB3aXRoIHJlZkNvdW50IDAuCiBjbGFzcyBHcmFwaCA6IHB1YmxpYyBWZWN0b3I8
Tm9kZSwgNjQ+IHsKIHB1YmxpYzoKLSAgICBHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNv
bnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQotICAgICAgICA6IG1fZ2xv
YmFsRGF0YShnbG9iYWxEYXRhKQotICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAg
ICAgICAgLCBtX3Byb2ZpbGVkQmxvY2soY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQotICAgICAg
ICAsIG1faGFzQXJndW1lbnRzKGZhbHNlKQotICAgICAgICAsIG1fb3NyRW50cnlCeXRlY29kZUlu
ZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMo
bXVzdEhhbmRsZVZhbHVlcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2sp
OwotICAgIH0KKyAgICBHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENvZGVCbG9jayog
Y29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRz
PEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKICAgICAKICAgICB1c2luZyBWZWN0b3I8Tm9k
ZSwgNjQ+OjpvcGVyYXRvcltdOwogICAgIHVzaW5nIFZlY3RvcjxOb2RlLCA2ND46OmF0OwpAQCAt
NTg1LDggKzU3NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUu
Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKQot
ICAgICAgICAgICAgICAgIHZvdGUobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIGJhbGxvdCk7
CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoISFt
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKKyAgICAgICAgICAgICAgICAgICAgdm90ZShtX3Zh
ckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgYmFsbG90KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTYwOCw4ICs2MDEsMTAgQEAgcHVi
bGljOgogICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrW2luZGV4SW5CbG9j
a107CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgICAg
IGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2Rl
LmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgKytjaGlsZElkeCkKLSAgICAgICAg
ICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIG9s
ZFRoaW5nLCBuZXdUaGluZywgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwg
bm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7ICsrY2hpbGRJZHgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKQEAgLTY4NSw2ICs2ODAsOCBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKICAgICB1bnNpZ25lZCBtX29zckVudHJ5
Qnl0ZWNvZGVJbmRleDsKICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtX211c3RIYW5kbGVWYWx1ZXM7
CisgICAgCisgICAgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSBtX2ZpeHBvaW50U3RhdGU7CiBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4
LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vz
c29ySW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDEyNjY4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03NDMsNiArNzQzLDkgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEdl
dEJ5VmFsOgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBTdHJpbmdD
aGFyQ29kZUF0OgorICAgICAgICBjYXNlIENoZWNrQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXlQ
dXNoOgorICAgICAgICBjYXNlIEFycmF5UG9wOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03NTUsMTAgKzc1
OCwxMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBcnJheTo6
TW9kZT4obV9vcEluZm8pOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldEFycmF5TW9kZShBcnJh
eTo6TW9kZSBhcnJheU1vZGUpCisgICAgYm9vbCBzZXRBcnJheU1vZGUoQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc0FycmF5TW9kZSgpKTsKKyAgICAgICAg
aWYgKHRoaXMtPmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgbV9vcEluZm8gPSBhcnJheU1vZGU7CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAKICAgICBib29sIGhhc1ZpcnR1YWxSZWdpc3RlcigpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxMjY2ODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzOCw3ICsxMzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFj
cm8oQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05v
dEV4aXQgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVzdWx0
U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldFByb3BlcnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0b3Jh
Z2UpIFwKLSAgICBtYWNybyhHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKKyAgICBtYWNybyhDaGVja0FycmF5LCBOb2RlTXVz
dEdlbmVyYXRlKSBcCisgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgTm9kZVJl
c3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCiAg
ICAgbWFjcm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRB
cnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQaGFzZS5oCShyZXZpc2lvbiAxMjY2ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEzICs5NSw2IEBAIGJvb2wgcnVu
UGhhc2UoR3JhcGgmIGdyYXBoKQogICAgIHJldHVybiBydW5BbmRMb2cocGhhc2UpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBQaGFzZVR5cGUsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTE+Ci1ib29s
IHJ1blBoYXNlKEdyYXBoJiBncmFwaCwgQXJndW1lbnRUeXBlMSBhcmcxKQotewotICAgIFBoYXNl
VHlwZSBwaGFzZShncmFwaCwgYXJnMSk7Ci0gICAgcmV0dXJuIHJ1bkFuZExvZyhwaGFzZSk7Ci19
Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEyNjY4NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MDMsOCArNzAzLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChu
b2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgICAgICBjaGlsZElk
eCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAg
ICAgICBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1
ZSk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAo
ISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQorICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQx
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEy
NjY4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MDYsNiArMjQwNiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5n
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tB
cnJheTogeworICAgICAgICBjaGVja0FycmF5KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUo
KSkgewpAQCAtMjQ5Nyw2ICsyNTAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBFZGdlIGNoaWxkMSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hp
bGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDIpOworICAgICAgICBFZGdlIGNoaWxkNCA9IG1faml0LmdyYXBoKCkudmFy
QXJnQ2hpbGQobm9kZSwgMyk7CiAgICAgICAgIAogICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1v
ZGUgPSBtb2RlRm9yUHV0KG5vZGUuYXJyYXlNb2RlKCkpOwogICAgICAgICBib29sIGFscmVhZHlI
YW5kbGVkID0gZmFsc2U7CkBAIC0yNTM4LDI3ICsyNTQ0LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdw
cigpOwogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAotICAg
ICAgICBzcGVjdWxhdGVBcnJheShhcnJheU1vZGUsIGNoaWxkMSwgYmFzZVJlZyk7Ci0KICAgICAg
ICAgc3dpdGNoIChhcnJheU1vZGUpIHsKICAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKICAg
ICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CiAgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CiAKICAgICAgICAgICAgIC8vIE1hcCBiYXNlLCBwcm9wZXJ0eSAmIHZh
bHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIuCiAgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAg
ICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJp
ZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICBpZiAoSGVhcDo6
aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFs
dWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2gu
Z3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIGNoaWxkNCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UucmVnKCk7CiAKICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykg
ewotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAg
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CkBAIC0yNTc1LDExICsyNTgw
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgYmFzZS51c2UoKTsKICAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOwogICAgICAgICAgICAg
dmFsdWUudXNlKCk7CisgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOwogICAgICAgICAKLSAgICAg
ICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KLSAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc2NyYXRjaFJlZzsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFn
ZVJlZyk7Ci0KICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xl
OyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CkBAIC0yNzQ5LDcg
KzI3NTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
Y2FzZSBBcnJheVB1c2g6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBH
UFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTI3NTksOSArMjc2MSw2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIHdyaXRlQmFy
cmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJv
cGVydHlBY2Nlc3MsIHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogCi0gICAgICAgIHNw
ZWN1bGF0ZUFycmF5KEFycmF5OjpKU0FycmF5LCBub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKLQot
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
QXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAg
ICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KQEAgLTI3ODcsMTggKzI3
ODYsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAKICAgICBjYXNlIEFycmF5UG9wOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZSh0aGlzKTsK
LSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSBzdG9yYWdlTGVuZ3RoKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIg
PSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlQXJyYXko
QXJyYXk6OkpTQXJyYXksIG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOwotCi0gICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFn
ZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMjY2ODQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjk1LDIwICsyOTUsMjEgQEAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Iq
IFNwZWN1bGF0aXZlSgogICAgIH0KIH0KIAotY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUsIEVkZ2Ug
ZWRnZSwgR1BSUmVnIGJhc2VSZWcpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KEFy
cmF5OjpNb2RlIGFycmF5TW9kZSwgRWRnZSBlZGdlLCBHUFJSZWcgYmFzZVJlZykKIHsKLSAgICBj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogcmVzdWx0ID0gdHlwZWRBcnJheURlc2NyaXB0b3Io
YXJyYXlNb2RlKTsKKyAgICBBU1NFUlQobW9kZUlzU3BlY2lmaWMobm9kZS5hcnJheU1vZGUoKSkp
OwogICAgIAotICAgIGlmIChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKGVkZ2Up
LCBhcnJheU1vZGUpKQorICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgIAorICAgIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiByZXN1bHQgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihu
b2RlLmFycmF5TW9kZSgpKTsKKyAgICAKKyAgICBpZiAobW9kZUFscmVhZHlDaGVja2VkKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBleHBlY3RlZENsYXNzSW5m
byA9IDA7CiAgICAgCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpG
b3JjZUV4aXQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgc3dpdGNoIChub2RlLmFycmF5
TW9kZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBlY3RlZENsYXNz
SW5mbyA9ICZKU1N0cmluZzo6c19pbmZvOwogICAgICAgICBicmVhazsKQEAgLTM5Myw4ICszOTQs
MTAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSQogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4oTm9kZSYgbm9kZSkKIHsKICAgICBpZiAobm9kZS5mbGFn
cygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5u
dW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAgdXNlKG1faml0LmdyYXBoKCku
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBu
b2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKKyAgICAgICAgICAgIGlmICghIW1faml0
LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCisgICAgICAgICAgICAgICAgdXNl
KG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgRWRnZSBjaGlsZDEgPSBub2RlLmNoaWxkMSgpOwogICAgICAg
ICBpZiAoIWNoaWxkMSkgewpAQCAtMjE0Niw2ICsyMTQ5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25JbgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxl
bWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3Vu
ZGluZyByb3VuZGluZykKIHsKKyAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKKyAgICAKICAgICBFZGdlIHZhbHVlVXNlID0gbV9qaXQuZ3JhcGgoKS52
YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAKICAgICBHUFJUZW1wb3JhcnkgdmFsdWU7CkBAIC0y
MjEzLDEwICsyMjE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
SQogICAgIH0KICAgICBBU1NFUlRfVU5VU0VEKHZhbHVlR1BSLCB2YWx1ZUdQUiAhPSBwcm9wZXJ0
eSk7CiAgICAgQVNTRVJUKHZhbHVlR1BSICE9IGJhc2UpOwotICAgIEdQUlRlbXBvcmFyeSBzdG9y
YWdlKHRoaXMpOwotICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICBB
U1NFUlQodmFsdWVHUFIgIT0gc3RvcmFnZVJlZyk7Ci0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3Jh
Z2VSZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzOwogICAgIGlmIChu
b2RlLm9wKCkgPT0gUHV0QnlWYWwpCiAgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKTsKQEAgLTIyNzgsNiAr
MjI4MSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwKIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHBy
b3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUpCiB7CisgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsK
KyAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgCiAgICAgRWRnZSBi
YXNlVXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICBFZGdlIHZh
bHVlVXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAKQEAgLTIy
ODcsMTAgKzIyOTMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JG
CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAKLSAgICBHUFJUZW1w
b3Jhcnkgc3RvcmFnZSh0aGlzKTsKLSAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7Ci0gICAgCi0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
LCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzOwogICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWwp
CiAgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2Ny
aXB0b3IubV9sZW5ndGhPZmZzZXQpKTsKQEAgLTMxMDksOCArMzExMSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHIKICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0
aGlzKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgCi0gICAg
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPQotICAgICAgICBzcGVjdWxh
dGVBcnJheShub2RlLmFycmF5TW9kZSgpLCBub2RlLmNoaWxkMSgpLCBiYXNlUmVnKTsKKyAgICBj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlw
dG9yKG5vZGUuYXJyYXlNb2RlKCkpOwogICAgIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUo
KSkgewogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKQEAgLTMyNTIsMjYgKzMyNTMsMjIgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSYgbm9kZSkKIHsKLSAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
LSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAKLSAgICBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9Ci0gICAgICAgIHNwZWN1bGF0ZUFy
cmF5KG5vZGUuYXJyYXlNb2RlKCksIG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOworICAgIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Io
bm9kZS5hcnJheU1vZGUoKSk7CiAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKICAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czoKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRHUFIpOworICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NU
aGFuLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAg
ICAgICAgIAogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0
R1BSKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgYnJlYWs7CkBAIC0zMjc5LDYgKzMyNzYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CisgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwogICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+
bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTI2Njg0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk3
LDcgKzIxOTcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlKTsKICAgICAKLSAgICBjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciogc3BlY3VsYXRlQXJyYXkoQXJyYXk6Ok1vZGUsIEVkZ2UgYmFz
ZUVkZ2UsIEdQUlJlZyBiYXNlUmVnKTsKKyAgICB2b2lkIGNoZWNrQXJyYXkoTm9kZSYpOwogICAg
IAogICAgIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgogICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50
SW50ZXJuYWwoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160593</attachid>
            <date>2012-08-26 00:06:48 -0700</date>
            <delta_ts>2012-08-26 11:40:11 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>cseindexing_patch_2.diff</filename>
            <type>text/plain</type>
            <size>63999</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2Njk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBA
CisyMDEyLTA4LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXJyYXkgdHlwZSBjaGVja3MgYW5kIHN0b3JhZ2UgYWNjZXNzZXMgc2hvdWxkIGJlIHVuaWZvcm1s
eSByZXByZXNlbnRlZCBhbmQgYXZhaWxhYmxlIHRvIENTRQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUwMTMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmZyb21TdHJ1Y3R1cmUpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpy
ZWZpbmVBcnJheU1vZGUpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAgICAg
KERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJheSk6CisgICAgICAgIChKU0M6
OkRGRzo6bGVuZ3RoTmVlZHNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNTcGVj
aWZpYyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmdldEFycmF5TW9kZSk6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcv
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2lt
cGxpZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9ja3MpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OkNTRVBoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbik6CisgICAgICAg
IChDU0VQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrQXJyYXlFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpw
ZXJmb3JtTm9kZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNTRSk6CisgICAgICAg
ICogZGZnL0RGR0NTRVBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdD
b21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAg
ICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToK
KyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpjaGVj
a0FycmF5KToKKyAgICAgICAgKEZpeHVwUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVw
UGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToKKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmNvbGxlY3RHYXJiYWdlKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dm90
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGUpOgorICAgICAgICAqIGRm
Zy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQXJyYXlNb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpzZXRBcnJheU1vZGUpOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR1BoYXNlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6Om1lcmdlRGVmYXVsdEZsYWdzKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6dXNlQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlM
ZW5ndGgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3Bl
Y3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorCiAyMDEyLTA4LTI1ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5IGEgbGl0dGxlIGhhcmRl
ciB0byBmaXggdGhlIExpbnV4IGJ1aWxkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjY2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04ODcsMTIgKzg4NywxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1h
a2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTAwLDQyICs4OTgsMzQgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpK
U0FycmF5T3V0T2ZCb3VuZHM6CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUg
bW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcgb2YgdGhlIG91dC1vZi1ib3VuZHMKICAgICAgICAg
ICAgIC8vIGNhc2UuCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFycmF5KTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNJbnQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNV
aW50OEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWludDhD
bGFtcGVkQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MTZBcnJh
eSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQzMkFycmF5KTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBpZiAobm9kZS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwpAQCAtOTQzLDEyICs5MzMsMTAgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjRmxvYXQ2NEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05NzAsMjAgKzk1
OCwxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSku
ZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4
SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1l
bnRzOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQXJndW1lbnRzKTsK
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hp
bGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwpAQCAtOTkxLDcgKzk3NSw2IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVy
KFNwZWNJbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0lu
dDMyKTsKQEAgLTk5OSw3ICs5ODIsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVt
YmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5
OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjSW50MzJBcnJheSk7CiAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CkBAIC0xMDA3LDcgKzk4
OSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxk
M10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTEwMTUsNyArOTk2LDYgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSku
ZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMyku
ZmlsdGVyKFNwZWNJbnQzMik7CkBAIC0xMDIzLDcgKzEwMDMsNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMp
LmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3Bl
Y1VpbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMy
KTsKQEAgLTEwMzEsNyArMTAxMCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1i
ZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5
OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjVWludDMyQXJyYXkpOwog
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAg
ICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwpAQCAtMTAzOSwxMiAr
MTAxNywxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmls
dGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRl
cihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVt
YmVyKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA1NywxMyArMTAzMywxMSBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNl
IEFycmF5UHVzaDoKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY051bWJlcik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBA
IC0xNDkyLDggKzE0NjYsMTMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBh
IEpTIHZhbHVlLgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2U6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhp
cyBpcyAoYWxtb3N0KSBhbHdheXMgZm9sbG93ZWQgYnkgR2V0QnlWYWwsIHdoaWNoIGRvZXMgZXhp
dC4gU28gbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGJlIG1vcmUgcHJlY2lzZS4KKyAgICBjYXNlIENo
ZWNrQXJyYXk6IHsKKyAgICAgICAgaWYgKG1vZGVBbHJlYWR5Q2hlY2tlZChmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgbV9mb3VuZENvbnN0
YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOyAv
LyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBieSBvcGVyYXRpb25zIChsaWtlIEdldEJ5VmFs
KSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBpcyBubyBwb2ludCBpbiB1cyB0cnlpbmcgdG8g
YmUgY2xldmVyIGhlcmUuCiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAg
ICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKQEAgLTE1MDQsNiArMTQ4Myw5IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2lu
ZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0
LgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xNTM1LDYgKzE1MTcsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICBi
cmVhazsgCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
MjY2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNiArMzEyLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgogICAgICAgICAg
ICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAg
ICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CisgICAgICAgICAg
ICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBj
YXJlIGFib3V0IHRoZXNlIGJlY2F1c2UgaWYgd2UgZ2V0IHVzZXMgb2YgdGhlIHJlbGV2YW50CiAg
ICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlIHRoZW4gd2UgY2FuIHNhZmVseSBnZXQgcmlk
IG9mIHRoZXNlLCB0b28uIFRoaXMgb2YgY291cnNlCiAgICAgICAgICAgICAgICAgICAgIC8vIHJl
bGllcyBvbiB0aGVyZSBub3QgYmVpbmcgYW55IGluZm9ybWF0aW9uIHRyYW5zZmVycmVkIGJ5IHRo
ZSBDRkEKQEAgLTQ3Niw3ICs0NzcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBD
aGVja1N0cnVjdHVyZToKICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVy
ZToKICAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50Ogot
ICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
OiB7CisgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQ6CisgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIGNhbiBqdXN0IGdldCByaWQgb2YgdGhpcyBub2RlLCBpZiBpdCByZWZlcmVu
Y2VzIGEgcGhhbnRvbSBhcmd1bWVudC4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9P
cHRpbWl6ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNw
cAkocmV2aXNpb24gMTI2NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSwxNiBAQCBBcnJheTo6TW9kZSBm
cm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlCiAgICAgfQogfQogCitBcnJheTo6TW9kZSBmcm9t
U3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBib29sIG1ha2VTYWZlKQoreworICAgIHJl
dHVybiBmcm9tT2JzZXJ2ZWQoYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpLCBtYWtl
U2FmZSk7Cit9CisKIEFycmF5OjpNb2RlIHJlZmluZUFycmF5TW9kZShBcnJheTo6TW9kZSBhcnJh
eU1vZGUsIFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KQogeworICAg
IGlmIChhcnJheU1vZGUgIT0gQXJyYXk6OlVuZGVjaWRlZCkKKyAgICAgICAgcmV0dXJuIGFycmF5
TW9kZTsKKyAgICAKICAgICBpZiAoIWJhc2UgfHwgIWluZGV4KSB7CiAgICAgICAgIC8vIEl0IGNh
biBiZSB0aGF0IHdlIGhhZCBhIGxlZ2l0aW1hdGUgYXJyYXlNb2RlIGJ1dCBubyBpbmNvbWluZyBw
cmVkaWN0aW9ucy4gVGhhdCdsbAogICAgICAgICAvLyBoYXBwZW4gaWYgd2UgaW5saW5lZCBjb2Rl
IGJhc2VkIG9uLCBzYXksIGEgZ2xvYmFsIHZhcmlhYmxlIHdhdGNocG9pbnQsIGJ1dCBsYXRlcgpA
QCAtNjQsMTggKzcyLDYgQEAgQXJyYXk6Ok1vZGUgcmVmaW5lQXJyYXlNb2RlKEFycmF5OjpNb2Rl
IAogICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKGluZGV4KSB8fCAhaXNDZWxsU3BlY3VsYXRp
b24oYmFzZSkpCiAgICAgICAgIHJldHVybiBBcnJheTo6R2VuZXJpYzsKICAgICAKLSAgICAvLyBQ
YXNzIHRocm91Z2ggYW55IGFycmF5IG1vZGVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGRlY2lkZWQg
YnkgdGhlIGFycmF5IHByb2ZpbGUsIHNpbmNlCi0gICAgLy8gdGhlIHByZWRpY3Rpb25zIG9mIHRo
ZSBpbnB1dHMgd2lsbCBub3QgdGVsbCB1cyBhbnl0aGluZyB1c2VmdWwgdGhhdCB3ZSBkaWRuJ3Qg
YWxyZWFkeQotICAgIC8vIGdldCBmcm9tIHRoZSBhcnJheSBwcm9maWxlLgotICAgIHN3aXRjaCAo
YXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgotICAgICAgICBy
ZXR1cm4gYXJyYXlNb2RlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICAKICAgICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAgcmV0dXJuIEFy
cmF5OjpTdHJpbmc7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJy
YXlNb2RlLmgJKHJldmlzaW9uIDEyNjY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEyICs2MywyNSBAQCBlbnVtIE1v
ZGUgewogCiBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9vbCBt
YWtlU2FmZSk7CiAKK0FycmF5OjpNb2RlIGZyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGJvb2wgbWFrZVNhZmUpOworCiBBcnJheTo6TW9kZSByZWZpbmVBcnJheU1vZGUoQXJyYXk6
Ok1vZGUsIFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KTsKIAogYm9v
bCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYsIEFycmF5OjpNb2RlKTsKIAogY29u
c3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlKTsKIAoraW5saW5lIGJvb2wgbW9kZUlz
SlNBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1vZGUp
IHsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKwogaW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6
TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKQEAgLTgyLDYgKzk1
LDExIEBAIGlubGluZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXIKICAgICB9CiB9
CiAKK2lubGluZSBib29sIGxlbmd0aE5lZWRzU3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUp
Cit7CisgICAgcmV0dXJuIG1vZGVJc0pTQXJyYXkoYXJyYXlNb2RlKTsKK30KKwogaW5saW5lIEFy
cmF5OjpNb2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRj
aCAoYXJyYXlNb2RlKSB7CkBAIC0xMTUsNyArMTMzLDcgQEAgaW5saW5lIGJvb2wgbW9kZXNDb21w
YXRpYmxlRm9yU3RvcmFnZUxvYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIGJvb2wg
bW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNb2RlIG1vZGUpCitpbmxpbmUgYm9vbCBtb2RlSXNT
cGVjaWZpYyhBcnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNh
c2UgQXJyYXk6OlVuZGVjaWRlZDoKQEAgLTEyNyw2ICsxNDUsMTEgQEAgaW5saW5lIGJvb2wgbW9k
ZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgbW9kZVN1
cHBvcnRzTGVuZ3RoKEFycmF5OjpNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIG1vZGVJc1NwZWNp
ZmljKG1vZGUpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjY2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiAr
NzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9pbmxpbmVTdGFja1RvcCgwKQogICAgICAgICAs
IG1faGF2ZUJ1aWx0T3BlcmFuZE1hcHMoZmFsc2UpCiAgICAgICAgICwgbV9lbXB0eUpTVmFsdWVJ
bmRleChVSU5UX01BWCkKKyAgICAgICAgLCBtX2N1cnJlbnRJbnN0cnVjdGlvbigwKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgIApAQCAtODE4LDkgKzgx
OSwxNCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbihtX2dyYXBoLnNp
emUoKSwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOwogICAgIH0KICAgICAKLSAgICBBcnJheTo6
TW9kZSBnZXRBcnJheU1vZGVXaXRob3V0T1NSRXhpdChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBOb2RlSW5kZXggYmFzZSkKKyAgICBBcnJheTo6TW9kZSBnZXRBcnJheU1vZGUoQXJy
YXlQcm9maWxlKiBwcm9maWxlKQorICAgIHsKKyAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKCk7CisgICAgICAgIHJldHVybiBmcm9tT2JzZXJ2ZWQocHJvZmlsZS0+b2Jz
ZXJ2ZWRBcnJheU1vZGVzKCksIGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgQXJyYXk6Ok1vZGUg
Z2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhBcnJheVByb2ZpbGUqIHByb2ZpbGUsIE5vZGVJbmRl
eCBiYXNlKQogICAgIHsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwogICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oKTsKICAgICAgICAgaWYgKHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0
dXJlKCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBiYXNl
KTsKQEAgLTgzOCwxNiArODQ0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZyb21PYnNl
cnZlZChwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSwgbWFrZVNhZmUpOwogICAgIH0KICAg
ICAKLSAgICBBcnJheTo6TW9kZSBnZXRBcnJheU1vZGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgTm9kZUluZGV4IGJhc2UpCi0gICAgewotICAgICAgICBBcnJheTo6TW9kZSByZXN1
bHQgPSBnZXRBcnJheU1vZGVXaXRob3V0T1NSRXhpdChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhc2Up
OwotICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBBcnJheTo6Rm9yY2VFeGl0KQotICAg
ICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICAKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0KICAgICBOb2RlSW5kZXggbWFrZVNhZmUoTm9kZUluZGV4IG5v
ZGVJbmRleCkKICAgICB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07
CkBAIC0xMTUwLDYgKzExNDYsOCBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIENhY2hlIG9mIGNv
ZGUgYmxvY2tzIHRoYXQgd2UndmUgZ2VuZXJhdGVkIGJ5dGVjb2RlIGZvci4KICAgICBCeXRlQ29k
ZUNhY2hlPGNhbklubGluZUZ1bmN0aW9uRm9yPiBtX2NvZGVCbG9ja0NhY2hlOworICAgIAorICAg
IEluc3RydWN0aW9uKiBtX2N1cnJlbnRJbnN0cnVjdGlvbjsKIH07CiAKICNkZWZpbmUgTkVYVF9P
UENPREUobmFtZSkgXApAQCAtMTU1Myw3ICsxNTUxLDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBO
b2RlSW5kZXggYXJyYXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbygwKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgw
KSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAgICAg
IEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJbnN0cnVjdGlv
bls1XS51LmFycmF5UHJvZmlsZSk7CisgICAgICAgIGlmICghbW9kZUlzSlNBcnJheShhcnJheU1v
ZGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBOb2RlSW5kZXggYXJyYXlQ
dXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJl
ZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0
KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKICAgICAgICAgaWYgKHVz
ZXNSZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQdXNoKTsKICAg
ICAgICAgCkBAIC0xNTY0LDcgKzE1NjUsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW50cmluc2ljKGJvbwogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0g
MSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRl
eCBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRp
Y3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOworICAg
ICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobV9jdXJyZW50SW5zdHJ1
Y3Rpb25bNV0udS5hcnJheVByb2ZpbGUpOworICAgICAgICBpZiAoIW1vZGVJc0pTQXJyYXkoYXJy
YXlNb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgTm9kZUluZGV4IGFy
cmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhw
cmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpKTsK
ICAgICAgICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwg
YXJyYXlQb3ApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3OTIsNiArMTc5Niw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgCiAgICAgICAg
IC8vIFN3aXRjaCBvbiB0aGUgY3VycmVudCBieXRlY29kZSBvcGNvZGUuCiAgICAgICAgIEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNCZWdpbiArIG1fY3VycmVu
dEluZGV4OworICAgICAgICBtX2N1cnJlbnRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlv
bjsgLy8gU29tZSBtZXRob2RzIHdhbnQgdG8gdXNlIHRoaXMsIGFuZCB3ZSdkIHJhdGhlciBub3Qg
dGhyZWFkIGl0IHRocm91Z2ggY2FsbHMuCiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50
ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpOwogICAg
ICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAKQEAgLTIxNzcsNyArMjE4Miw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFzZSk7CisgICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUg
PSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5
UHJvZmlsZSwgYmFzZSk7CiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0
QnlWYWwgPSBhZGRUb0dyYXBoKEdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBiYXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlWYWwpOwpAQCAtMjE4OCw3ICsyMTkzLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3B1
dF9ieV92YWw6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogCi0gICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1v
ZGUgPSBnZXRBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBiYXNlKTsKKyAgICAgICAgICAg
IEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MoY3VycmVu
dEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBiYXNlKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOwpAQCAtMjE5Niw2ICsyMjAxLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
YmFzZSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CiAgICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChOb05v
ZGUpOyAvLyBMZWF2ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdlLgogICAgICAgICAgICAgYWRk
VG9HcmFwaChOb2RlOjpWYXJBcmcsIFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZv
KDApKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X3ZhbCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDEyNjY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1OSw4
ICs2NTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk
SWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgKytjaGlsZElkeCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBv
c3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5b
Y2hpbGRJZHhdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9j
YWwoZmlyc3RCbG9jaywgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgY2hhbmdl
UmVmKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
ISFub2RlLmNoaWxkMSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9j
YWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgY2hhbmdlUmVmKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDIoKSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDEyNjY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw5ICszNSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgQ1NF
UGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgotICAgIENTRVBoYXNlKEdyYXBoJiBncmFw
aCwgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSBmaXhwb2ludFN0YXRlKQorICAgIENTRVBoYXNl
KEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImNvbW1vbiBzdWJleHByZXNz
aW9uIGVsaW1pbmF0aW9uIikKLSAgICAgICAgLCBtX2ZpeHBvaW50U3RhdGUoZml4cG9pbnRTdGF0
ZSkKICAgICB7CiAgICAgICAgIC8vIFJlcGxhY2VtZW50cyBhcmUgdXNlZCB0byBpbXBsZW1lbnQg
bG9jYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24uCiAgICAgICAgIG1fcmVwbGFj
ZW1lbnRzLnJlc2l6ZShtX2dyYXBoLnNpemUoKSk7CkBAIC0zMjcsNyArMzI2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgY2hlY2tTdHJ1Y3R1
cmVMb2FkRWxpbWluYXRpb24oY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIE5vZGVJ
bmRleCBjaGlsZDEpCisgICAgYm9vbCBjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlSW5kZXggY2hpbGQxKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKICAgICAgICAgICAg
IE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKQEAgLTYyNCw4ICs2MjMs
MzcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0K
KyAgICAKKyAgICBib29sIGNoZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxLCBB
cnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luZGV4SW5CbG9jazsgaS0tOykgeworICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxLCBib29sIGhhc0ludGVnZXJJ
bmRleFByZWRpY3Rpb24pCisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07
CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBQdXRC
eU9mZnNldDoKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAg
IC8vIENoYW5naW5nIHRoZSBzdHJ1Y3R1cmUgb3IgcHV0dGluZyB0byB0aGUgc3RvcmFnZSBjYW5u
b3QKKyAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHByb3BlcnR5IHN0b3JhZ2UgcG9pbnRl
ci4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgQ2hlY2tBcnJheToKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBj
aGlsZDEgJiYgbm9kZS5hcnJheU1vZGUoKSA9PSBhcnJheU1vZGUpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9i
YmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxLCBBcnJheTo6TW9kZSBhcnJheU1v
ZGUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0t
OykgewogICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkp
OwpAQCAtNjM1LDkgKzY2Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewogICAgICAg
ICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgYmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnBy
ZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBib29sIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVk
aWN0aW9uID0gISghKGJhc2VQcmVkaWN0aW9uICYgU3BlY0ludDMyKSAmJiBiYXNlUHJlZGljdGlv
bik7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGhhc0lu
dGVnZXJJbmRleFByZWRpY3Rpb24gPT0gbm9kZUhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24pCisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUuYXJyYXlN
b2RlKCkgPT0gYXJyYXlNb2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC05ODgsNyArMTAxNCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQudmFyaWFibGVBY2Nlc3NE
YXRhKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYmUgYWJsZSB0byByZW1vdmUgU2V0TG9jYWxzIHRoYXQgY2FuIGV4aXQ7IHdlIGp1c3Qg
bmVlZAogICAgICAgICAgICAgLy8gdG8gcmVwbGFjZSB0aGVtIHdpdGggYXBwcm9wcmlhdGUgdHlw
ZSBjaGVja3MuCi0gICAgICAgICAgICBpZiAobV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90
Q29udmVyZ2VkKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0g
Rml4cG9pbnROb3RDb252ZXJnZWQpIHsKICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGJlIGNv
bnNlcnZhdGl2ZSBhdCB0aGlzIHRpbWU7IGlmIHRoZSBTZXRMb2NhbCBoYXMgYW55IGNoYW5jZSBv
ZiBwZXJmb3JtaW5nCiAgICAgICAgICAgICAgICAgLy8gYW55IHNwZWN1bGF0aW9ucyB0aGVuIHdl
IGNhbm5vdCBkbyBhbnl0aGluZy4KICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NE
YXRhLT5pc0NhcHR1cmVkKCkpIHsKQEAgLTEwNzcsNyArMTEwMyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgUHV0R2xv
YmFsVmFyQ2hlY2s6Ci0gICAgICAgICAgICBpZiAobV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50
Tm90Q29udmVyZ2VkKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09
IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZWxpbWluYXRlKGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24obm9kZS5yZWdpc3RlclBvaW50
ZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTAzLDcgKzExMjksNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgIGNh
c2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJl
TG9hZEVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlU2V0KCksIG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkpCisgICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbihub2RlLnN0cnVj
dHVyZVNldCgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAgICAgIGVsaW1p
bmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTExMTQsNyArMTE0
MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIFB1dFN0cnVjdHVyZToKLSAgICAgICAgICAgIGlmIChtX2ZpeHBvaW50U3RhdGUgPT0g
Rml4cG9pbnROb3RDb252ZXJnZWQpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50
U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBlbGltaW5hdGUocHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbihub2RlLmNo
aWxkMSgpLmluZGV4KCkpLCBQaGFudG9tUHV0U3RydWN0dXJlKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTEyNCwxMCArMTE1MCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsaW1p
bmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQ2hlY2tBcnJheToKKyAgICAgICAgICAgIGlmIChjaGVja0FycmF5RWxpbWluYXRpb24obm9k
ZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgICAgICBl
bGltaW5hdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgYmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsK
LSAgICAgICAgICAgIGJvb2wgbm9kZUhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24gPSAhKCEoYmFz
ZVByZWRpY3Rpb24gJiBTcGVjSW50MzIpICYmIGJhc2VQcmVkaWN0aW9uKTsKLSAgICAgICAgICAg
IHNldFJlcGxhY2VtZW50KGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24o
bm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbikpOwor
ICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRF
bGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuYXJyYXlNb2RlKCkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTExNDAsNyArMTE2OSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEJ5
T2Zmc2V0OgotICAgICAgICAgICAgaWYgKG1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENv
bnZlcmdlZCkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhw
b2ludE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGVs
aW1pbmF0ZShwdXRCeU9mZnNldFN0b3JlRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nl
c3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBu
b2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE3OCwxNCAr
MTIwNywxMyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIFZl
Y3RvcjxOb2RlSW5kZXgsIDE2PiBtX3JlcGxhY2VtZW50czsKICAgICBGaXhlZEFycmF5PHVuc2ln
bmVkLCBMYXN0Tm9kZVR5cGU+IG1fbGFzdFNlZW47Ci0gICAgT3B0aW1pemF0aW9uRml4cG9pbnRT
dGF0ZSBtX2ZpeHBvaW50U3RhdGU7CiAgICAgYm9vbCBtX2NoYW5nZWQ7IC8vIE9ubHkgdHJhY2tz
IGNoYW5nZXMgdGhhdCBoYXZlIGEgc3Vic3RhbnRpdmUgZWZmZWN0IG9uIG90aGVyIG9wdGltaXph
dGlvbnMuCiB9OwogCi1ib29sIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoLCBPcHRpbWl6YXRpb25G
aXhwb2ludFN0YXRlIGZpeHBvaW50U3RhdGUpCitib29sIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBo
KQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ1NFIFBoYXNlIik7
Ci0gICAgcmV0dXJuIHJ1blBoYXNlPENTRVBoYXNlPihncmFwaCwgZml4cG9pbnRTdGF0ZSk7Cisg
ICAgcmV0dXJuIHJ1blBoYXNlPENTRVBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmgJ
KHJldmlzaW9uIDEyNjY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGEg
d2lkZSByYW5nZSBvZiBzdWJleHByZXNzaW9uIHNpbWlsYXJpdGllcy4gSXQncyBrbm93biB0byBw
cm9kdWNlIGJpZyB3aW5zCiAvLyBvbiBhIGZldyBiZW5jaG1hcmtzLCBhbmQgaXMgcmVsYXRpdmVs
eSBjaGVhcCB0byBydW4uCiAKLWJvb2wgcGVyZm9ybUNTRShHcmFwaCYsIE9wdGltaXphdGlvbkZp
eHBvaW50U3RhdGUpOworYm9vbCBwZXJmb3JtQ1NFKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShy
ZXZpc2lvbiAxMjY2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgZW51bSBTcGlsbFJlZ2lzdGVyc01v
ZGUgeyBOZWVkVG9TcGlsbCwgRAogCiBlbnVtIE5vUmVzdWx0VGFnIHsgTm9SZXN1bHQgfTsKIAot
ZW51bSBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIHsgRml4cG9pbnRDb252ZXJnZWQsIEZpeHBv
aW50Tm90Q29udmVyZ2VkIH07CitlbnVtIE9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUgeyBCZWZv
cmVGaXhwb2ludCwgRml4cG9pbnROb3RDb252ZXJnZWQsIEZpeHBvaW50Q29udmVyZ2VkIH07CiAK
IGlubGluZSBib29sIHNob3VsZFNob3dEaXNhc3NlbWJseSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMTI2NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsMTYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVWYWx1ZS5zaW5nbGV0b24oKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7CisgICAgICAgICAgICAgICAg
aWYgKCFtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBu
b2RlLmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG5vZGUucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBub2Rl
LnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5j
cHAJKHJldmlzaW9uIDEyNjY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw3IEBAIGlubGluZSBib29sIGNv
bXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICBwZXJmb3JtRml4dXAoZGZnKTsKICAgICBw
ZXJmb3JtU3RydWN0dXJlQ2hlY2tIb2lzdGluZyhkZmcpOwogICAgIHVuc2lnbmVkIGNudCA9IDE7
CisgICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50Tm90Q29udmVyZ2VkOwogICAgIGZv
ciAoOzsgKytjbnQpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgIGRh
dGFMb2coIkRGRyBiZWdpbm5pbmcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGl0ZXJhdGlvbiAjJXUu
XG4iLCBjbnQpOwpAQCAtMTI1LDEzICsxMjYsMTQgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21w
aWxlTW9kZSBjb21waWxlTQogICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Db25zdGFudEZvbGRp
bmcoZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQXJndW1lbnRzU2ltcGxpZmljYXRp
b24oZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ0ZHU2ltcGxpZmljYXRpb24oZGZn
KTsKLSAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ1NFKGRmZywgRml4cG9pbnROb3RDb252ZXJn
ZWQpOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1DU0UoZGZnKTsKICAgICAgICAgaWYgKCFj
aGFuZ2VkKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRmZy5yZXNldEV4aXRTdGF0ZXMo
KTsKICAgICAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgfQotICAgIHBlcmZvcm1DU0UoZGZn
LCBGaXhwb2ludENvbnZlcmdlZCk7CisgICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50
Q29udmVyZ2VkOworICAgIHBlcmZvcm1DU0UoZGZnKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCiAgICAgZGF0YUxvZygiREZHIG9wdGltaXphdGlvbiBmaXhwb2ludCBjb252ZXJnZWQg
aW4gJXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTI2NjkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzQsNiArNzQsOSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkg
ewogICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4
cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm5vZGU7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdLnByZWRpY3Rpb24oKSkpCkBAIC05MCw4ICs5Myw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIGZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rl
cygpLCBmYWxzZSksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
cHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4
XS5wcmVkaWN0aW9uKCkpOyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KG1vZGVTdXBwb3J0c0xlbmd0aChhcnJheU1vZGUpCi0gICAgICAgICAgICAgICAgICAgICYmIGFy
cmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgIGlm
IChtb2RlU3VwcG9ydHNMZW5ndGgoYXJyYXlNb2RlKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmlu
aXRlU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobm9kZVB0
ci0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENo
ZWNrU3RydWN0dXJlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIG5vZGVQdHItPmNo
aWxkMSgpLmluZGV4KCkpOwogICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYo
KTsKQEAgLTExMywxNyArMTE1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBub2RlUHRyLT5j
bGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgbV9ncmFwaC5kZXJlZiht
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBub2RlUHRyLT5zZXRBcnJheU1vZGUoYXJyYXlN
b2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVj
a0FycmF5KGFycmF5TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgbm9kZVB0ci0+Y2hpbGQxKCku
aW5kZXgoKSwgbGVuZ3RoTmVlZHNTdG9yYWdlKTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdlID09
IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgICAgIG5vZGVQ
dHItPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewot
ICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgcmVmaW5lQXJy
YXlNb2RlKAotICAgICAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLAotICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKLSAgICAg
ICAgICAgIC8vIFByZWRpY3Rpb25zIHNob3VsZCBvbmx5IGJlY29tZSBtb3JlLCByYXRoZXIgdGhh
biBsZXNzLCByZWZpbmVkLiBIZW5jZQotICAgICAgICAgICAgLy8gaWYgd2Ugd2VyZSBldmVyIGFi
bGUgdG8gQ1NFIHRoZSBzdG9yYWdlIHBvaW50ZXIgZm9yIHRoaXMgb3BlcmF0aW9uLAotICAgICAg
ICAgICAgLy8gdGhlbiB3ZSBzaG91bGQgYWx3YXlzIGNvbnRpbnVlIHRvIGJlIGFibGUgdG8gZG8g
c28uCiAgICAgICAgICAgICBBU1NFUlQoY2FuQ1NFU3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTM2LDMwICsxMzcsMTkgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGlj
dGlvbigpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjYW5DU0VTdG9yYWdlKG5v
ZGUuYXJyYXlNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ub3AoKSA9
PSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1vZGVzQ29tcGF0aWJsZUZvclN0b3JhZ2VMb2FkKG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0uYXJy
YXlNb2RlKCksIG5vZGUuYXJyYXlNb2RlKCkpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIHRoZSBub2RlIHJl
ZmVyZW5jZSBhZnRlciB3ZSBkbyB0aGUgYXBwZW5kLgotICAgICAgICAgICAgICAgICAgICBOb2Rl
IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlLCBub2RlLmNvZGVPcmlnaW4sIE9wSW5mbyhub2RlLmFycmF5
TW9kZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwg
bm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwotICAgICAgICAg
ICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygpID0gRWRnZShnZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChnZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYo
Z2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsgLy8gT25jZSBiZWNhdXNlIGl0J3MgTXVz
dEdlbmVyYXRlLgotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihnZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlSW5kZXgpOyAvLyBBbmQgYWdhaW4gYmVjYXVzZSBpdCdzIHJlZmVyZW5jZWQg
ZnJvbSB0aGUgR2V0QnlWYWwuCi0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFw
cGVuZChtX2luZGV4SW5CbG9jaywgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8v
IFNlZSBhYm92ZS4gQ29udGludWVkIGZpeHVwIG9mIHRoZSBncmFwaCBzaG91bGQgbm90IHJlZ3Jl
c3Mgb3VyIGFiaWxpdHkKLSAgICAgICAgICAgICAgICAvLyB0byBzcGVjdWxhdGUuCi0gICAgICAg
ICAgICAgICAgQVNTRVJUKCFub2RlLmNoaWxkMygpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgMik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7
CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
cmF5UG9wOiB7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCks
IDEpOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0
ZU51bWJlcigpCiAgICAgICAgICAgICAgICAgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkgewpAQCAt
MzMwLDExICszMjAsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKwogICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1v
ZGUoCiAgICAgICAgICAgICAgICAgcmVmaW5lQXJyYXlNb2RlKAotICAgICAgICAgICAgICAgICAg
ICBub2RlLmFycmF5TW9kZSgpLCBtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpLCBtX2dyYXBo
W2NoaWxkMl0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlN
b2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCks
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChtb2RlRm9yUHV0KG5vZGUuYXJyYXlNb2Rl
KCkpKSB7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgMyk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJ
bmRleF07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobW9kZUZvclB1dChub2Rl
UHRyLT5hcnJheU1vZGUoKSkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToK
ICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CiAgICAgICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMkFycmF5OgpAQCAtMzY4LDYgKzM2NSw0OCBAQCBwcml2YXRlOgogI2VuZGlmCiAg
ICAgfQogICAgIAorICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9k
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIGJvb2wgKCpzdG9yYWdl
Q2hlY2spKEFycmF5OjpNb2RlKSA9IGNhbkNTRVN0b3JhZ2UpCisgICAgeworICAgICAgICBBU1NF
UlQobW9kZUlzU3BlY2lmaWMoYXJyYXlNb2RlKSk7CisgICAgICAgIAorICAgICAgICBtX2dyYXBo
LnJlZihhcnJheSk7CisgICAgICAgIE5vZGUgY2hlY2tBcnJheShDaGVja0FycmF5LCBjb2RlT3Jp
Z2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpOworICAgICAgICBjaGVja0FycmF5LnJlZigp
OworICAgICAgICBOb2RlSW5kZXggY2hlY2tBcnJheUluZGV4ID0gbV9ncmFwaC5zaXplKCk7Cisg
ICAgICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrQXJyYXkpOworICAgICAgICBtX2luc2VydGlvblNl
dC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGNoZWNrQXJyYXlJbmRleCk7CisKKyAgICAgICAgaWYg
KCFzdG9yYWdlQ2hlY2soYXJyYXlNb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgIAorICAgICAgICBtX2dyYXBoLnJlZihhcnJheSk7CisgICAgICAgIE5vZGUgZ2V0SW5k
ZXhlZFByb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgICAgIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CisgICAgICAgIGdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UucmVmKCk7CisgICAgICAgIE5vZGVJbmRleCBnZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgbV9ncmFwaC5h
cHBlbmQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmFwcGVuZChtX2luZGV4SW5CbG9jaywgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXg7
CisgICAgfQorICAgIAorICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIHVu
c2lnbmVkIHN0b3JhZ2VDaGlsZElkeCkKKyAgICB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fZml4
cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgCisgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07
CisgICAgICAgIAorICAgICAgICBpZiAoIW1vZGVJc1NwZWNpZmljKG5vZGVQdHItPmFycmF5TW9k
ZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBOb2RlSW5k
ZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkobm9kZVB0ci0+YXJyYXlNb2RlKCksIG5vZGVQdHItPmNv
ZGVPcmlnaW4sIGJhc2UuaW5kZXgoKSk7CisgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBtX2dyYXBoLmNoaWxk
KG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdl
KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBmaXhJbnRFZGdlKEVkZ2UmIGVkZ2UpCiAgICAgewog
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtlZGdlXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxMjY2OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMTgg
QEAgc3RhdGljIGNvbnN0IGNoYXIqIGRmZ09wTmFtZXNbXSA9IHsKICN1bmRlZiBTVFJJTkdJWkVf
REZHX09QX0VOVU0KIH07CiAKK0dyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNv
bnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQorICAgIDogbV9nbG9iYWxE
YXRhKGdsb2JhbERhdGEpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgLCBtX3By
b2ZpbGVkQmxvY2soY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQorICAgICwgbV9oYXNBcmd1bWVu
dHMoZmFsc2UpCisgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCisgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKKyAgICAs
IG1fZml4cG9pbnRTdGF0ZShCZWZvcmVGaXhwb2ludCkKK3sKKyAgICBBU1NFUlQobV9wcm9maWxl
ZEJsb2NrKTsKK30KKwogY29uc3QgY2hhciAqR3JhcGg6Om9wTmFtZShOb2RlVHlwZSBvcCkKIHsK
ICAgICByZXR1cm4gZGZnT3BOYW1lc1tvcF07CkBAIC0zOTIsOCArNDA0LDEwIEBAIHZvaWQgR3Jh
cGg6OmR1bXAoKQogICAgICAgICBpZiAoX25vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBf
Y2hpbGRJZHggPSBfbm9kZS5maXJzdENoaWxkKCk7ICAgICAgICAgICAgICAgXAogICAgICAgICAg
ICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS5maXJzdENoaWxkKCkgKyBfbm9kZS5udW1DaGlsZHJl
bigpOyAgXAotICAgICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3Zh
ckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92
YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDEoKSkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIEFT
U0VSVCghX25vZGUuY2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApA
QCAtNDgzLDYgKzQ5Nyw4IEBAIHZvaWQgR3JhcGg6OmNvbGxlY3RHYXJiYWdlKCkKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKICAgICAgICAg
ICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4o
KTsKICAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkgeworICAgICAgICAgICAgICAgIGlmICgh
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZE5vZGVJbmRleCA9IG1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdLmluZGV4KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhdChjaGlsZE5v
ZGVJbmRleCkucmVmKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTI2NjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxNiAr
NzYsNyBAQCBzdHJ1Y3QgUmVzb2x2ZUdsb2JhbERhdGEgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2Rl
YWQnIHJlbWFpbiBpbiB0aGUgdmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIDog
cHVibGljIFZlY3RvcjxOb2RlLCA2ND4gewogcHVibGljOgotICAgIEdyYXBoKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCi0g
ICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICwgbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQotICAgICAgICAsIG1fcHJvZmlsZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCkpCi0gICAgICAgICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCi0gICAgICAgICwgbV9vc3JF
bnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICAsIG1fbXVz
dEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
cHJvZmlsZWRCbG9jayk7Ci0gICAgfQorICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwg
Y29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIAogICAgIHVz
aW5nIFZlY3RvcjxOb2RlLCA2ND46Om9wZXJhdG9yW107CiAgICAgdXNpbmcgVmVjdG9yPE5vZGUs
IDY0Pjo6YXQ7CkBAIC01ODUsOCArNTc2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG5vZGUu
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
aWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7CiAgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwg
bm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAg
IGNoaWxkSWR4KyspCi0gICAgICAgICAgICAgICAgdm90ZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSwgYmFsbG90KTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHgrKykgeworICAgICAgICAg
ICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQorICAgICAgICAgICAgICAg
ICAgICB2b3RlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBiYWxsb3QpOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjA4LDgg
KzYwMSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxv
Y2tbaW5kZXhJbkJsb2NrXTsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgp
OwogICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBj
aGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyArK2NoaWxk
SWR4KQotICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOwor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQo
KTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgKytj
aGlsZElkeCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2No
aWxkSWR4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJh
dGUoKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQpAQCAtNjg1LDYgKzY4
MCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwogICAgIHVuc2ln
bmVkIG1fb3NyRW50cnlCeXRlY29kZUluZGV4OwogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG1fbXVz
dEhhbmRsZVZhbHVlczsKKyAgICAKKyAgICBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1fZml4
cG9pbnRTdGF0ZTsKIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVj
dG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxv
Y2tJbmRleCBzdWNjZXNzb3JJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gMTI2NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0Myw2ICs3NDMsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAg
ICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKKyAgICAg
ICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAgIGNhc2UgQXJyYXlQb3A6CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTc1NSwxMCArNzU4LDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEFycmF5OjpNb2RlPihtX29wSW5mbyk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0
QXJyYXlNb2RlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAgICBib29sIHNldEFycmF5TW9kZShB
cnJheTo6TW9kZSBhcnJheU1vZGUpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzQXJyYXlNb2Rl
KCkpOworICAgICAgICBpZiAodGhpcy0+YXJyYXlNb2RlKCkgPT0gYXJyYXlNb2RlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtX29wSW5mbyA9IGFycmF5TW9kZTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzVmlydHVhbFJlZ2lzdGVy
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9u
IDEyNjY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhp
dCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0UHJvcGVydHlTdG9yYWdlLCBO
b2RlUmVzdWx0U3RvcmFnZSkgXAotICAgIG1hY3JvKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2Us
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXAorICAgIG1hY3JvKENoZWNr
QXJyYXksIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2Rl
UmVzdWx0SlMpIFwKICAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKEdldEFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTI2Njky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTc1LDYgKzU3NSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkFyCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhcnJheS0+
bGVuZ3RoKCkpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25B
cnJheVBvcChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQoreworICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICAKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGFycmF5LT5wb3AoZXhlYykpOworfQorICAgICAgICAKIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC02MDMsMTQgKzYxMSw2IEBAIHNpemVfdCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QKICAgICByZXR1cm4gYXNSZWdFeHBPYmpl
Y3QoYmFzZSktPnRlc3QoZXhlYywgaW5wdXQpOwogfQogICAgICAgICAKLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5
KiBhcnJheSkKLXsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhl
Yyk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMpKTsK
LX0KLSAgICAgICAgCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNl
LCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoYXNlLmgJKHJldmlzaW9uIDEyNjY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTMgKzk1LDYgQEAgYm9vbCBydW5QaGFz
ZShHcmFwaCYgZ3JhcGgpCiAgICAgcmV0dXJuIHJ1bkFuZExvZyhwaGFzZSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFBoYXNlVHlwZSwgdHlwZW5hbWUgQXJndW1lbnRUeXBlMT4KLWJvb2wgcnVu
UGhhc2UoR3JhcGgmIGdyYXBoLCBBcmd1bWVudFR5cGUxIGFyZzEpCi17Ci0gICAgUGhhc2VUeXBl
IHBoYXNlKGdyYXBoLCBhcmcxKTsKLSAgICByZXR1cm4gcnVuQW5kTG9nKHBoYXNlKTsKLX0KLQog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTI2NjkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYxOCw3ICs2MTgsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAg
ICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgotICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVu
dHM6IHsKKyAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgorICAgICAgICBjYXNlIENoZWNr
QXJyYXk6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJs
ZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5z
ZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03MDMsOCArNzA0LDEwIEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgICAg
ICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOwotICAg
ICAgICAgICAgICAgICBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFttX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNWYWx1ZSk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspIHsKKyAgICAgICAgICAg
ICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQorICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2No
aWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBjaGFuZ2VkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMjY2OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDA2LDYgKzI0MDYsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAg
ICAgY2hlY2tBcnJheShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBH
ZXRCeVZhbDogewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKQEAgLTI0OTcs
NiArMjUwMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgRWRnZSBjaGlsZDEgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOwog
ICAgICAgICBFZGdlIGNoaWxkMiA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7
CiAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAy
KTsKKyAgICAgICAgRWRnZSBjaGlsZDQgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDMpOwogICAgICAgICAKICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbW9kZUZvclB1
dChub2RlLmFycmF5TW9kZSgpKTsKICAgICAgICAgYm9vbCBhbHJlYWR5SGFuZGxlZCA9IGZhbHNl
OwpAQCAtMjUzOCwyNyArMjU0NCwyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKLSAgICAgICAgc3BlY3VsYXRl
QXJyYXkoYXJyYXlNb2RlLCBjaGlsZDEsIGJhc2VSZWcpOwotCiAgICAgICAgIHN3aXRjaCAoYXJy
YXlNb2RlKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkpTQXJyYXlPdXRPZkJvdW5kczogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgY2hpbGQzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwogCiAgICAgICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkgJiB2YWx1ZSBpbnRvIHJlZ2lz
dGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgogICAgICAgICAgICAgR1BSUmVnIHZh
bHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNj
cmF0Y2guZ3ByKCk7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgICAgICB3cml0ZUJhcnJp
ZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlB
Y2Nlc3MsIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVy
RW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBjaGls
ZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGls
ZDQpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCiAg
ICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKLSAgICAgICAgICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHNjcmF0Y2hSZWc7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9y
YWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAgICAgICAgIEdQ
UlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgICAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwpAQCAtMjU3NSwxMSArMjU4MCw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJhc2UudXNlKCk7
CiAgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwor
ICAgICAgICAgICAgc3RvcmFnZS51c2UoKTsKICAgICAgICAgCi0gICAgICAgICAgICAvLyBHZXQg
dGhlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHNjcmF0
Y2hSZWc7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCiAgICAg
ICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVt
ZW50IG1fbnVtVmFsdWVzSW5WZWN0b3IuCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSkpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwpAQCAtMjc0Nyw5ICsyNzQ5LDExIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgQXJyYXlQdXNoOiB7CisgICAgICAgIEFTU0VSVChtb2RlSXNKU0FycmF5KG5vZGUu
YXJyYXlNb2RlKCkpKTsKKyAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsK
KyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CiAgICAgICAgIAogICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC0yNzU5LDkgKzI3NjMsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICB3
cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmll
ckZvclByb3BlcnR5QWNjZXNzLCBzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsKIAotICAg
ICAgICBzcGVjdWxhdGVBcnJheShBcnJheTo6SlNBcnJheSwgbm9kZS5jaGlsZDEoKSwgYmFzZUdQ
Uik7Ci0KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKICAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAg
ICAKICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCkBAIC0yNzg2
LDE5ICsyNzg3LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQb3A6IHsKKyAgICAgICAgQVNTRVJUKG1v
ZGVJc0pTQXJyYXkobm9kZS5hcnJheU1vZGUoKSkpOworCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1
ZSh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5n
cHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VM
ZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgc3BlY3Vs
YXRlQXJyYXkoQXJyYXk6OkpTQXJyYXksIG5vZGUuY2hpbGQxKCksIGJhc2VHUFIpOwotCi0gICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJh
eTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNlczsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAx
MjY2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjk1LDIwICsyOTUsMjEgQEAgY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3IqIFNwZWN1bGF0aXZlSgogICAgIH0KIH0KIAotY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3IqIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVBcnJheShBcnJheTo6TW9kZSBhcnJheU1v
ZGUsIEVkZ2UgZWRnZSwgR1BSUmVnIGJhc2VSZWcpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVj
a0FycmF5KE5vZGUmIG5vZGUpCiB7Ci0gICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHJl
c3VsdCA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKGFycmF5TW9kZSk7CisgICAgQVNTRVJUKG1vZGVJ
c1NwZWNpZmljKG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAKLSAgICBpZiAobW9kZUFscmVhZHlD
aGVja2VkKG1fc3RhdGUuZm9yTm9kZShlZGdlKSwgYXJyYXlNb2RlKSkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAKKyAgICBjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciogcmVzdWx0ID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS5h
cnJheU1vZGUoKSk7CisgICAgCisgICAgaWYgKG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKQorICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBleHBlY3RlZENsYXNzSW5mbyA9IDA7CiAgICAg
Ci0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAg
ICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZKU1N0
cmluZzo6c19pbmZvOwogICAgICAgICBicmVhazsKQEAgLTMyNSw3ICszMjYsNyBAQCBjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVu
dHM6OnNfaW5mbzsKQEAgLTM1NSw4ICszNTYsNiBAQCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciogU3BlY3VsYXRpdmVKCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6
OmNsYXNzSW5mb09mZnNldCgpKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKGV4cGVjdGVkQ2xhc3NJbmZvKSkpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRl
eCkKQEAgLTM5Myw4ICszOTIsMTAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFn
ZShOb2RlSQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4oTm9kZSYgbm9kZSkKIHsK
ICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmly
c3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAg
dXNlKG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9k
ZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKKyAgICAg
ICAgICAgIGlmICghIW1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCisg
ICAgICAgICAgICAgICAgdXNlKG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF0pOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgRWRnZSBjaGlsZDEgPSBub2Rl
LmNoaWxkMSgpOwogICAgICAgICBpZiAoIWNoaWxkMSkgewpAQCAtMjE0Niw2ICsyMTQ3LDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2Rl
JiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5l
c3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKIHsKKyAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAKICAgICBFZGdlIHZhbHVlVXNl
ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAKICAgICBHUFJUZW1w
b3JhcnkgdmFsdWU7CkBAIC0yMjEzLDEwICsyMjE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIH0KICAgICBBU1NFUlRfVU5VU0VEKHZhbHVlR1BSLCB2
YWx1ZUdQUiAhPSBwcm9wZXJ0eSk7CiAgICAgQVNTRVJUKHZhbHVlR1BSICE9IGJhc2UpOwotICAg
IEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwotICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKICAgICBBU1NFUlQodmFsdWVHUFIgIT0gc3RvcmFnZVJlZyk7Ci0gICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3Rv
cmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9m
Qm91bmRzOwogICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWwpCiAgICAgICAgIG91dE9mQm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZz
ZXQpKTsKQEAgLTIyNzgsNiArMjI3OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uRmwKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxv
YXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUp
CiB7CisgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDMpKTsKKyAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7
CisgICAgCiAgICAgRWRnZSBiYXNlVXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCAwKTsKICAgICBFZGdlIHZhbHVlVXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCAyKTsKICAgICAKQEAgLTIyODcsMTAgKzIyOTEsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlWYWxGb3JGCiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
ICAgICAKLSAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKLSAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgCi0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VS
ZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzOwogICAgIGlmIChub2Rl
Lm9wKCkgPT0gUHV0QnlWYWwpCiAgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKTsKQEAgLTMxMDksOCArMzEw
OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHIKICAgICBHUFJU
ZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7CiAgICAgCi0gICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3Ig
PQotICAgICAgICBzcGVjdWxhdGVBcnJheShub2RlLmFycmF5TW9kZSgpLCBub2RlLmNoaWxkMSgp
LCBiYXNlUmVnKTsKKyAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9
IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUuYXJyYXlNb2RlKCkpOwogICAgIAogICAgIHN3aXRj
aCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKQEAgLTMyNTIs
MzMgKzMyNTEsNDAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSYgbm9kZSkK
IHsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwot
ICAgICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9Ci0g
ICAgICAgIHNwZWN1bGF0ZUFycmF5KG5vZGUuYXJyYXlNb2RlKCksIG5vZGUuY2hpbGQxKCksIGJh
c2VHUFIpOworICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlw
ZWRBcnJheURlc2NyaXB0b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAKICAgICBzd2l0Y2ggKG5vZGUu
YXJyYXlNb2RlKCkpIHsKICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIp
OwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRHUFIpOwor
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIHN0b3JhZ2UpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRSZWcpOwogICAgICAg
ICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1
bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgCi0gICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0
UmVnLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKKyAgICB9CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOiB7CisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgYmFzZSk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpv
ZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgorICAgIH0KKyAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKICAgICAgICAg
Y29tcGlsZUdldEFyZ3VtZW50c0xlbmd0aChub2RlKTsKICAgICAgICAgYnJlYWs7CisgICAgfQog
ICAgIGRlZmF1bHQ6CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7Cisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwogICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRv
ci0+bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTI2NjkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTk3LDcgKzIxOTcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlKTsKICAgICAKLSAgICBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciogc3BlY3VsYXRlQXJyYXkoQXJyYXk6Ok1vZGUsIEVkZ2Ug
YmFzZUVkZ2UsIEdQUlJlZyBiYXNlUmVnKTsKKyAgICB2b2lkIGNoZWNrQXJyYXkoTm9kZSYpOwog
ICAgIAogICAgIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgogICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRl
SW50SW50ZXJuYWwoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTI2NjkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OSw2ICs5OSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgICAg
ICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJh
eToKKyAgICAgICAgICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAg
ICAgICAgICAgICAgY2FzZSBQaGFudG9tOgogICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBj
b3VudCB0aGVzZSB1c2VzLgogICAgICAgICAgICAgICAgICAgICBicmVhazsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160607</attachid>
            <date>2012-08-26 11:40:11 -0700</date>
            <delta_ts>2012-08-26 11:57:28 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cseindexing_patch_3.diff</filename>
            <type>text/plain</type>
            <size>76661</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2NzA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAxMi0wOC0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFycmF5IHR5cGUgY2hlY2tzIGFuZCBzdG9yYWdlIGFjY2Vzc2VzIHNob3VsZCBiZSB1bmlmb3Jt
bHkgcmVwcmVzZW50ZWQgYW5kIGF2YWlsYWJsZSB0byBDU0UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1MDEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB1bmlmb3JtbHkgYnJlYWtzIHVwIGFsbCBh
cnJheSBhY2Nlc3NlcyBpbnRvIHVwIHRvIHRocmVlIHBhcnRzOgorICAgICAgICAKKyAgICAgICAg
MSkgVGhlIHR5cGUgY2hlY2ssIHVzaW5nIGEgbmV3bHkgaW50cm9kdWNlZCBDaGVja0FycmF5IG5v
ZGUsIGluIGFkZGl0aW9uIHRvIHBvc3NpYmx5CisgICAgICAgICAgIGEgQ2hlY2tTdHJ1Y3R1cmUg
bm9kZS4gV2Ugd2VyZSBhbHJlYWR5IGluc2VydGluZyB0aGUgQ2hlY2tTdHJ1Y3R1cmUgcHJpb3Ig
dG8gdGhpcworICAgICAgICAgICBwYXRjaC4gVGhlIENoZWNrQXJyYXkgbm9kZSB3aWxsIGJlIGF1
dG9tYXRpY2FsbHkgZWxpbWluYXRlZCBpZiB0aGUgdGhpbmcgaXQgd2FzCisgICAgICAgICAgIGNo
ZWNraW5nIGZvciBoYWQgYWxyZWFkeSBiZWVuIGNoZWNrZWQgZm9yLCBlaXRoZXIgaW50ZW50aW9u
YWxseSAoYSBDaGVja1N0cnVjdHVyZQorICAgICAgICAgICBpbnNlcnRlZCBiYXNlZCBvbiB0aGUg
YXJyYXkgcHJvZmlsZSBvZiB0aGlzIGFjY2Vzcykgb3IgYWNjaWRlbnRhbGx5IChzb21lIGNoZWNr
cywKKyAgICAgICAgICAgdHlwaWNhbGx5IGEgQ2hlY2tTdHJ1Y3R1cmUsIGluc2VydGVkIGZvciBz
b21lIHVucmVsYXRlZCBvcGVyYXRpb25zKS4gVGhlCisgICAgICAgICAgIENoZWNrQXJyYXkgbm9k
ZSBtYXkgbm90IGJlIGluc2VydGVkIGlmIHRoZSBhcnJheSB0eXBlIGlzIG5vbi1zcGVjaWZpYyAo
R2VuZXJpYyBvcgorICAgICAgICAgICBGb3JjZUV4aXQpLgorICAgICAgICAKKyAgICAgICAgMikg
VGhlIHN0b3JhZ2UgbG9hZCB1c2luZyBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLiBQcmV2aW91
c2x5LCB0aGlzIG9ubHkgd29ya2VkIGZvcgorICAgICAgICAgICBHZXRCeVZhbC4gTm93IGl0IHdv
cmtzIGZvciBhbGwgYXJyYXkgYWNjZXNzZXMuIFRoZSBzdG9yYWdlIGxvYWQgbWF5IG5vdCBiZQor
ICAgICAgICAgICBpbnNlcnRlZCBpZiB0aGUgbW9kZSBvZiBhcnJheSBhY2Nlc3MgZG9lcyBub3Qg
cGVybWl0IENTRSBvZiBzdG9yYWdlIGxvYWRzIChsaWtlCisgICAgICAgICAgIG5vbi1zcGVjaWZp
YyBtb2RlcyBvciBBcmd1bWVudHMpLgorICAgICAgICAKKyAgICAgICAgMykgVGhlIGFjY2VzcyBp
dHNlbGY6IG9uZSBvZiBHZXRCeVZhbCwgUHV0QnlWYWwsIFB1dEJ5VmFsQWxpYXMsIEFycmF5UHVz
aCwgQXJyYXlQb3AsCisgICAgICAgICAgIEdldEFycmF5TGVuZ3RoLCBTdHJpbmdDaGFyQXQsIG9y
IFN0cmluZ0NoYXJDb2RlQXQuCisgICAgICAgIAorICAgICAgICBUaGlzIG1lYW5zIHRoYXQgdGhl
IHR5cGUgY2hlY2sgY2FuIGJlIHN1YmplY3RlZCB0byBDU0UgZXZlbiBpZiB0aGUgQ0ZBIGlzbid0
IHNtYXJ0CisgICAgICAgIGVub3VnaCB0byByZWFzb24gYWJvdXQgaXQgKHlldCEpLiBJdCBhbHNv
IG1lYW5zIHRoYXQgdGhlIHN0b3JhZ2UgbG9hZCBjYW4gYWx3YXlzIGJlCisgICAgICAgIHN1Ympl
Y3RlZCB0byBDU0U7IHByZXZpb3VzbHkgQ1NFIG9uIHN0b3JhZ2UgbG9hZCBvbmx5IHdvcmtlZCBm
b3IgYXJyYXkgbG9hZHMgYW5kIG5vdAorICAgICAgICBvdGhlciBmb3JtcyBvZiBhY2Nlc3MuIEZp
bmFsbHksIGl0IHJlbW92ZXMgdGhlIGJpemFycmUgYmVoYXZpb3IgdGhhdAorICAgICAgICBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlIHByZXZpb3VzbHkgaGFkOiBwcmV2aW91c2x5LCBpdCB3YXMg
cmVzcG9uc2libGUgZm9yIHRoZSB0eXBlCisgICAgICAgIGNoZWNrIGluIHNvbWUgY2FzZXMsIGJ1
dCBub3Qgb3RoZXJzOyB0aGlzIG1hZGUgcmVhc29uaW5nIGFib3V0IHRoZSBDRkEgcmVhbGx5Cisg
ICAgICAgIGNvbmZ1c2luZy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gZGlz
YWJsZXMgbGF0ZSByZWZpbmVtZW50IG9mIGFycmF5IG1vZGUsIHNpbmNlIEkgZGVjaWRlZCB0aGF0
CisgICAgICAgIHN1cHBvcnRpbmcgdGhhdCBmZWF0dXJlIGlzIGJvdGggY29uZnVzaW5nIGFuZCBs
aWtlbHkgdW5wcm9maXRhYmxlLiBUaGUgYXJyYXkgbW9kZXMgYXJlCisgICAgICAgIG5vdyBsb2Nr
ZWQgaW4gaW4gdGhlIGZpcnN0IGZpeHVwIHJ1biBhZnRlciBwcmVkaWN0aW9uIHByb3BhZ2F0aW9u
LiBPZiBjb3Vyc2UsCisgICAgICAgIHJlZmluZW1lbnRzIGZyb20gR2VuZXJpYyB0byBzb21ldGhp
bmcgZWxzZSB3b3VsZCBub3QgaGF2ZSBiZWVuIGEgcHJvYmxlbTsgd2UgY291bGQKKyAgICAgICAg
cmVlbmFibGUgdGhvc2UgaWYgd2UgdGhvdWdodCB3ZSByZWFsbHkgbmVlZGVkIHRvLgorCisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmZyb21TdHJ1Y3R1cmUpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpyZWZpbmVBcnJheU1vZGUpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJheSk6CisgICAgICAg
IChKU0M6OkRGRzo6bGVuZ3RoTmVlZHNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjptb2Rl
SXNTcGVjaWZpYyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmdldEFycmF5TW9kZSk6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9kZUFuZEVtaXRDaGVja3Mp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAg
KiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9ja3MpOgorICAgICAgICAqIGRmZy9ERkdD
U0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OkNTRVBoYXNlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbik6Cisg
ICAgICAgIChDU0VQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrQXJy
YXlFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNTRSk6Cisg
ICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpjaGVja0FycmF5KToKKyAgICAgICAgKEZpeHVwUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToKKyAgICAgICAgKERGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpjb2xsZWN0R2FyYmFnZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
IChHcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZvdGUpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpzdWJzdGl0dXRlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6c2V0QXJyYXlNb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdQaGFzZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlOjptZXJnZURlZmF1bHRGbGFncyk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hl
Y2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnVzZUNoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorCiAyMDEy
LTA4LTI1ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5
IGEgbGl0dGxlIGhhcmRlciB0byBmaXggdGhlIExpbnV4IGJ1aWxkLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjY2
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04ODcsMTIgKzg4NywxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTAwLDQyICs4
OTgsMzQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CiAgICAgICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcgb2YgdGhlIG91dC1vZi1i
b3VuZHMKICAgICAgICAgICAgIC8vIGNhc2UuCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1h
a2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFy
cmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNVaW50MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQz
MkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAg
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwpAQCAtOTQz
LDEyICs5MzMsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQ2NEFycmF5KTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC05NzAsMjAgKzk1OCwxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQXJndW1lbnRzKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
aWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwpAQCAtOTkxLDcgKzk3NSw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10u
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTk5OSw3ICs5ODIsNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMp
LmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
SW50MzJBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CkBAIC0xMDA3LDcgKzk4OSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0g
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTEwMTUsNyArOTk2LDYg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CkBAIC0xMDIzLDcgKzEwMDMsNiBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQxKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5m
aWx0ZXIoU3BlY0ludDMyKTsKQEAgLTEwMzEsNyArMTAxMCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMyku
ZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
VWludDMyQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIp
OwpAQCAtMTAzOSwxMiArMTAxNywxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVt
YmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMp
LmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA1NywxMyArMTAz
MywxMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICAKICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY051bWJlcik7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC0xMzQ3LDgwICsxMzIxLDggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewot
ICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6Ci0gICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgot
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1N0cmluZ1NwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpK
U0FycmF5OgotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czoKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwotICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCghaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhB
cnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNJbnQxNkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0ludDMyQXJyYXlT
cGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwotICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBub2RlLnNldENh
bkV4aXQoIWlzVWludDhBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWlu
dDhBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJy
YXk6Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzVWludDhDbGFtcGVkQXJyYXlTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIG5vZGUu
c2V0Q2FuRXhpdCghaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjVWludDE2QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
SW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQzMkFycmF5U3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KCFpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQz
MkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0g
ICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24oZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
KyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgaXQncyB0cnVlIGZv
ciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJheSwgc28gaXQncyBnb29kIGVub3VnaC4KKyAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CkBAIC0xNDkyLDggKzEzOTQsMTMgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVh
cigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyAoYWxtb3N0KSBhbHdheXMgZm9sbG93ZWQg
YnkgR2V0QnlWYWwsIHdoaWNoIGRvZXMgZXhpdC4gU28gbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGJl
IG1vcmUgcHJlY2lzZS4KKyAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAgICAgaWYgKG1vZGVB
bHJlYWR5Q2hlY2tlZChmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSkg
eworICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBi
eSBvcGVyYXRpb25zIChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBp
cyBubyBwb2ludCBpbiB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCiAgICAgICAgIHN3aXRj
aCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKQEAgLTE1
MDQsNiArMTQxMSw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9ucywg
YnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTM1LDYgKzE0NDUs
MTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OiB7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFy
cmF5OjpTdHJpbmc6CisgICAgICAgICAgICAvLyBTdHJpbmdzIGFyZSB3ZWlyZCAtIHdlIG1heSBz
cGVjIGZhaWwgaWYgdGhlIHN0cmluZyB3YXMgYSByb3BlLiBUaGF0IGlzIG9mIGNvdXJzZQorICAg
ICAgICAgICAgLy8gc3R1cGlkLCBhbmQgd2Ugc2hvdWxkIGZpeCB0aGF0LCBidXQgZm9yIG5vdyBs
ZXQncyBhdCBsZWFzdCBiZSBob25lc3QgYWJvdXQgaXQuCisgICAgICAgICAgICBub2RlLnNldENh
bkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgYnJlYWs7
IAogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTI2Njk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDYgKzMxMiw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgICAg
ICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNh
c2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAgICAgICAgICAgICAg
IGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBh
Ym91dCB0aGVzZSBiZWNhdXNlIGlmIHdlIGdldCB1c2VzIG9mIHRoZSByZWxldmFudAogICAgICAg
ICAgICAgICAgICAgICAvLyB2YXJpYWJsZSB0aGVuIHdlIGNhbiBzYWZlbHkgZ2V0IHJpZCBvZiB0
aGVzZSwgdG9vLiBUaGlzIG9mIGNvdXJzZQogICAgICAgICAgICAgICAgICAgICAvLyByZWxpZXMg
b24gdGhlcmUgbm90IGJlaW5nIGFueSBpbmZvcm1hdGlvbiB0cmFuc2ZlcnJlZCBieSB0aGUgQ0ZB
CkBAIC00NzYsNyArNDc3LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6CiAg
ICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKLSAgICAg
ICAgICAgICAgICBjYXNlIEZvcndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewor
ICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
OgorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBjYW4ganVzdCBnZXQgcmlkIG9mIHRoaXMgbm9kZSwgaWYgaXQgcmVmZXJlbmNlcyBh
IHBoYW50b20gYXJndW1lbnQuCiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1p
emUobV9ncmFwaFtub2RlLmNoaWxkMSgpXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJl
dmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTEgQEAgQXJyYXk6Ok1vZGUgZnJvbU9i
c2VydmVkKEFycmF5TW9kZXMgbW9kZQogICAgIH0KIH0KIAorQXJyYXk6Ok1vZGUgZnJvbVN0cnVj
dHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBtYWtlU2FmZSkKK3sKKyAgICByZXR1cm4g
ZnJvbU9ic2VydmVkKGFycmF5TW9kZUZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbWFrZVNhZmUp
OworfQorCiBBcnJheTo6TW9kZSByZWZpbmVBcnJheU1vZGUoQXJyYXk6Ok1vZGUgYXJyYXlNb2Rl
LCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBpbmRleCkKIHsKICAgICBpZiAo
IWJhc2UgfHwgIWluZGV4KSB7CkBAIC02NCwxNyArNjksOCBAQCBBcnJheTo6TW9kZSByZWZpbmVB
cnJheU1vZGUoQXJyYXk6Ok1vZGUgCiAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24oaW5kZXgp
IHx8ICFpc0NlbGxTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAgcmV0dXJuIEFycmF5OjpHZW5l
cmljOwogICAgIAotICAgIC8vIFBhc3MgdGhyb3VnaCBhbnkgYXJyYXkgbW9kZXMgdGhhdCB3b3Vs
ZCBoYXZlIGJlZW4gZGVjaWRlZCBieSB0aGUgYXJyYXkgcHJvZmlsZSwgc2luY2UKLSAgICAvLyB0
aGUgcHJlZGljdGlvbnMgb2YgdGhlIGlucHV0cyB3aWxsIG5vdCB0ZWxsIHVzIGFueXRoaW5nIHVz
ZWZ1bCB0aGF0IHdlIGRpZG4ndCBhbHJlYWR5Ci0gICAgLy8gZ2V0IGZyb20gdGhlIGFycmF5IHBy
b2ZpbGUuCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6CisgICAgaWYgKGFycmF5TW9kZSAhPSBBcnJheTo6VW5kZWNpZGVkKQogICAgICAg
ICByZXR1cm4gYXJyYXlNb2RlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
ICAgICAKICAgICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAgcmV0dXJu
IEFycmF5OjpTdHJpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5
TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEyICs2MywyNSBAQCBlbnVtIE1vZGUg
ewogCiBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9vbCBtYWtl
U2FmZSk7CiAKK0FycmF5OjpNb2RlIGZyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGJvb2wgbWFrZVNhZmUpOworCiBBcnJheTo6TW9kZSByZWZpbmVBcnJheU1vZGUoQXJyYXk6Ok1v
ZGUsIFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KTsKIAogYm9vbCBt
b2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYsIEFycmF5OjpNb2RlKTsKIAogY29uc3Qg
Y2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlKTsKIAoraW5saW5lIGJvb2wgbW9kZUlzSlNB
cnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsK
KyAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJv
dW5kczoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKwogaW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9k
ZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKQEAgLTgyLDYgKzk1LDEx
IEBAIGlubGluZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXIKICAgICB9CiB9CiAK
K2lubGluZSBib29sIGxlbmd0aE5lZWRzU3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7
CisgICAgcmV0dXJuIG1vZGVJc0pTQXJyYXkoYXJyYXlNb2RlKTsKK30KKwogaW5saW5lIEFycmF5
OjpNb2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAo
YXJyYXlNb2RlKSB7CkBAIC0xMTUsNyArMTMzLDcgQEAgaW5saW5lIGJvb2wgbW9kZXNDb21wYXRp
YmxlRm9yU3RvcmFnZUxvYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIGJvb2wgbW9k
ZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNb2RlIG1vZGUpCitpbmxpbmUgYm9vbCBtb2RlSXNTcGVj
aWZpYyhBcnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2Ug
QXJyYXk6OlVuZGVjaWRlZDoKQEAgLTEyNyw2ICsxNDUsMTEgQEAgaW5saW5lIGJvb2wgbW9kZVN1
cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgbW9kZVN1cHBv
cnRzTGVuZ3RoKEFycmF5OjpNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIG1vZGVJc1NwZWNpZmlj
KG1vZGUpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjY2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEs
NyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9pbmxpbmVTdGFja1RvcCgwKQogICAgICAgICAsIG1f
aGF2ZUJ1aWx0T3BlcmFuZE1hcHMoZmFsc2UpCiAgICAgICAgICwgbV9lbXB0eUpTVmFsdWVJbmRl
eChVSU5UX01BWCkKKyAgICAgICAgLCBtX2N1cnJlbnRJbnN0cnVjdGlvbigwKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgIApAQCAtODE4LDkgKzgxOSwx
NCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbihtX2dyYXBoLnNpemUo
KSwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOwogICAgIH0KICAgICAKLSAgICBBcnJheTo6TW9k
ZSBnZXRBcnJheU1vZGVXaXRob3V0T1NSRXhpdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBOb2RlSW5kZXggYmFzZSkKKyAgICBBcnJheTo6TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQ
cm9maWxlKiBwcm9maWxlKQorICAgIHsKKyAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKCk7CisgICAgICAgIHJldHVybiBmcm9tT2JzZXJ2ZWQocHJvZmlsZS0+b2JzZXJ2
ZWRBcnJheU1vZGVzKCksIGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgQXJyYXk6Ok1vZGUgZ2V0
QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhBcnJheVByb2ZpbGUqIHByb2ZpbGUsIE5vZGVJbmRleCBi
YXNlKQogICAgIHsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwogICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24oKTsKICAgICAgICAgaWYgKHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJl
KCkpCiAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsK
QEAgLTgzOCwxNiArODQ0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZyb21PYnNlcnZl
ZChwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSwgbWFrZVNhZmUpOwogICAgIH0KICAgICAK
LSAgICBBcnJheTo6TW9kZSBnZXRBcnJheU1vZGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgTm9kZUluZGV4IGJhc2UpCi0gICAgewotICAgICAgICBBcnJheTo6TW9kZSByZXN1bHQg
PSBnZXRBcnJheU1vZGVXaXRob3V0T1NSRXhpdChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhc2UpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBBcnJheTo6Rm9yY2VFeGl0KQotICAgICAg
ICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0KICAgICBOb2RlSW5kZXggbWFrZVNhZmUoTm9kZUluZGV4IG5vZGVJ
bmRleCkKICAgICB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CkBA
IC0xMTUwLDYgKzExNDYsOCBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIENhY2hlIG9mIGNvZGUg
YmxvY2tzIHRoYXQgd2UndmUgZ2VuZXJhdGVkIGJ5dGVjb2RlIGZvci4KICAgICBCeXRlQ29kZUNh
Y2hlPGNhbklubGluZUZ1bmN0aW9uRm9yPiBtX2NvZGVCbG9ja0NhY2hlOworICAgIAorICAgIElu
c3RydWN0aW9uKiBtX2N1cnJlbnRJbnN0cnVjdGlvbjsKIH07CiAKICNkZWZpbmUgTkVYVF9PUENP
REUobmFtZSkgXApAQCAtMTU1Myw3ICsxNTUxLDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBOb2Rl
SW5kZXggYXJyYXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbygwKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSks
IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAgICAgIEFy
cmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJbnN0cnVjdGlvbls1
XS51LmFycmF5UHJvZmlsZSk7CisgICAgICAgIGlmICghbW9kZUlzSlNBcnJheShhcnJheU1vZGUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBOb2RlSW5kZXggYXJyYXlQdXNo
ID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKICAgICAgICAgaWYgKHVzZXNS
ZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQdXNoKTsKICAgICAg
ICAgCkBAIC0xNTY0LDcgKzE1NjUsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljKGJvbwogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBh
cnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rp
b24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOworICAgICAg
ICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobV9jdXJyZW50SW5zdHJ1Y3Rp
b25bNV0udS5hcnJheVByb2ZpbGUpOworICAgICAgICBpZiAoIW1vZGVJc0pTQXJyYXkoYXJyYXlN
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgTm9kZUluZGV4IGFycmF5
UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpKTsKICAg
ICAgICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJy
YXlQb3ApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3OTIsNiArMTc5Niw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgCiAgICAgICAgIC8v
IFN3aXRjaCBvbiB0aGUgY3VycmVudCBieXRlY29kZSBvcGNvZGUuCiAgICAgICAgIEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNCZWdpbiArIG1fY3VycmVudElu
ZGV4OworICAgICAgICBtX2N1cnJlbnRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbjsg
Ly8gU29tZSBtZXRob2RzIHdhbnQgdG8gdXNlIHRoaXMsIGFuZCB3ZSdkIHJhdGhlciBub3QgdGhy
ZWFkIGl0IHRocm91Z2ggY2FsbHMuCiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJw
cmV0ZXItPmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpOwogICAgICAg
ICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAKQEAgLTIxNzcsNyArMjE4Miw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFzZSk7CisgICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBn
ZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJv
ZmlsZSwgYmFzZSk7CiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0QnlW
YWwgPSBhZGRUb0dyYXBoKEdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRp
Y3Rpb24pLCBiYXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlWYWwpOwpAQCAtMjE4OCw3ICsyMTkzLDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3B1dF9i
eV92YWw6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpOwogCi0gICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUg
PSBnZXRBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBiYXNlKTsKKyAgICAgICAgICAgIEFy
cmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MoY3VycmVudElu
c3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBiYXNlKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwpAQCAtMjE5Niw2ICsyMjAxLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFz
ZSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CiAgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZCh2YWx1ZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChOb05vZGUp
OyAvLyBMZWF2ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdlLgogICAgICAgICAgICAgYWRkVG9H
cmFwaChOb2RlOjpWYXJBcmcsIFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKDAp
KTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X3ZhbCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1OSw4ICs2
NTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9k
ZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElk
eCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSWR4
IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgKytjaGlsZElkeCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3Np
YmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XSwgY2hhbmdlUmVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwo
Zmlyc3RCbG9jaywgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgY2hhbmdlUmVm
KTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoISFu
b2RlLmNoaWxkMSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwo
Zmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgY2hhbmdlUmVmKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDIoKSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5
ICszNSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgQ1NFUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgotICAgIENTRVBoYXNlKEdyYXBoJiBncmFwaCwg
T3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSBmaXhwb2ludFN0YXRlKQorICAgIENTRVBoYXNlKEdy
YXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImNvbW1vbiBzdWJleHByZXNzaW9u
IGVsaW1pbmF0aW9uIikKLSAgICAgICAgLCBtX2ZpeHBvaW50U3RhdGUoZml4cG9pbnRTdGF0ZSkK
ICAgICB7CiAgICAgICAgIC8vIFJlcGxhY2VtZW50cyBhcmUgdXNlZCB0byBpbXBsZW1lbnQgbG9j
YWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24uCiAgICAgICAgIG1fcmVwbGFjZW1l
bnRzLnJlc2l6ZShtX2dyYXBoLnNpemUoKSk7CkBAIC0zMjcsNyArMzI2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgY2hlY2tTdHJ1Y3R1cmVM
b2FkRWxpbWluYXRpb24oY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIE5vZGVJbmRl
eCBjaGlsZDEpCisgICAgYm9vbCBjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlSW5kZXggY2hpbGQxKQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKICAgICAgICAgICAgIE5v
ZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKQEAgLTYyNCw4ICs2MjMsMzcg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KKyAg
ICAKKyAgICBib29sIGNoZWNrQXJyYXlFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxLCBBcnJh
eTo6TW9kZSBhcnJheU1vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2lu
ZGV4SW5CbG9jazsgaS0tOykgeworICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJy
ZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkgCisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxLCBib29sIGhhc0ludGVnZXJJbmRl
eFByZWRpY3Rpb24pCisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBQdXRCeU9m
ZnNldDoKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIC8v
IENoYW5naW5nIHRoZSBzdHJ1Y3R1cmUgb3IgcHV0dGluZyB0byB0aGUgc3RvcmFnZSBjYW5ub3QK
KyAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHByb3BlcnR5IHN0b3JhZ2UgcG9pbnRlci4K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgQ2hlY2tBcnJheToKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGls
ZDEgJiYgbm9kZS5hcnJheU1vZGUoKSA9PSBhcnJheU1vZGUpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxLCBBcnJheTo6TW9kZSBhcnJheU1vZGUp
CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykg
ewogICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwpA
QCAtNjM1LDkgKzY2Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFtpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewogICAgICAgICAg
ICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgYmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRp
Y3Rpb24oKTsKLSAgICAgICAgICAgICAgICBib29sIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0
aW9uID0gISghKGJhc2VQcmVkaWN0aW9uICYgU3BlY0ludDMyKSAmJiBiYXNlUHJlZGljdGlvbik7
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGhhc0ludGVn
ZXJJbmRleFByZWRpY3Rpb24gPT0gbm9kZUhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24pCisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIG5vZGUuYXJyYXlNb2Rl
KCkgPT0gYXJyYXlNb2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC05ODgsNyArMTAxNCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQudmFyaWFibGVBY2Nlc3NEYXRh
KCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgYWJsZSB0byByZW1vdmUgU2V0TG9jYWxzIHRoYXQgY2FuIGV4aXQ7IHdlIGp1c3QgbmVl
ZAogICAgICAgICAgICAgLy8gdG8gcmVwbGFjZSB0aGVtIHdpdGggYXBwcm9wcmlhdGUgdHlwZSBj
aGVja3MuCi0gICAgICAgICAgICBpZiAobV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29u
dmVyZ2VkKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4
cG9pbnROb3RDb252ZXJnZWQpIHsKICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGJlIGNvbnNl
cnZhdGl2ZSBhdCB0aGlzIHRpbWU7IGlmIHRoZSBTZXRMb2NhbCBoYXMgYW55IGNoYW5jZSBvZiBw
ZXJmb3JtaW5nCiAgICAgICAgICAgICAgICAgLy8gYW55IHNwZWN1bGF0aW9ucyB0aGVuIHdlIGNh
bm5vdCBkbyBhbnl0aGluZy4KICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRh
LT5pc0NhcHR1cmVkKCkpIHsKQEAgLTEwNzcsNyArMTEwMyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgUHV0R2xvYmFs
VmFyQ2hlY2s6Ci0gICAgICAgICAgICBpZiAobV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90
Q29udmVyZ2VkKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZp
eHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZWxpbWluYXRlKGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24obm9kZS5yZWdpc3RlclBvaW50ZXIo
KSkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTAzLDcgKzExMjksNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2Ug
Rm9yd2FyZENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJlTG9h
ZEVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlU2V0KCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkp
CisgICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbihub2RlLnN0cnVjdHVy
ZVNldCgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTExMTQsNyArMTE0MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIFB1dFN0cnVjdHVyZToKLSAgICAgICAgICAgIGlmIChtX2ZpeHBvaW50U3RhdGUgPT0gRml4
cG9pbnROb3RDb252ZXJnZWQpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3Rh
dGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBlbGltaW5hdGUocHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbihub2RlLmNoaWxk
MSgpLmluZGV4KCkpLCBQaGFudG9tUHV0U3RydWN0dXJlKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTEyNCwxMCArMTE1MCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Q2hlY2tBcnJheToKKyAgICAgICAgICAgIGlmIChjaGVja0FycmF5RWxpbWluYXRpb24obm9kZS5j
aGlsZDEoKS5pbmRleCgpLCBub2RlLmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgICAgICBlbGlt
aW5hdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
YmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKLSAg
ICAgICAgICAgIGJvb2wgbm9kZUhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24gPSAhKCEoYmFzZVBy
ZWRpY3Rpb24gJiBTcGVjSW50MzIpICYmIGJhc2VQcmVkaWN0aW9uKTsKLSAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9k
ZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbikpOworICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGlt
aW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTExNDAsNyArMTE2OSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OgotICAgICAgICAgICAgaWYgKG1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZl
cmdlZCkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2lu
dE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGVsaW1p
bmF0ZShwdXRCeU9mZnNldFN0b3JlRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE3OCwxNCArMTIw
NywxMyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIFZlY3Rv
cjxOb2RlSW5kZXgsIDE2PiBtX3JlcGxhY2VtZW50czsKICAgICBGaXhlZEFycmF5PHVuc2lnbmVk
LCBMYXN0Tm9kZVR5cGU+IG1fbGFzdFNlZW47Ci0gICAgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0
ZSBtX2ZpeHBvaW50U3RhdGU7CiAgICAgYm9vbCBtX2NoYW5nZWQ7IC8vIE9ubHkgdHJhY2tzIGNo
YW5nZXMgdGhhdCBoYXZlIGEgc3Vic3RhbnRpdmUgZWZmZWN0IG9uIG90aGVyIG9wdGltaXphdGlv
bnMuCiB9OwogCi1ib29sIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoLCBPcHRpbWl6YXRpb25GaXhw
b2ludFN0YXRlIGZpeHBvaW50U3RhdGUpCitib29sIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoKQog
ewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ1NFIFBoYXNlIik7Ci0g
ICAgcmV0dXJuIHJ1blBoYXNlPENTRVBoYXNlPihncmFwaCwgZml4cG9pbnRTdGF0ZSk7CisgICAg
cmV0dXJuIHJ1blBoYXNlPENTRVBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmgJKHJl
dmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGEgd2lk
ZSByYW5nZSBvZiBzdWJleHByZXNzaW9uIHNpbWlsYXJpdGllcy4gSXQncyBrbm93biB0byBwcm9k
dWNlIGJpZyB3aW5zCiAvLyBvbiBhIGZldyBiZW5jaG1hcmtzLCBhbmQgaXMgcmVsYXRpdmVseSBj
aGVhcCB0byBydW4uCiAKLWJvb2wgcGVyZm9ybUNTRShHcmFwaCYsIE9wdGltaXphdGlvbkZpeHBv
aW50U3RhdGUpOworYm9vbCBwZXJmb3JtQ1NFKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZp
c2lvbiAxMjY2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgZW51bSBTcGlsbFJlZ2lzdGVyc01vZGUg
eyBOZWVkVG9TcGlsbCwgRAogCiBlbnVtIE5vUmVzdWx0VGFnIHsgTm9SZXN1bHQgfTsKIAotZW51
bSBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIHsgRml4cG9pbnRDb252ZXJnZWQsIEZpeHBvaW50
Tm90Q29udmVyZ2VkIH07CitlbnVtIE9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUgeyBCZWZvcmVG
aXhwb2ludCwgRml4cG9pbnROb3RDb252ZXJnZWQsIEZpeHBvaW50Q29udmVyZ2VkIH07CiAKIGlu
bGluZSBib29sIHNob3VsZFNob3dEaXNhc3NlbWJseSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2
aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsMTYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludChzdHJ1Y3R1cmVWYWx1ZS5zaW5nbGV0b24oKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7CisgICAgICAgICAgICAgICAgaWYg
KCFtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2Rl
LmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICBub2RlLnNl
dE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJ
KHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw3IEBAIGlubGluZSBib29sIGNvbXBp
bGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICBwZXJmb3JtRml4dXAoZGZnKTsKICAgICBwZXJm
b3JtU3RydWN0dXJlQ2hlY2tIb2lzdGluZyhkZmcpOwogICAgIHVuc2lnbmVkIGNudCA9IDE7Cisg
ICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50Tm90Q29udmVyZ2VkOwogICAgIGZvciAo
OzsgKytjbnQpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFM
b2coIkRGRyBiZWdpbm5pbmcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGl0ZXJhdGlvbiAjJXUuXG4i
LCBjbnQpOwpAQCAtMTI1LDEzICsxMjYsMTQgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxl
TW9kZSBjb21waWxlTQogICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Db25zdGFudEZvbGRpbmco
ZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQXJndW1lbnRzU2ltcGxpZmljYXRpb24o
ZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ0ZHU2ltcGxpZmljYXRpb24oZGZnKTsK
LSAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ1NFKGRmZywgRml4cG9pbnROb3RDb252ZXJnZWQp
OworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1DU0UoZGZnKTsKICAgICAgICAgaWYgKCFjaGFu
Z2VkKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRmZy5yZXNldEV4aXRTdGF0ZXMoKTsK
ICAgICAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgfQotICAgIHBlcmZvcm1DU0UoZGZnLCBG
aXhwb2ludENvbnZlcmdlZCk7CisgICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50Q29u
dmVyZ2VkOworICAgIHBlcmZvcm1DU0UoZGZnKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCiAgICAgZGF0YUxvZygiREZHIG9wdGltaXphdGlvbiBmaXhwb2ludCBjb252ZXJnZWQgaW4g
JXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTI2Njk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzQsNiArNzQsOSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewog
ICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9p
bnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCiAgICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm5vZGU7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdLnByZWRpY3Rpb24oKSkpCkBAIC05MCw4ICs5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIGZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rlcygp
LCBmYWxzZSksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJl
ZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5w
cmVkaWN0aW9uKCkpOyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG1v
ZGVTdXBwb3J0c0xlbmd0aChhcnJheU1vZGUpCi0gICAgICAgICAgICAgICAgICAgICYmIGFycmF5
UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgIGlmICht
b2RlU3VwcG9ydHNMZW5ndGgoYXJyYXlNb2RlKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRl
U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobm9kZVB0ci0+
Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENoZWNr
U3RydWN0dXJlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIG5vZGVQdHItPmNoaWxk
MSgpLmluZGV4KCkpOwogICAgICAgICAgICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsK
QEAgLTExMywxNyArMTE1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBub2RlUHRyLT5jbGVh
ckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgICAgICBub2RlUHRyLT5zZXRBcnJheU1vZGUoYXJyYXlNb2Rl
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0Fy
cmF5KGFycmF5TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgbm9kZVB0ci0+Y2hpbGQxKCkuaW5k
ZXgoKSwgbGVuZ3RoTmVlZHNTdG9yYWdlKTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdlID09IE5v
Tm9kZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgICAgIG5vZGVQdHIt
PmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAg
ICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgcmVmaW5lQXJyYXlN
b2RlKAotICAgICAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLAotICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAg
ICAgIC8vIFByZWRpY3Rpb25zIHNob3VsZCBvbmx5IGJlY29tZSBtb3JlLCByYXRoZXIgdGhhbiBs
ZXNzLCByZWZpbmVkLiBIZW5jZQotICAgICAgICAgICAgLy8gaWYgd2Ugd2VyZSBldmVyIGFibGUg
dG8gQ1NFIHRoZSBzdG9yYWdlIHBvaW50ZXIgZm9yIHRoaXMgb3BlcmF0aW9uLAotICAgICAgICAg
ICAgLy8gdGhlbiB3ZSBzaG91bGQgYWx3YXlzIGNvbnRpbnVlIHRvIGJlIGFibGUgdG8gZG8gc28u
CiAgICAgICAgICAgICBBU1NFUlQoY2FuQ1NFU3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTM2LDMwICsxMzcsMTkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlv
bigpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjYW5DU0VTdG9yYWdlKG5vZGUu
YXJyYXlNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ub3AoKSA9PSBH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1v
ZGVzQ29tcGF0aWJsZUZvclN0b3JhZ2VMb2FkKG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0uYXJyYXlN
b2RlKCksIG5vZGUuYXJyYXlNb2RlKCkpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIHRoZSBub2RlIHJlZmVy
ZW5jZSBhZnRlciB3ZSBkbyB0aGUgYXBwZW5kLgotICAgICAgICAgICAgICAgICAgICBOb2RlIGdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlLCBub2RlLmNvZGVPcmlnaW4sIE9wSW5mbyhub2RlLmFycmF5TW9k
ZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9k
ZS5jaGlsZDIoKS5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwotICAgICAgICAgICAg
ICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygpID0gRWRnZShnZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChnZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYoZ2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsgLy8gT25jZSBiZWNhdXNlIGl0J3MgTXVzdEdl
bmVyYXRlLgotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihnZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlSW5kZXgpOyAvLyBBbmQgYWdhaW4gYmVjYXVzZSBpdCdzIHJlZmVyZW5jZWQgZnJv
bSB0aGUgR2V0QnlWYWwuCi0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVu
ZChtX2luZGV4SW5CbG9jaywgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFNl
ZSBhYm92ZS4gQ29udGludWVkIGZpeHVwIG9mIHRoZSBncmFwaCBzaG91bGQgbm90IHJlZ3Jlc3Mg
b3VyIGFiaWxpdHkKLSAgICAgICAgICAgICAgICAvLyB0byBzcGVjdWxhdGUuCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKCFub2RlLmNoaWxkMygpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgMik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Cisg
ICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5
UG9wOiB7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDEp
OworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsK
ICAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51
bWJlcigpCiAgICAgICAgICAgICAgICAgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkgewpAQCAtMzMw
LDExICszMjAsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKTsKKwogICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1vZGUo
CiAgICAgICAgICAgICAgICAgcmVmaW5lQXJyYXlNb2RlKAotICAgICAgICAgICAgICAgICAgICBu
b2RlLmFycmF5TW9kZSgpLCBtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpLCBtX2dyYXBoW2No
aWxkMl0ucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2Rl
KCksCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksCisg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCkpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIDMpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUo
KSkpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRl
eF07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobW9kZUZvclB1dChub2RlUHRy
LT5hcnJheU1vZGUoKSkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CiAgICAgICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMkFycmF5OgpAQCAtMzY4LDYgKzM2NSw1NyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAg
fQogICAgIAorICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIGJvb2wgKCpzdG9yYWdlQ2hl
Y2spKEFycmF5OjpNb2RlKSA9IGNhbkNTRVN0b3JhZ2UpCisgICAgeworICAgICAgICBBU1NFUlQo
bW9kZUlzU3BlY2lmaWMoYXJyYXlNb2RlKSk7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLnJl
ZihhcnJheSk7CisgICAgICAgIE5vZGUgY2hlY2tBcnJheShDaGVja0FycmF5LCBjb2RlT3JpZ2lu
LCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpOworICAgICAgICBjaGVja0FycmF5LnJlZigpOwor
ICAgICAgICBOb2RlSW5kZXggY2hlY2tBcnJheUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAg
ICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrQXJyYXkpOworICAgICAgICBtX2luc2VydGlvblNldC5h
cHBlbmQobV9pbmRleEluQmxvY2ssIGNoZWNrQXJyYXlJbmRleCk7CisKKyAgICAgICAgaWYgKCFz
dG9yYWdlQ2hlY2soYXJyYXlNb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAg
ICAgIAorICAgICAgICBtX2dyYXBoLnJlZihhcnJheSk7CisgICAgICAgIE5vZGUgZ2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgICAgIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2Us
IGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CisgICAgICAgIGdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2UucmVmKCk7CisgICAgICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgbV9ncmFwaC5hcHBl
bmQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFw
cGVuZChtX2luZGV4SW5CbG9jaywgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAg
ICAgICAgCisgICAgICAgIHJldHVybiBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXg7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIHVuc2ln
bmVkIHN0b3JhZ2VDaGlsZElkeCkKKyAgICB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9p
bnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Cisg
ICAgICAgIAorICAgICAgICBpZiAobm9kZVB0ci0+YXJyYXlNb2RlKCkgPT0gQXJyYXk6OkZvcmNl
RXhpdCkgeworICAgICAgICAgICAgTm9kZSBmb3JjZUV4aXQoRm9yY2VPU1JFeGl0LCBub2RlUHRy
LT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIGZvcmNlRXhpdC5yZWYoKTsKKyAgICAgICAgICAg
IE5vZGVJbmRleCBmb3JjZUV4aXRJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAgICAg
bV9ncmFwaC5hcHBlbmQoZm9yY2VFeGl0KTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFw
cGVuZChtX2luZGV4SW5CbG9jaywgZm9yY2VFeGl0SW5kZXgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1vZGVJc1NwZWNpZmljKG5vZGVQ
dHItPmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAg
ICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkobm9kZVB0ci0+YXJyYXlNb2RlKCks
IG5vZGVQdHItPmNvZGVPcmlnaW4sIGJhc2UuaW5kZXgoKSk7CisgICAgICAgIGlmIChzdG9yYWdl
ID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBt
X2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0g
RWRnZShzdG9yYWdlKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBmaXhJbnRFZGdlKEVkZ2UmIGVk
Z2UpCiAgICAgewogICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtlZGdlXTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxMjY2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsMTggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGRmZ09wTmFtZXNbXSA9IHsKICN1bmRl
ZiBTVFJJTkdJWkVfREZHX09QX0VOVU0KIH07CiAKK0dyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQorICAg
IDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2sp
CisgICAgLCBtX3Byb2ZpbGVkQmxvY2soY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQorICAgICwg
bV9oYXNBcmd1bWVudHMoZmFsc2UpCisgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZh
bHVlcykKKyAgICAsIG1fZml4cG9pbnRTdGF0ZShCZWZvcmVGaXhwb2ludCkKK3sKKyAgICBBU1NF
UlQobV9wcm9maWxlZEJsb2NrKTsKK30KKwogY29uc3QgY2hhciAqR3JhcGg6Om9wTmFtZShOb2Rl
VHlwZSBvcCkKIHsKICAgICByZXR1cm4gZGZnT3BOYW1lc1tvcF07CkBAIC0xNzksNiArMTkxLDgg
QEAgdm9pZCBHcmFwaDo6ZHVtcChjb25zdCBjaGFyKiBwcmVmaXgsIE5vZAogICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiwgIik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaGFz
UHJpbnRlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAoIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZGF0YUxvZygiJXNA
JXUlcyIsCiAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmRUb1N0cmluZyhtX3ZhckFyZ0NoaWxk
cmVuW2NoaWxkSWR4XS51c2VLaW5kKCkpLAogICAgICAgICAgICAgICAgICAgICBtX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XS5pbmRleCgpLApAQCAtMzkyLDggKzQwNiwxMCBAQCB2b2lkIEdyYXBo
OjpkdW1wKCkKICAgICAgICAgaWYgKF9ub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2No
aWxkSWR4ID0gX25vZGUuZmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgIFwKICAgICAgICAgICAg
ICAgICAgX2NoaWxkSWR4IDwgX25vZGUuZmlyc3RDaGlsZCgpICsgX25vZGUubnVtQ2hpbGRyZW4o
KTsgIFwKLSAgICAgICAgICAgICAgICAgX2NoaWxkSWR4KyspICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92YXJB
cmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICAgX2NoaWxkSWR4KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKG1fdmFy
QXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGlmICghX25vZGUuY2hpbGQxKCkpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBBU1NF
UlQoIV9ub2RlLmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAg
LTQ4Myw2ICs0OTksOCBAQCB2b2lkIEdyYXBoOjpjb2xsZWN0R2FyYmFnZSgpCiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7CiAgICAgICAgICAg
ICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7
CiAgICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICBOb2RlSW5kZXggY2hpbGROb2RlSW5kZXggPSBtX3ZhckFyZ0NoaWxk
cmVuW2NoaWxkSWR4XS5pbmRleCgpOwogICAgICAgICAgICAgICAgIGlmICghYXQoY2hpbGROb2Rl
SW5kZXgpLnJlZigpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNzYsMTYgKzc2
LDcgQEAgc3RydWN0IFJlc29sdmVHbG9iYWxEYXRhIHsKIC8vIE5vZGVzIHRoYXQgYXJlICdkZWFk
JyByZW1haW4gaW4gdGhlIHZlY3RvciB3aXRoIHJlZkNvdW50IDAuCiBjbGFzcyBHcmFwaCA6IHB1
YmxpYyBWZWN0b3I8Tm9kZSwgNjQ+IHsKIHB1YmxpYzoKLSAgICBHcmFwaChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQotICAg
ICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQotICAgICAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKLSAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2soY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpKQotICAgICAgICAsIG1faGFzQXJndW1lbnRzKGZhbHNlKQotICAgICAgICAsIG1fb3NyRW50
cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgLCBtX211c3RI
YW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3By
b2ZpbGVkQmxvY2spOwotICAgIH0KKyAgICBHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNv
bnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKICAgICAKICAgICB1c2lu
ZyBWZWN0b3I8Tm9kZSwgNjQ+OjpvcGVyYXRvcltdOwogICAgIHVzaW5nIFZlY3RvcjxOb2RlLCA2
ND46OmF0OwpAQCAtNTg1LDggKzU3NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChub2RlLmZs
YWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5v
ZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICBj
aGlsZElkeCsrKQotICAgICAgICAgICAgICAgIHZvdGUobV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF0sIGJhbGxvdCk7CisgICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspIHsKKyAgICAgICAgICAg
ICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKKyAgICAgICAgICAgICAgICAg
ICAgdm90ZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgYmFsbG90KTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTYwOCw4ICs2
MDEsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
W2luZGV4SW5CbG9ja107CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsK
ICAgICAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hp
bGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgKytjaGlsZElk
eCkKLSAgICAgICAgICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF0sIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7
IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7ICsrY2hp
bGRJZHgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0pCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLnNob3VsZEdlbmVyYXRl
KCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKQEAgLTY4NSw2ICs2ODAs
OCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKICAgICB1bnNpZ25l
ZCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleDsKICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtX211c3RI
YW5kbGVWYWx1ZXM7CisgICAgCisgICAgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSBtX2ZpeHBv
aW50U3RhdGU7CiBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3Rv
cjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2Nr
SW5kZXggc3VjY2Vzc29ySW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NDMsNiArNzQzLDkgQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAg
Y2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIENoZWNrQXJyYXk6CisgICAgICAg
IGNhc2UgQXJyYXlQdXNoOgorICAgICAgICBjYXNlIEFycmF5UG9wOgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC03NTUsMTAgKzc1OCwxMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxBcnJheTo6TW9kZT4obV9vcEluZm8pOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldEFy
cmF5TW9kZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAgYm9vbCBzZXRBcnJheU1vZGUoQXJy
YXk6Ok1vZGUgYXJyYXlNb2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc0FycmF5TW9kZSgp
KTsKKyAgICAgICAgaWYgKHRoaXMtPmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV9vcEluZm8gPSBhcnJheU1vZGU7CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICBib29sIGhhc1ZpcnR1YWxSZWdpc3Rlcigp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAx
MjY2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzOCw3ICsxMzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgbWFjcm8oQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKFJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQg
fCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldFByb3BlcnR5U3RvcmFnZSwgTm9k
ZVJlc3VsdFN0b3JhZ2UpIFwKLSAgICBtYWNybyhHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKKyAgICBtYWNybyhDaGVja0Fy
cmF5LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJl
c3VsdEpTKSBcCiAgICAgbWFjcm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhHZXRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyNjY5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3NSw2ICs1NzUsMTQgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxl
bmd0aCgpKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJy
YXlQb3AoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKK3sKKyAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMpKTsKK30KKyAgICAgICAgCiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGJhc2UsIEpTQ2VsbCogYXJndW1lbnQpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtNjAzLDE0ICs2MTEsNiBAQCBzaXplX3QgREZH
X09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAgICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0
KGJhc2UpLT50ZXN0KGV4ZWMsIGlucHV0KTsKIH0KICAgICAgICAgCi1FbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSog
YXJyYXkpCi17Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMp
OwotICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7Ci19
Ci0gICAgICAgIAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwg
SWRlbnRpZmllciogcHJvcGVydHlOYW1lKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
aGFzZS5oCShyZXZpc2lvbiAxMjY2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEzICs5NSw2IEBAIGJvb2wgcnVuUGhhc2Uo
R3JhcGgmIGdyYXBoKQogICAgIHJldHVybiBydW5BbmRMb2cocGhhc2UpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBQaGFzZVR5cGUsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTE+Ci1ib29sIHJ1blBo
YXNlKEdyYXBoJiBncmFwaCwgQXJndW1lbnRUeXBlMSBhcmcxKQotewotICAgIFBoYXNlVHlwZSBw
aGFzZShncmFwaCwgYXJnMSk7Ci0gICAgcmV0dXJuIHJ1bkFuZExvZyhwaGFzZSk7Ci19Ci0KIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MTgsNyArNjE4LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRNeUFy
Z3VtZW50c0xlbmd0aDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAg
IGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRz
OiB7CisgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBDaGVja0Fy
cmF5OiB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUg
YXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8vIGluc2Vy
dGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4KICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzAzLDggKzcwNCwxMCBAQCBwcml2YXRlOgogICAgICAg
ICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgICAgICAg
Y2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKLSAgICAg
ICAgICAgICAgICAgY2hpbGRJZHgrKykKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOworICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCEhbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKKyAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF1dLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gY2hhbmdlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTI2Njk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM3Myw2ICsyMzczLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDaGVja0FycmF5OiB7
CisgICAgICAgIGNoZWNrQXJyYXkobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KIAogICAg
IGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CkBA
IC0yNDcwLDYgKzI0NzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCAwKTsKICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpOwogICAgICAgICBFZGdlIGNoaWxkMyA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQo
bm9kZSwgMik7CisgICAgICAgIEVkZ2UgY2hpbGQ0ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCAzKTsKICAgICAgICAgCiAgICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IG1v
ZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSk7CiAgICAgICAgIGJvb2wgYWxyZWFkeUhhbmRsZWQg
PSBmYWxzZTsKQEAgLTI1MTMsOCArMjUxOSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAotICAgICAgICBzcGVj
dWxhdGVBcnJheShhcnJheU1vZGUsIGNoaWxkMSwgYmFzZVJlZyk7Ci0KICAgICAgICAgc3dpdGNo
IChhcnJheU1vZGUpIHsKICAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKICAgICAgICAgY2Fz
ZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CkBAIC0yNTMxLDEzICsyNTM1LDExIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgICAgICAgICAgd3JpdGVC
YXJyaWVyKGJhc2VSZWcsIHZhbHVlVGFnUmVnLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3Bl
cnR5QWNjZXNzLCBzY3JhdGNoUmVnKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOworICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCiAgICAgICAgICAgICBpZiAo
bm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKLSAgICAgICAgICAgICAgICAvLyBHZXQgdGhl
IGFycmF5IHN0b3JhZ2UuCi0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhp
cyk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwot
ICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4K
ICAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKQEAgLTI1NTQsMTIgKzI1NTYs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBiYXNlLnVzZSgpOwogICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAgICAgICB2
YWx1ZS51c2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzdG9yYWdlKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9y
YWdlLmdwcigpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLQog
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGlu
Y3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogICAgICAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwpA
QCAtMjY4OCw2ICsyNjg2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVB1c2g6IHsKKyAgICAgICAgQVNT
RVJUKG1vZGVJc0pTQXJyYXkobm9kZS5hcnJheU1vZGUoKSkpOworICAgICAgICAKICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOwpAQCAtMjY5NywxNyArMjY5NywxNCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1
ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdl
TGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIHsKKyAg
ICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNl
R1BSLCB2YWx1ZVRhZ0dQUiwgbm9kZS5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlB
Y2Nlc3MsIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICB9CiAKLSAg
ICAgICAgc3BlY3VsYXRlQXJyYXkoQXJyYXk6OkpTQXJyYXksIG5vZGUuY2hpbGQxKCksIGJhc2VH
UFIpOwotICAgICAgICAKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAg
IEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZz
ZXQoKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5n
dGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAvLyBSZWZ1c2UgdG8g
aGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KQEAgLTI3MzAsMTAgKzI3MjcsMTIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBcnJheVBvcDogeworICAgICAgICBBU1NFUlQobW9kZUlzSlNBcnJheShub2RlLmFycmF5TW9k
ZSgpKSk7CisgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWVUYWcodGhpcyk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSB2YWx1ZVBheWxvYWQodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFy
eSBzdG9yYWdlKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlz
KTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTI3
NDIsOSArMjc0MSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJS
ZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAg
ICAgICBzcGVjdWxhdGVBcnJheShBcnJheTo6SlNBcnJheSwgbm9kZS5jaGlsZDEoKSwgYmFzZUdQ
Uik7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwogICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7
CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2Fz
ZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MDYsNiArMjQw
NiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgQ2hlY2tBcnJheTogeworICAgICAgICBjaGVja0FycmF5KG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewpAQCAtMjQ5Nyw2ICsyNTAyLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBFZGdlIGNoaWxkMSA9
IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQy
ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGls
ZDMgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAgICAgICBFZGdlIGNo
aWxkNCA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMyk7CiAgICAgICAgIAogICAg
ICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBtb2RlRm9yUHV0KG5vZGUuYXJyYXlNb2RlKCkp
OwogICAgICAgICBib29sIGFscmVhZHlIYW5kbGVkID0gZmFsc2U7CkBAIC0yNTM4LDI3ICsyNTQ0
LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
R1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKIAotICAgICAgICBzcGVjdWxhdGVBcnJheShhcnJheU1vZGUsIGNo
aWxkMSwgYmFzZVJlZyk7Ci0KICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKICAgICAgICAg
Y2FzZSBBcnJheTo6SlNBcnJheToKICAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91
bmRzOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwot
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAgICAgICAgIC8v
IE1hcCBiYXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNj
cmF0Y2ggcmVnaXN0ZXIuCiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIo
KTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKLSAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5n
cHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaFJlZyk7
CisgICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAg
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgICAgICB3
cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9y
UHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxkNCk7CisgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKICAgICAgICAgICAgIGlmIChub2Rl
Lm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgewotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc2NyYXRjaFJlZzsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3Jh
Z2VSZWcpOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2
YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0g
cHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUu
Z3ByKCk7CkBAIC0yNTc1LDExICsyNTgwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgICAgIHByb3Bl
cnR5LnVzZSgpOwogICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgICAgICBzdG9yYWdl
LnVzZSgpOwogICAgICAgICAKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4K
LSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc2NyYXRjaFJlZzsKLSAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6
c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0KICAgICAgICAgICAgIC8vIENoZWNrIGlm
IHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZl
Y3Rvci4KICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2Fs
ZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAg
ICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVz
SW5WZWN0b3IpKSk7CkBAIC0yNzQ3LDIxICsyNzQ5LDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQdXNo
OiB7CisgICAgICAgIEFTU0VSVChtb2RlSXNKU0FycmF5KG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAg
ICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwotICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwot
ICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAg
ICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS5jaGlsZDIoKSwgV3JpdGVC
YXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpOwor
ICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJh
c2VHUFIsIHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFj
Y2Vzcywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIH0KIAotICAg
ICAgICBzcGVjdWxhdGVBcnJheShBcnJheTo6SlNBcnJheSwgbm9kZS5jaGlsZDEoKSwgYmFzZUdQ
Uik7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7
CisgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0
b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAvLyBS
ZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KQEAgLTI3ODYsMTkgKzI3OTEsMTggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBBcnJheVBvcDogeworICAgICAgICBBU1NFUlQobW9kZUlzSlNBcnJheShub2Rl
LmFycmF5TW9kZSgpKSk7CisKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlKHRoaXMpOwotICAgICAg
ICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3Jh
Z2VMZW5ndGgodGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBH
UFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3Jh
Z2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGVBcnJheShBcnJheTo6
SlNBcnJheSwgbm9kZS5jaGlsZDEoKSwgYmFzZUdQUik7Ci0KLSAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0
KCkpLCBzdG9yYWdlR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3Ro
KSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTUsMjAgKzI5NSwyMyBAQCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3Vs
YXRpdmVKCiAgICAgfQogfQogCi1jb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZUFycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSwgRWRnZSBlZGdlLCBH
UFJSZWcgYmFzZVJlZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm9k
ZSkKIHsKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogcmVzdWx0ID0gdHlwZWRBcnJh
eURlc2NyaXB0b3IoYXJyYXlNb2RlKTsKKyAgICBBU1NFUlQobW9kZUlzU3BlY2lmaWMobm9kZS5h
cnJheU1vZGUoKSkpOwogICAgIAotICAgIGlmIChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5m
b3JOb2RlKGVkZ2UpLCBhcnJheU1vZGUpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgR1BSUmVn
IGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgIAorICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yKiByZXN1bHQgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKKyAg
ICAKKyAgICBpZiAobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyog
ZXhwZWN0ZWRDbGFzc0luZm8gPSAwOwogICAgIAotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0g
ICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHN3
aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAg
ICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7
CkBAIC0zMjUsNyArMzI4LDkgQEAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIFNwZWN1bGF0
aXZlSgogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmNs
YXNzSW5mb09mZnNldCgpKSwKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgZXhwZWN0ZWRDbGFz
c0luZm8gPSAmQXJndW1lbnRzOjpzX2luZm87CkBAIC0zNTYsNyArMzYxLDcgQEAgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSgogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihleHBlY3RlZENsYXNzSW5m
bykpKTsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKIH0KIAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSW5kZXgg
bm9kZUluZGV4KQpAQCAtMzkzLDggKzM5OCwxMCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTdG9yYWdlKE5vZGVJCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2RlJiBu
b2RlKQogewogICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwg
bm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAg
ICAgICAgICB1c2UobV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJ
ZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykg
eworICAgICAgICAgICAgaWYgKCEhbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSkKKyAgICAgICAgICAgICAgICB1c2UobV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBFZGdlIGNoaWxk
MSA9IG5vZGUuY2hpbGQxKCk7CiAgICAgICAgIGlmICghY2hpbGQxKSB7CkBAIC0yMTQ2LDYgKzIx
NTMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVy
dHksIE5vZGUmIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mg
c2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQogeworICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7
CisgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgIAogICAgIEVkZ2Ug
dmFsdWVVc2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgIAogICAg
IEdQUlRlbXBvcmFyeSB2YWx1ZTsKQEAgLTIyMTMsMTAgKzIyMjMsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgfQogICAgIEFTU0VSVF9VTlVTRUQodmFs
dWVHUFIsIHZhbHVlR1BSICE9IHByb3BlcnR5KTsKICAgICBBU1NFUlQodmFsdWVHUFIgIT0gYmFz
ZSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7Ci0gICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsK
LSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0
b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgb3V0T2ZCb3VuZHM7CiAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAg
b3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xl
bmd0aE9mZnNldCkpOwpAQCAtMjI3OCw2ICsyMjg1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25GbAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUmIG5vZGUsIHNpemVfdCBlbGVt
ZW50U2l6ZSkKIHsKKyAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFn
ZS5ncHIoKTsKKyAgICAKICAgICBFZGdlIGJhc2VVc2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0No
aWxkKG5vZGUsIDApOwogICAgIEVkZ2UgdmFsdWVVc2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0No
aWxkKG5vZGUsIDIpOwogICAgIApAQCAtMjI4NywxMCArMjI5Nyw2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckYKICAgICAKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwogICAgIAotICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwotICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAKLSAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwg
c3RvcmFnZVJlZyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHM7CiAgICAg
aWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbCkKICAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOwpAQCAtMzEw
OSw4ICszMTE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgog
ICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVz
Y3JpcHRvciA9Ci0gICAgICAgIHNwZWN1bGF0ZUFycmF5KG5vZGUuYXJyYXlNb2RlKCksIG5vZGUu
Y2hpbGQxKCksIGJhc2VSZWcpOworICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNj
cmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAgICAgCiAg
ICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgpA
QCAtMzI1MiwzMyArMzI1Nyw0MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJn
dW1lbnRzCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2Rl
JiBub2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGls
ZDEoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgCi0gICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7Ci0gICAgICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlw
dG9yID0KLSAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9kZS5hcnJheU1vZGUoKSwgbm9kZS5jaGls
ZDEoKSwgYmFzZUdQUik7CisgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0
b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKIAogICAgIHN3aXRj
aCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2Fz
ZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJl
c3VsdEdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlc3Vs
dEdQUik7CisgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgc3RvcmFnZSk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlc3VsdFJlZyk7
CiAgICAgICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1Ro
YW4sIHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgaW50ZWdl
clJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBB
cnJheTo6U3RyaW5nOgorICAgIH0KKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6IHsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwog
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNT
dHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEFycmF5OjpBcmd1bWVudHM6CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czogewog
ICAgICAgICBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKG5vZGUpOwogICAgICAgICBicmVhazsK
KyAgICB9CiAgICAgZGVmYXVsdDoKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBi
YXNlKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7
CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBk
ZXNjcmlwdG9yLT5tX2xlbmd0aE9mZnNldCksIHJlc3VsdEdQUik7CiAgICAgICAgIGludGVnZXJS
ZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMjY2OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxOTcsNyArMjE5Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXk6Ok1vZGUpOwogICAgIAot
ICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBzcGVjdWxhdGVBcnJheShBcnJheTo6TW9k
ZSwgRWRnZSBiYXNlRWRnZSwgR1BSUmVnIGJhc2VSZWcpOworICAgIHZvaWQgY2hlY2tBcnJheShO
b2RlJik7CiAgICAgCiAgICAgdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CiAgICAgR1BSUmVnIGZpbGxT
cGVjdWxhdGVJbnRJbnRlcm5hbChOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxMjY2OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgogICAg
ICAgICAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICAgICAgY2FzZSBD
aGVja0FycmF5OgorICAgICAgICAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZToKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CiAgICAgICAgICAgICAgICAgICAgIC8v
IERvbid0IGNvdW50IHRoZXNlIHVzZXMuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160608</attachid>
            <date>2012-08-26 11:57:28 -0700</date>
            <delta_ts>2012-08-26 12:15:38 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cseindexing_patch_4.diff</filename>
            <type>text/plain</type>
            <size>76630</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2NzA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAxMi0wOC0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFycmF5IHR5cGUgY2hlY2tzIGFuZCBzdG9yYWdlIGFjY2Vzc2VzIHNob3VsZCBiZSB1bmlmb3Jt
bHkgcmVwcmVzZW50ZWQgYW5kIGF2YWlsYWJsZSB0byBDU0UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1MDEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB1bmlmb3JtbHkgYnJlYWtzIHVwIGFsbCBh
cnJheSBhY2Nlc3NlcyBpbnRvIHVwIHRvIHRocmVlIHBhcnRzOgorICAgICAgICAKKyAgICAgICAg
MSkgVGhlIHR5cGUgY2hlY2ssIHVzaW5nIGEgbmV3bHkgaW50cm9kdWNlZCBDaGVja0FycmF5IG5v
ZGUsIGluIGFkZGl0aW9uIHRvIHBvc3NpYmx5CisgICAgICAgICAgIGEgQ2hlY2tTdHJ1Y3R1cmUg
bm9kZS4gV2Ugd2VyZSBhbHJlYWR5IGluc2VydGluZyB0aGUgQ2hlY2tTdHJ1Y3R1cmUgcHJpb3Ig
dG8gdGhpcworICAgICAgICAgICBwYXRjaC4gVGhlIENoZWNrQXJyYXkgbm9kZSB3aWxsIGJlIGF1
dG9tYXRpY2FsbHkgZWxpbWluYXRlZCBpZiB0aGUgdGhpbmcgaXQgd2FzCisgICAgICAgICAgIGNo
ZWNraW5nIGZvciBoYWQgYWxyZWFkeSBiZWVuIGNoZWNrZWQgZm9yLCBlaXRoZXIgaW50ZW50aW9u
YWxseSAoYSBDaGVja1N0cnVjdHVyZQorICAgICAgICAgICBpbnNlcnRlZCBiYXNlZCBvbiB0aGUg
YXJyYXkgcHJvZmlsZSBvZiB0aGlzIGFjY2Vzcykgb3IgYWNjaWRlbnRhbGx5IChzb21lIGNoZWNr
cywKKyAgICAgICAgICAgdHlwaWNhbGx5IGEgQ2hlY2tTdHJ1Y3R1cmUsIGluc2VydGVkIGZvciBz
b21lIHVucmVsYXRlZCBvcGVyYXRpb25zKS4gVGhlCisgICAgICAgICAgIENoZWNrQXJyYXkgbm9k
ZSBtYXkgbm90IGJlIGluc2VydGVkIGlmIHRoZSBhcnJheSB0eXBlIGlzIG5vbi1zcGVjaWZpYyAo
R2VuZXJpYyBvcgorICAgICAgICAgICBGb3JjZUV4aXQpLgorICAgICAgICAKKyAgICAgICAgMikg
VGhlIHN0b3JhZ2UgbG9hZCB1c2luZyBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLiBQcmV2aW91
c2x5LCB0aGlzIG9ubHkgd29ya2VkIGZvcgorICAgICAgICAgICBHZXRCeVZhbC4gTm93IGl0IHdv
cmtzIGZvciBhbGwgYXJyYXkgYWNjZXNzZXMuIFRoZSBzdG9yYWdlIGxvYWQgbWF5IG5vdCBiZQor
ICAgICAgICAgICBpbnNlcnRlZCBpZiB0aGUgbW9kZSBvZiBhcnJheSBhY2Nlc3MgZG9lcyBub3Qg
cGVybWl0IENTRSBvZiBzdG9yYWdlIGxvYWRzIChsaWtlCisgICAgICAgICAgIG5vbi1zcGVjaWZp
YyBtb2RlcyBvciBBcmd1bWVudHMpLgorICAgICAgICAKKyAgICAgICAgMykgVGhlIGFjY2VzcyBp
dHNlbGY6IG9uZSBvZiBHZXRCeVZhbCwgUHV0QnlWYWwsIFB1dEJ5VmFsQWxpYXMsIEFycmF5UHVz
aCwgQXJyYXlQb3AsCisgICAgICAgICAgIEdldEFycmF5TGVuZ3RoLCBTdHJpbmdDaGFyQXQsIG9y
IFN0cmluZ0NoYXJDb2RlQXQuCisgICAgICAgIAorICAgICAgICBUaGlzIG1lYW5zIHRoYXQgdGhl
IHR5cGUgY2hlY2sgY2FuIGJlIHN1YmplY3RlZCB0byBDU0UgZXZlbiBpZiB0aGUgQ0ZBIGlzbid0
IHNtYXJ0CisgICAgICAgIGVub3VnaCB0byByZWFzb24gYWJvdXQgaXQgKHlldCEpLiBJdCBhbHNv
IG1lYW5zIHRoYXQgdGhlIHN0b3JhZ2UgbG9hZCBjYW4gYWx3YXlzIGJlCisgICAgICAgIHN1Ympl
Y3RlZCB0byBDU0U7IHByZXZpb3VzbHkgQ1NFIG9uIHN0b3JhZ2UgbG9hZCBvbmx5IHdvcmtlZCBm
b3IgYXJyYXkgbG9hZHMgYW5kIG5vdAorICAgICAgICBvdGhlciBmb3JtcyBvZiBhY2Nlc3MuIEZp
bmFsbHksIGl0IHJlbW92ZXMgdGhlIGJpemFycmUgYmVoYXZpb3IgdGhhdAorICAgICAgICBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlIHByZXZpb3VzbHkgaGFkOiBwcmV2aW91c2x5LCBpdCB3YXMg
cmVzcG9uc2libGUgZm9yIHRoZSB0eXBlCisgICAgICAgIGNoZWNrIGluIHNvbWUgY2FzZXMsIGJ1
dCBub3Qgb3RoZXJzOyB0aGlzIG1hZGUgcmVhc29uaW5nIGFib3V0IHRoZSBDRkEgcmVhbGx5Cisg
ICAgICAgIGNvbmZ1c2luZy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gZGlz
YWJsZXMgbGF0ZSByZWZpbmVtZW50IG9mIGFycmF5IG1vZGUsIHNpbmNlIEkgZGVjaWRlZCB0aGF0
CisgICAgICAgIHN1cHBvcnRpbmcgdGhhdCBmZWF0dXJlIGlzIGJvdGggY29uZnVzaW5nIGFuZCBs
aWtlbHkgdW5wcm9maXRhYmxlLiBUaGUgYXJyYXkgbW9kZXMgYXJlCisgICAgICAgIG5vdyBsb2Nr
ZWQgaW4gaW4gdGhlIGZpcnN0IGZpeHVwIHJ1biBhZnRlciBwcmVkaWN0aW9uIHByb3BhZ2F0aW9u
LiBPZiBjb3Vyc2UsCisgICAgICAgIHJlZmluZW1lbnRzIGZyb20gR2VuZXJpYyB0byBzb21ldGhp
bmcgZWxzZSB3b3VsZCBub3QgaGF2ZSBiZWVuIGEgcHJvYmxlbTsgd2UgY291bGQKKyAgICAgICAg
cmVlbmFibGUgdGhvc2UgaWYgd2UgdGhvdWdodCB3ZSByZWFsbHkgbmVlZGVkIHRvLgorCisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmZyb21TdHJ1Y3R1cmUpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpyZWZpbmVBcnJheU1vZGUpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJheSk6CisgICAgICAg
IChKU0M6OkRGRzo6bGVuZ3RoTmVlZHNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjptb2Rl
SXNTcGVjaWZpYyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmdldEFycmF5TW9kZSk6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9kZUFuZEVtaXRDaGVja3Mp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAg
KiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9ja3MpOgorICAgICAgICAqIGRmZy9ERkdD
U0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OkNTRVBoYXNlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbik6Cisg
ICAgICAgIChDU0VQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrQXJy
YXlFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNTRSk6Cisg
ICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpjaGVja0FycmF5KToKKyAgICAgICAgKEZpeHVwUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToKKyAgICAgICAgKERGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpjb2xsZWN0R2FyYmFnZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
IChHcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZvdGUpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpzdWJzdGl0dXRlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6c2V0QXJyYXlNb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdQaGFzZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlOjptZXJnZURlZmF1bHRGbGFncyk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hl
Y2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnVzZUNoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorCiAyMDEy
LTA4LTI1ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5
IGEgbGl0dGxlIGhhcmRlciB0byBmaXggdGhlIExpbnV4IGJ1aWxkLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjY2
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04ODcsMTIgKzg4NywxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTAwLDQyICs4
OTgsMzQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CiAgICAgICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcgb2YgdGhlIG91dC1vZi1i
b3VuZHMKICAgICAgICAgICAgIC8vIGNhc2UuCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1h
a2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFy
cmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNVaW50MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQz
MkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAg
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwpAQCAtOTQz
LDEyICs5MzMsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQ2NEFycmF5KTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC05NzAsMjAgKzk1OCwxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQXJndW1lbnRzKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
aWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwpAQCAtOTkxLDcgKzk3NSw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10u
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTk5OSw3ICs5ODIsNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMp
LmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
SW50MzJBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7
CkBAIC0xMDA3LDcgKzk4OSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0g
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlm
IChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTEwMTUsNyArOTk2LDYg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9n
cmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CkBAIC0xMDIzLDcgKzEwMDMsNiBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQxKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5m
aWx0ZXIoU3BlY0ludDMyKTsKQEAgLTEwMzEsNyArMTAxMCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMyku
ZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
VWludDMyQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIp
OwpAQCAtMTAzOSwxMiArMTAxNywxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVt
YmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9hdDMyQXJyYXkp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMp
LmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA1NywxMyArMTAz
MywxMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICAKICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY051bWJlcik7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC0xMzQ3LDgwICsxMzIxLDggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewot
ICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6Ci0gICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgot
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1N0cmluZ1NwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpK
U0FycmF5OgotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czoKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwotICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCghaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDhB
cnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNJbnQxNkFycmF5U3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0ludDMyQXJyYXlT
cGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwotICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBub2RlLnNldENh
bkV4aXQoIWlzVWludDhBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjVWlu
dDhBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJy
YXk6Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzVWludDhDbGFtcGVkQXJyYXlTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIG5vZGUu
c2V0Q2FuRXhpdCghaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjVWludDE2QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
SW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQzMkFycmF5U3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KCFpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQz
MkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0g
ICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24oZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
KyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgaXQncyB0cnVlIGZv
ciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJheSwgc28gaXQncyBnb29kIGVub3VnaC4KKyAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CkBAIC0xNDkyLDggKzEzOTQsMTMgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVh
cigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyAoYWxtb3N0KSBhbHdheXMgZm9sbG93ZWQg
YnkgR2V0QnlWYWwsIHdoaWNoIGRvZXMgZXhpdC4gU28gbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGJl
IG1vcmUgcHJlY2lzZS4KKyAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAgICAgaWYgKG1vZGVB
bHJlYWR5Q2hlY2tlZChmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSkg
eworICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBi
eSBvcGVyYXRpb25zIChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBp
cyBubyBwb2ludCBpbiB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCiAgICAgICAgIHN3aXRj
aCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKQEAgLTE1
MDQsNiArMTQxMSw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9ucywg
YnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTM1LDYgKzE0NDUs
MTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OiB7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFy
cmF5OjpTdHJpbmc6CisgICAgICAgICAgICAvLyBTdHJpbmdzIGFyZSB3ZWlyZCAtIHdlIG1heSBz
cGVjIGZhaWwgaWYgdGhlIHN0cmluZyB3YXMgYSByb3BlLiBUaGF0IGlzIG9mIGNvdXJzZQorICAg
ICAgICAgICAgLy8gc3R1cGlkLCBhbmQgd2Ugc2hvdWxkIGZpeCB0aGF0LCBidXQgZm9yIG5vdyBs
ZXQncyBhdCBsZWFzdCBiZSBob25lc3QgYWJvdXQgaXQuCisgICAgICAgICAgICBub2RlLnNldENh
bkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgYnJlYWs7
IAogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTI2Njk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDYgKzMxMiw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgICAg
ICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNh
c2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAgICAgICAgICAgICAg
IGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBh
Ym91dCB0aGVzZSBiZWNhdXNlIGlmIHdlIGdldCB1c2VzIG9mIHRoZSByZWxldmFudAogICAgICAg
ICAgICAgICAgICAgICAvLyB2YXJpYWJsZSB0aGVuIHdlIGNhbiBzYWZlbHkgZ2V0IHJpZCBvZiB0
aGVzZSwgdG9vLiBUaGlzIG9mIGNvdXJzZQogICAgICAgICAgICAgICAgICAgICAvLyByZWxpZXMg
b24gdGhlcmUgbm90IGJlaW5nIGFueSBpbmZvcm1hdGlvbiB0cmFuc2ZlcnJlZCBieSB0aGUgQ0ZB
CkBAIC00NzYsNyArNDc3LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6CiAg
ICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKLSAgICAg
ICAgICAgICAgICBjYXNlIEZvcndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewor
ICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
OgorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBjYW4ganVzdCBnZXQgcmlkIG9mIHRoaXMgbm9kZSwgaWYgaXQgcmVmZXJlbmNlcyBh
IHBoYW50b20gYXJndW1lbnQuCiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1p
emUobV9ncmFwaFtub2RlLmNoaWxkMSgpXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJl
dmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTEgQEAgQXJyYXk6Ok1vZGUgZnJvbU9i
c2VydmVkKEFycmF5TW9kZXMgbW9kZQogICAgIH0KIH0KIAorQXJyYXk6Ok1vZGUgZnJvbVN0cnVj
dHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBtYWtlU2FmZSkKK3sKKyAgICByZXR1cm4g
ZnJvbU9ic2VydmVkKGFycmF5TW9kZUZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbWFrZVNhZmUp
OworfQorCiBBcnJheTo6TW9kZSByZWZpbmVBcnJheU1vZGUoQXJyYXk6Ok1vZGUgYXJyYXlNb2Rl
LCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBpbmRleCkKIHsKICAgICBpZiAo
IWJhc2UgfHwgIWluZGV4KSB7CkBAIC02NCwxNyArNjksOCBAQCBBcnJheTo6TW9kZSByZWZpbmVB
cnJheU1vZGUoQXJyYXk6Ok1vZGUgCiAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24oaW5kZXgp
IHx8ICFpc0NlbGxTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAgcmV0dXJuIEFycmF5OjpHZW5l
cmljOwogICAgIAotICAgIC8vIFBhc3MgdGhyb3VnaCBhbnkgYXJyYXkgbW9kZXMgdGhhdCB3b3Vs
ZCBoYXZlIGJlZW4gZGVjaWRlZCBieSB0aGUgYXJyYXkgcHJvZmlsZSwgc2luY2UKLSAgICAvLyB0
aGUgcHJlZGljdGlvbnMgb2YgdGhlIGlucHV0cyB3aWxsIG5vdCB0ZWxsIHVzIGFueXRoaW5nIHVz
ZWZ1bCB0aGF0IHdlIGRpZG4ndCBhbHJlYWR5Ci0gICAgLy8gZ2V0IGZyb20gdGhlIGFycmF5IHBy
b2ZpbGUuCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6CisgICAgaWYgKGFycmF5TW9kZSAhPSBBcnJheTo6VW5kZWNpZGVkKQogICAgICAg
ICByZXR1cm4gYXJyYXlNb2RlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
ICAgICAKICAgICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAgcmV0dXJu
IEFycmF5OjpTdHJpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5
TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEyICs2MywyNSBAQCBlbnVtIE1vZGUg
ewogCiBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9vbCBtYWtl
U2FmZSk7CiAKK0FycmF5OjpNb2RlIGZyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiwgYm9vbCBtYWtl
U2FmZSk7CisKIEFycmF5OjpNb2RlIHJlZmluZUFycmF5TW9kZShBcnJheTo6TW9kZSwgU3BlY3Vs
YXRlZFR5cGUgYmFzZSwgU3BlY3VsYXRlZFR5cGUgaW5kZXgpOwogCiBib29sIG1vZGVBbHJlYWR5
Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiwgQXJyYXk6Ok1vZGUpOwogCiBjb25zdCBjaGFyKiBtb2Rl
VG9TdHJpbmcoQXJyYXk6Ok1vZGUpOwogCitpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5
OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2Ug
QXJyYXk6OkpTQXJyYXk6CisgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCiBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewpAQCAtODIsNiArOTUsMTEgQEAgaW5saW5l
IGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcgogICAgIH0KIH0KIAoraW5saW5lIGJv
b2wgbGVuZ3RoTmVlZHNTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICByZXR1
cm4gbW9kZUlzSlNBcnJheShhcnJheU1vZGUpOworfQorCiBpbmxpbmUgQXJyYXk6Ok1vZGUgbW9k
ZUZvclB1dChBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUp
IHsKQEAgLTExNSw3ICsxMzMsNyBAQCBpbmxpbmUgYm9vbCBtb2Rlc0NvbXBhdGlibGVGb3JTdG9y
YWdlTG9hCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNM
ZW5ndGgoQXJyYXk6Ok1vZGUgbW9kZSkKK2lubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5
OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBBcnJheTo6VW5k
ZWNpZGVkOgpAQCAtMTI3LDYgKzE0NSwxMSBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5n
dGgoQXJyYXk6Ok1vCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgo
QXJyYXk6Ok1vZGUgbW9kZSkKK3sKKyAgICByZXR1cm4gbW9kZUlzU3BlY2lmaWMobW9kZSk7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2lubGluZVN0YWNrVG9wKDApCiAgICAgICAgICwgbV9oYXZlQnVpbHRP
cGVyYW5kTWFwcyhmYWxzZSkKICAgICAgICAgLCBtX2VtcHR5SlNWYWx1ZUluZGV4KFVJTlRfTUFY
KQorICAgICAgICAsIG1fY3VycmVudEluc3RydWN0aW9uKDApCiAgICAgewogICAgICAgICBBU1NF
UlQobV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgCkBAIC04MTgsOSArODE5LDE0IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJl
bnRQcm9maWxpbmdJbmRleCk7CiAgICAgfQogICAgIAotICAgIEFycmF5OjpNb2RlIGdldEFycmF5
TW9kZVdpdGhvdXRPU1JFeGl0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVJ
bmRleCBiYXNlKQorICAgIEFycmF5OjpNb2RlIGdldEFycmF5TW9kZShBcnJheVByb2ZpbGUqIHBy
b2ZpbGUpCisgICAgeworICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
KTsKKyAgICAgICAgcmV0dXJuIGZyb21PYnNlcnZlZChwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9k
ZXMoKSwgZmFsc2UpOworICAgIH0KKyAgICAKKyAgICBBcnJheTo6TW9kZSBnZXRBcnJheU1vZGVB
bmRFbWl0Q2hlY2tzKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgTm9kZUluZGV4IGJhc2UpCiAgICAg
ewotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5hcnJheVByb2ZpbGU7CiAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bigpOwogICAgICAgICBpZiAocHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkKICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldChwcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIGJhc2UpOwpAQCAtODM4LDE2
ICs4NDQsNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZnJvbU9ic2VydmVkKHByb2ZpbGUt
Pm9ic2VydmVkQXJyYXlNb2RlcygpLCBtYWtlU2FmZSk7CiAgICAgfQogICAgIAotICAgIEFycmF5
OjpNb2RlIGdldEFycmF5TW9kZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBOb2Rl
SW5kZXggYmFzZSkKLSAgICB7Ci0gICAgICAgIEFycmF5OjpNb2RlIHJlc3VsdCA9IGdldEFycmF5
TW9kZVdpdGhvdXRPU1JFeGl0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFzZSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAocmVzdWx0ID09IEFycmF5OjpGb3JjZUV4aXQpCi0gICAgICAgICAgICBhZGRU
b0dyYXBoKEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KLQogICAgIE5vZGVJbmRleCBtYWtlU2FmZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAg
IHsKICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTExNTAsNiAr
MTE0Niw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gQ2FjaGUgb2YgY29kZSBibG9ja3MgdGhh
dCB3ZSd2ZSBnZW5lcmF0ZWQgYnl0ZWNvZGUgZm9yLgogICAgIEJ5dGVDb2RlQ2FjaGU8Y2FuSW5s
aW5lRnVuY3Rpb25Gb3I+IG1fY29kZUJsb2NrQ2FjaGU7CisgICAgCisgICAgSW5zdHJ1Y3Rpb24q
IG1fY3VycmVudEluc3RydWN0aW9uOwogfTsKIAogI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBc
CkBAIC0xNTUzLDcgKzE1NTEsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmlu
c2ljKGJvbwogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBhcnJh
eVB1c2ggPSBhZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlv
biksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKKyAgICAgICAgQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1fY3VycmVudEluc3RydWN0aW9uWzVdLnUuYXJyYXlQ
cm9maWxlKTsKKyAgICAgICAgaWYgKCFtb2RlSXNKU0FycmF5KGFycmF5TW9kZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE5vZGVJbmRleCBhcnJheVB1c2ggPSBhZGRUb0dy
YXBoKEFycmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0
KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZz
ZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwogICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAg
ICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhcnJheVB1c2gpOwogICAgICAgICAKQEAgLTE1
NjQsNyArMTU2NSwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9v
CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAxKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IGFycmF5UG9wID0g
YWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChy
ZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7CisgICAgICAgIEFycmF5OjpN
b2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJbnN0cnVjdGlvbls1XS51LmFy
cmF5UHJvZmlsZSk7CisgICAgICAgIGlmICghbW9kZUlzSlNBcnJheShhcnJheU1vZGUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBOb2RlSW5kZXggYXJyYXlQb3AgPSBhZGRU
b0dyYXBoKEFycmF5UG9wLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBn
ZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOwogICAgICAgICBpZiAo
dXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhcnJheVBvcCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc5Miw2ICsxNzk2LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAKICAgICAgICAgLy8gU3dpdGNoIG9u
IHRoZSBjdXJyZW50IGJ5dGVjb2RlIG9wY29kZS4KICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2luICsgbV9jdXJyZW50SW5kZXg7CisgICAg
ICAgIG1fY3VycmVudEluc3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uOyAvLyBTb21lIG1l
dGhvZHMgd2FudCB0byB1c2UgdGhpcywgYW5kIHdlJ2QgcmF0aGVyIG5vdCB0aHJlYWQgaXQgdGhy
b3VnaCBjYWxscy4KICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7CiAgICAgICAgIHN3aXRjaCAo
b3Bjb2RlSUQpIHsKIApAQCAtMjE3Nyw3ICsyMTgyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biA9IGdldFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4
IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9u
LCBiYXNlKTsKKyAgICAgICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9k
ZUFuZEVtaXRDaGVja3MoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBiYXNl
KTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRv
R3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJlZGljdGlvbiksIGJh
c2UsIHByb3BlcnR5KTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCBnZXRCeVZhbCk7CkBAIC0yMTg4LDcgKzIxOTMsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogewog
ICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7CiAKLSAgICAgICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5
TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhc2UpOworICAgICAgICAgICAgQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5hcnJheVByb2ZpbGUsIGJhc2UpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2Rl
SW5kZXggcHJvcGVydHkgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7CkBAIC0yMTk2LDYgKzIyMDEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKICAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKHZhbHVlKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKE5vTm9kZSk7IC8vIExlYXZl
IHJvb20gZm9yIHByb3BlcnR5IHN0b3JhZ2UuCiAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6
OlZhckFyZywgUHV0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8oMCkpOwogCiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfdmFsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU5LDggKzY1OSwxMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5m
aXJzdENoaWxkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZp
cnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICArK2NoaWxkSWR4KQotICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2Nh
bChmaXJzdEJsb2NrLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBjaGFuZ2VS
ZWYpOworICAgICAgICAgICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghIW1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2Nr
LCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBjaGFuZ2VSZWYpOworICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghIW5vZGUuY2hpbGQx
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2Nr
LCBub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBjaGFuZ2VSZWYpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoISFub2RlLmNoaWxkMigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDggQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBDU0VQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiBwdWJsaWM6Ci0gICAgQ1NFUGhhc2UoR3JhcGgmIGdyYXBoLCBPcHRpbWl6YXRp
b25GaXhwb2ludFN0YXRlIGZpeHBvaW50U3RhdGUpCisgICAgQ1NFUGhhc2UoR3JhcGgmIGdyYXBo
KQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAiY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRp
b24iKQotICAgICAgICAsIG1fZml4cG9pbnRTdGF0ZShmaXhwb2ludFN0YXRlKQogICAgIHsKICAg
ICAgICAgLy8gUmVwbGFjZW1lbnRzIGFyZSB1c2VkIHRvIGltcGxlbWVudCBsb2NhbCBjb21tb24g
c3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbi4KICAgICAgICAgbV9yZXBsYWNlbWVudHMucmVzaXpl
KG1fZ3JhcGguc2l6ZSgpKTsKQEAgLTMyNyw3ICszMjYsNyBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5h
dGlvbihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgTm9kZUluZGV4IGNoaWxkMSkK
KyAgICBib29sIGNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24oY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmVTZXQsIE5vZGVJbmRleCBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewogICAgICAgICAgICAgTm9kZUluZGV4IGlu
ZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwpAQCAtNjI0LDggKzYyMywzNyBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQorICAgIAorICAgIGJv
b2wgY2hlY2tBcnJheUVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5OjpNb2RlIGFy
cmF5TW9kZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2Nr
OyBpLS07KSB7CisgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+
YXQoaSk7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVs
aW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIGJvb2wgaGFzSW50ZWdlckluZGV4UHJlZGljdGlv
bikKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAg
IHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAg
ICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcg
dGhlIHN0cnVjdHVyZSBvciBwdXR0aW5nIHRvIHRoZSBzdG9yYWdlIGNhbm5vdAorICAgICAgICAg
ICAgICAgIC8vIGNoYW5nZSB0aGUgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyLgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDaGVja0Fy
cmF5OgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBub2Rl
LmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5k
ZXgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1p
bmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5OjpNb2RlIGFycmF5TW9kZSkKICAgICB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CkBAIC02MzUsOSAr
NjYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4
XTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBiYXNlUHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwot
ICAgICAgICAgICAgICAgIGJvb2wgbm9kZUhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24gPSAhKCEo
YmFzZVByZWRpY3Rpb24gJiBTcGVjSW50MzIpICYmIGJhc2VQcmVkaWN0aW9uKTsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgaGFzSW50ZWdlckluZGV4UHJl
ZGljdGlvbiA9PSBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbikKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5hcnJheU1vZGUoKSA9PSBhcnJh
eU1vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTk4OCw3ICsxMDE0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJp
YWJsZUFjY2Vzc0RhdGEpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxl
IHRvIHJlbW92ZSBTZXRMb2NhbHMgdGhhdCBjYW4gZXhpdDsgd2UganVzdCBuZWVkCiAgICAgICAg
ICAgICAvLyB0byByZXBsYWNlIHRoZW0gd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNoZWNrcy4KLSAg
ICAgICAgICAgIGlmIChtX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpIHsK
KyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENv
bnZlcmdlZCkgewogICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gYmUgY29uc2VydmF0aXZlIGF0
IHRoaXMgdGltZTsgaWYgdGhlIFNldExvY2FsIGhhcyBhbnkgY2hhbmNlIG9mIHBlcmZvcm1pbmcK
ICAgICAgICAgICAgICAgICAvLyBhbnkgc3BlY3VsYXRpb25zIHRoZW4gd2UgY2Fubm90IGRvIGFu
eXRoaW5nLgogICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVy
ZWQoKSkgewpAQCAtMTA3Nyw3ICsxMTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoK
LSAgICAgICAgICAgIGlmIChtX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQp
CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RD
b252ZXJnZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBlbGltaW5hdGUo
Z2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTExMDMsNyArMTEyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBGb3J3YXJkQ2hl
Y2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRp
b24obm9kZS5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKKyAgICAgICAg
ICAgIGlmIChjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlU2V0KCksIG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTExNCw3ICsxMTQwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgotICAgICAgICAgICAgaWYgKG1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENv
bnZlcmdlZCkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhw
b2ludE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGVs
aW1pbmF0ZShwdXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSksIFBoYW50b21QdXRTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTI0LDEw
ICsxMTUwLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja0FycmF5
OgorICAgICAgICAgICAgaWYgKGNoZWNrQXJyYXlFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmlu
ZGV4KCksIG5vZGUuYXJyYXlNb2RlKCkpKQorICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBiYXNlUHJlZGlj
dGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwotICAgICAgICAgICAg
Ym9vbCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbiA9ICEoIShiYXNlUHJlZGljdGlvbiAm
IFNwZWNJbnQzMikgJiYgYmFzZVByZWRpY3Rpb24pOwotICAgICAgICAgICAgc2V0UmVwbGFjZW1l
bnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgp
LmluZGV4KCksIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5hcnJheU1vZGUoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIApAQCAtMTE0MCw3ICsxMTY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAg
ICAgICAgICBpZiAobV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKQorICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVy
Z2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZWxpbWluYXRlKHB1dEJ5
T2Zmc2V0U3RvcmVFbGltaW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5z
dG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCku
aW5kZXgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTc4LDE0ICsxMjA3LDEzIEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7CiAgICAgVmVjdG9yPE5vZGVJbmRl
eCwgMTY+IG1fcmVwbGFjZW1lbnRzOwogICAgIEZpeGVkQXJyYXk8dW5zaWduZWQsIExhc3ROb2Rl
VHlwZT4gbV9sYXN0U2VlbjsKLSAgICBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1fZml4cG9p
bnRTdGF0ZTsKICAgICBib29sIG1fY2hhbmdlZDsgLy8gT25seSB0cmFja3MgY2hhbmdlcyB0aGF0
IGhhdmUgYSBzdWJzdGFudGl2ZSBlZmZlY3Qgb24gb3RoZXIgb3B0aW1pemF0aW9ucy4KIH07CiAK
LWJvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgsIE9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUg
Zml4cG9pbnRTdGF0ZSkKK2Jvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCiB7CiAgICAgU2Ft
cGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDU0UgUGhhc2UiKTsKLSAgICByZXR1cm4g
cnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoLCBmaXhwb2ludFN0YXRlKTsKKyAgICByZXR1cm4gcnVu
UGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMTI2
Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIEdyYXBoOwogLy8gYSB3aWRlIHJhbmdlIG9m
IHN1YmV4cHJlc3Npb24gc2ltaWxhcml0aWVzLiBJdCdzIGtub3duIHRvIHByb2R1Y2UgYmlnIHdp
bnMKIC8vIG9uIGEgZmV3IGJlbmNobWFya3MsIGFuZCBpcyByZWxhdGl2ZWx5IGNoZWFwIHRvIHJ1
bi4KIAotYm9vbCBwZXJmb3JtQ1NFKEdyYXBoJiwgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSk7
Citib29sIHBlcmZvcm1DU0UoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDEyNjY5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBlbnVtIFNwaWxsUmVnaXN0ZXJzTW9kZSB7IE5lZWRUb1Nw
aWxsLCBECiAKIGVudW0gTm9SZXN1bHRUYWcgeyBOb1Jlc3VsdCB9OwogCi1lbnVtIE9wdGltaXph
dGlvbkZpeHBvaW50U3RhdGUgeyBGaXhwb2ludENvbnZlcmdlZCwgRml4cG9pbnROb3RDb252ZXJn
ZWQgfTsKK2VudW0gT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSB7IEJlZm9yZUZpeHBvaW50LCBG
aXhwb2ludE5vdENvbnZlcmdlZCwgRml4cG9pbnRDb252ZXJnZWQgfTsKIAogaW5saW5lIGJvb2wg
c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxMjY2
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSwxNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBub2RlLmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
KHN0cnVjdHVyZVZhbHVlLnNpbmdsZXRvbigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1vZGVBbHJl
YWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2Rl
KCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS5yZWZDb3VudCgpID09IDEpOworICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZh
dWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24g
MTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDcgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxl
TW9kZSBjb21waWxlTQogICAgIHBlcmZvcm1GaXh1cChkZmcpOwogICAgIHBlcmZvcm1TdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nKGRmZyk7CiAgICAgdW5zaWduZWQgY250ID0gMTsKKyAgICBkZmcubV9m
aXhwb2ludFN0YXRlID0gRml4cG9pbnROb3RDb252ZXJnZWQ7CiAgICAgZm9yICg7OyArK2NudCkg
ewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygiREZHIGJl
Z2lubmluZyBvcHRpbWl6YXRpb24gZml4cG9pbnQgaXRlcmF0aW9uICMldS5cbiIsIGNudCk7CkBA
IC0xMjUsMTMgKzEyNiwxNCBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBp
bGVNCiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwogICAg
ICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Bcmd1bWVudHNTaW1wbGlmaWNhdGlvbihkZmcpOwogICAg
ICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihkZmcpOwotICAgICAgICBj
aGFuZ2VkIHw9IHBlcmZvcm1DU0UoZGZnLCBGaXhwb2ludE5vdENvbnZlcmdlZCk7CisgICAgICAg
IGNoYW5nZWQgfD0gcGVyZm9ybUNTRShkZmcpOwogICAgICAgICBpZiAoIWNoYW5nZWQpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGZnLnJlc2V0RXhpdFN0YXRlcygpOwogICAgICAgICBw
ZXJmb3JtRml4dXAoZGZnKTsKICAgICB9Ci0gICAgcGVyZm9ybUNTRShkZmcsIEZpeHBvaW50Q29u
dmVyZ2VkKTsKKyAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7Cisg
ICAgcGVyZm9ybUNTRShkZmcpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBk
YXRhTG9nKCJERkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBpbiAldSBpdGVyYXRp
b25zLlxuIiwgY250KTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMjY2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw5
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNh
c2UgR2V0QnlJZDogeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4g
QmVmb3JlRml4cG9pbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAg
ICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbm9kZTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGlj
dGlvbigpKSkKQEAgLTkwLDggKzkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCksIGZhbHNlKSwK
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCks
CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24o
KSk7ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobW9kZVN1cHBvcnRz
TGVuZ3RoKGFycmF5TW9kZSkKLSAgICAgICAgICAgICAgICAgICAgJiYgYXJyYXlQcm9maWxlLT5o
YXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1vZGVTdXBwb3J0
c0xlbmd0aChhcnJheU1vZGUpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUo
KSkgewogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihub2RlUHRyLT5jaGlsZDEoKSk7
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUgY2hlY2tTdHJ1Y3R1cmUoQ2hlY2tTdHJ1Y3R1cmUs
IG5vZGVQdHItPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJh
eVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlLnJlZigpOwpAQCAtMTEzLDE3
ICsxMTUsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9k
ZU11c3RHZW5lcmF0ZSk7CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlN
b2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBsZW5n
dGhOZWVkc1N0b3JhZ2UpOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlUHRyID0g
Jm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOworICAgICAgICAgICAgbm9kZVB0ci0+Y2hpbGRyZW4u
Y2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBu
b2RlLnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICByZWZpbmVBcnJheU1vZGUoCi0gICAg
ICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCksCi0gICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgLy8gUHJl
ZGljdGlvbnMgc2hvdWxkIG9ubHkgYmVjb21lIG1vcmUsIHJhdGhlciB0aGFuIGxlc3MsIHJlZmlu
ZWQuIEhlbmNlCi0gICAgICAgICAgICAvLyBpZiB3ZSB3ZXJlIGV2ZXIgYWJsZSB0byBDU0UgdGhl
IHN0b3JhZ2UgcG9pbnRlciBmb3IgdGhpcyBvcGVyYXRpb24sCi0gICAgICAgICAgICAvLyB0aGVu
IHdlIHNob3VsZCBhbHdheXMgY29udGludWUgdG8gYmUgYWJsZSB0byBkbyBzby4KICAgICAgICAg
ICAgIEFTU0VSVChjYW5DU0VTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC0xMzYsMzAgKzEzNywxOSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGNhbkNTRVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUo
KSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSkgewotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMygpXS5vcCgpID09IEdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2UpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobW9kZXNDb21wYXRp
YmxlRm9yU3RvcmFnZUxvYWQobV9ncmFwaFtub2RlLmNoaWxkMygpXS5hcnJheU1vZGUoKSwgbm9k
ZS5hcnJheU1vZGUoKSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgdGhlIG5vZGUgcmVmZXJlbmNlIGFmdGVy
IHdlIGRvIHRoZSBhcHBlbmQuCi0gICAgICAgICAgICAgICAgICAgIE5vZGUgZ2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UsIG5vZGUuY29kZU9yaWdpbiwgT3BJbmZvKG5vZGUuYXJyYXlNb2RlKCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigp
LmluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3Bl
cnR5U3RvcmFnZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBFZGdlKGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRl
eCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihnZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlSW5kZXgpOyAvLyBPbmNlIGJlY2F1c2UgaXQncyBNdXN0R2VuZXJhdGUuCi0g
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJ
bmRleCk7IC8vIEFuZCBhZ2FpbiBiZWNhdXNlIGl0J3MgcmVmZXJlbmNlZCBmcm9tIHRoZSBHZXRC
eVZhbC4KLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJ
bkJsb2NrLCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gU2VlIGFib3ZlLiBD
b250aW51ZWQgZml4dXAgb2YgdGhlIGdyYXBoIHNob3VsZCBub3QgcmVncmVzcyBvdXIgYWJpbGl0
eQotICAgICAgICAgICAgICAgIC8vIHRvIHNwZWN1bGF0ZS4KLSAgICAgICAgICAgICAgICBBU1NF
UlQoIW5vZGUuY2hpbGQzKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYmxlc3NBcnJh
eU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKKyAgICAgICAgICAg
IGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgMik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXlQb3A6IHsKKyAg
ICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgMSk7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewogICAgICAgICAg
ICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKICAg
ICAgICAgICAgICAgICAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKSB7CkBAIC0zMzAsMTEgKzMyMCwx
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDApOwogICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpOwogICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDIpOworCiAgICAgICAgICAgICBub2RlLnNldEFycmF5TW9kZSgKICAgICAgICAg
ICAgICAgICByZWZpbmVBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlN
b2RlKCksIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksIG1fZ3JhcGhbY2hpbGQyXS5wcmVk
aWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgMyk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHN3aXRjaCAobW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKSkgeworICAg
ICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChtb2RlRm9yUHV0KG5vZGVQdHItPmFycmF5TW9k
ZSgpKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgogICAgICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MTZBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJy
YXk6CkBAIC0zNjgsNiArMzY1LDU3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9CiAgICAgCisg
ICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJheSwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6
Ok1vZGUpID0gY2FuQ1NFU3RvcmFnZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtb2RlSXNTcGVj
aWZpYyhhcnJheU1vZGUpKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgucmVmKGFycmF5KTsK
KyAgICAgICAgTm9kZSBjaGVja0FycmF5KENoZWNrQXJyYXksIGNvZGVPcmlnaW4sIE9wSW5mbyhh
cnJheU1vZGUpLCBhcnJheSk7CisgICAgICAgIGNoZWNrQXJyYXkucmVmKCk7CisgICAgICAgIE5v
ZGVJbmRleCBjaGVja0FycmF5SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgbV9ncmFw
aC5hcHBlbmQoY2hlY2tBcnJheSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2lu
ZGV4SW5CbG9jaywgY2hlY2tBcnJheUluZGV4KTsKKworICAgICAgICBpZiAoIXN0b3JhZ2VDaGVj
ayhhcnJheU1vZGUpKQorICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgCisgICAg
ICAgIG1fZ3JhcGgucmVmKGFycmF5KTsKKyAgICAgICAgTm9kZSBnZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlKAorICAgICAgICAgICAgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdp
biwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKKyAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZS5yZWYoKTsKKyAgICAgICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2VJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChnZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5k
ZXhJbkJsb2NrLCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXgpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleDsKKyAgICB9CisgICAg
CisgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgdW5zaWduZWQgc3RvcmFn
ZUNoaWxkSWR4KQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4g
QmVmb3JlRml4cG9pbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAg
ICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChub2RlUHRyLT5hcnJheU1vZGUoKSA9PSBBcnJheTo6Rm9yY2VFeGl0KSB7Cisg
ICAgICAgICAgICBOb2RlIGZvcmNlRXhpdChGb3JjZU9TUkV4aXQsIG5vZGVQdHItPmNvZGVPcmln
aW4pOworICAgICAgICAgICAgZm9yY2VFeGl0LnJlZigpOworICAgICAgICAgICAgTm9kZUluZGV4
IGZvcmNlRXhpdEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICBtX2dyYXBoLmFw
cGVuZChmb3JjZUV4aXQpOworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5k
ZXhJbkJsb2NrLCBmb3JjZUV4aXRJbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmICghbW9kZUlzU3BlY2lmaWMobm9kZVB0ci0+YXJyYXlN
b2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIE5vZGVJ
bmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0ci0+
Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2Rl
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIG1fZ3JhcGguY2hp
bGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3Jh
Z2UpOworICAgIH0KKyAgICAKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKICAgICB7
CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2VkZ2VdOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwx
OCBAQCBzdGF0aWMgY29uc3QgY2hhciogZGZnT3BOYW1lc1tdID0gewogI3VuZGVmIFNUUklOR0la
RV9ERkdfT1BfRU5VTQogfTsKIAorR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwg
Y29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCisgICAgOiBtX2dsb2Jh
bERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1f
cHJvZmlsZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisgICAgLCBtX2hhc0FyZ3Vt
ZW50cyhmYWxzZSkKKyAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNv
ZGVJbmRleCkKKyAgICAsIG1fbXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQorICAg
ICwgbV9maXhwb2ludFN0YXRlKEJlZm9yZUZpeHBvaW50KQoreworICAgIEFTU0VSVChtX3Byb2Zp
bGVkQmxvY2spOworfQorCiBjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1lKE5vZGVUeXBlIG9wKQog
ewogICAgIHJldHVybiBkZmdPcE5hbWVzW29wXTsKQEAgLTE3OSw2ICsxOTEsOCBAQCB2b2lkIEdy
YXBoOjpkdW1wKGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kCiAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiLCAiKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBoYXNQcmludGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIGlmICghbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCisgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBkYXRhTG9nKCIlc0AldSVzIiwKICAg
ICAgICAgICAgICAgICAgICAgdXNlS2luZFRvU3RyaW5nKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdLnVzZUtpbmQoKSksCiAgICAgICAgICAgICAgICAgICAgIG1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdLmluZGV4KCksCkBAIC0zOTIsOCArNDA2LDEwIEBAIHZvaWQgR3JhcGg6OmR1bXAoKQog
ICAgICAgICBpZiAoX25vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBfY2hpbGRJZHggPSBf
bm9kZS5maXJzdENoaWxkKCk7ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICBfY2hp
bGRJZHggPCBfbm9kZS5maXJzdENoaWxkKCkgKyBfbm9kZS5udW1DaGlsZHJlbigpOyAgXAotICAg
ICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3ZhckFyZ0NoaWxkcmVu
W19jaGlsZElkeF0pOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICBfY2hpbGRJ
ZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92YXJBcmdDaGlsZHJl
bltfY2hpbGRJZHhdKTsgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9
IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDEoKSkgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUu
Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNDgzLDYgKzQ5
OSw4IEBAIHZvaWQgR3JhcGg6OmNvbGxlY3RHYXJiYWdlKCkKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgICAgICAgY2hp
bGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKICAgICAgICAg
ICAgICAgICAgKytjaGlsZElkeCkgeworICAgICAgICAgICAgICAgIGlmICghbV92YXJBcmdDaGls
ZHJlbltjaGlsZElkeF0pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBjaGlsZE5vZGVJbmRleCA9IG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdLmluZGV4KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhdChjaGlsZE5vZGVJbmRleCkucmVm
KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxNiArNzYsNyBAQCBzdHJ1
Y3QgUmVzb2x2ZUdsb2JhbERhdGEgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJlbWFpbiBp
biB0aGUgdmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIDogcHVibGljIFZlY3Rv
cjxOb2RlLCA2ND4gewogcHVibGljOgotICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwg
Y29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCi0gICAgICAgIDogbV9n
bG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQot
ICAgICAgICAsIG1fcHJvZmlsZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCi0gICAg
ICAgICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCi0gICAgICAgICwgbV9vc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICAsIG1fbXVzdEhhbmRsZVZhbHVl
cyhtdXN0SGFuZGxlVmFsdWVzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9j
ayk7Ci0gICAgfQorICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYsIENvZGVCbG9jayosIHVuc2lnbmVk
IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5k
bGVWYWx1ZXMpOwogICAgIAogICAgIHVzaW5nIFZlY3RvcjxOb2RlLCA2ND46Om9wZXJhdG9yW107
CiAgICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6YXQ7CkBAIC01ODUsOCArNTc2LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7CiAgICAg
ICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxk
cmVuKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspCi0gICAgICAgICAgICAgICAgdm90
ZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgYmFsbG90KTsKKyAgICAgICAgICAgICAgICAg
Y2hpbGRJZHgrKykgeworICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdKQorICAgICAgICAgICAgICAgICAgICB2b3RlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdLCBiYWxsb3QpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtNjA4LDggKzYwMSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2tbaW5kZXhJbkJsb2NrXTsKICAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElk
eCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9k
ZS5udW1DaGlsZHJlbigpOyArK2NoaWxkSWR4KQotICAgICAgICAgICAgICAgICAgICBjb21wYXJl
QW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBu
b2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSAr
IG5vZGUubnVtQ2hpbGRyZW4oKTsgKytjaGlsZElkeCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3
VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFub2Rl
LmNoaWxkMSgpKQpAQCAtNjg1LDYgKzY4MCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBtX3Bh
cmFtZXRlclNsb3RzOwogICAgIHVuc2lnbmVkIG1fb3NyRW50cnlCeXRlY29kZUluZGV4OwogICAg
IE9wZXJhbmRzPEpTVmFsdWU+IG1fbXVzdEhhbmRsZVZhbHVlczsKKyAgICAKKyAgICBPcHRpbWl6
YXRpb25GaXhwb2ludFN0YXRlIG1fZml4cG9pbnRTdGF0ZTsKIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJs
b2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTI2Njk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0Myw2ICs3
NDMsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNh
c2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAg
IGNhc2UgQ2hlY2tBcnJheToKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAgIGNhc2Ug
QXJyYXlQb3A6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc1NSwxMCArNzU4LDEzIEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFycmF5OjpNb2RlPihtX29wSW5mbyk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgc2V0QXJyYXlNb2RlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkK
KyAgICBib29sIHNldEFycmF5TW9kZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiAgICAgewogICAg
ICAgICBBU1NFUlQoaGFzQXJyYXlNb2RlKCkpOworICAgICAgICBpZiAodGhpcy0+YXJyYXlNb2Rl
KCkgPT0gYXJyYXlNb2RlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtX29w
SW5mbyA9IGFycmF5TW9kZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogICAg
IGJvb2wgaGFzVmlydHVhbFJlZ2lzdGVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw4IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRT
dG9yYWdlKSBcCiAgICAgbWFjcm8oUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFj
cm8oR2V0UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAotICAgIG1hY3JvKEdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0U3Rv
cmFnZSkgXAorICAgIG1hY3JvKENoZWNrQXJyYXksIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBt
YWNybyhHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAg
IG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQdXRCeU9mZnNl
dCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldEFycmF5TGVuZ3RoLCBOb2RlUmVz
dWx0SW50MzIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc1LDYgKzU3NSwxNCBAQCBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkq
IGFycmF5KQoreworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVj
KTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5wb3AoZXhlYykpOwor
fQorICAgICAgICAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhw
RXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKIHsK
ICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC02
MDMsMTQgKzYxMSw2IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QK
ICAgICByZXR1cm4gYXNSZWdFeHBPYmplY3QoYmFzZSktPnRlc3QoZXhlYywgaW5wdXQpOwogfQog
ICAgICAgICAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3Ao
RXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKLXsKLSAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShhcnJheS0+cG9wKGV4ZWMpKTsKLX0KLSAgICAgICAgCiB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTUs
MTMgKzk1LDYgQEAgYm9vbCBydW5QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgcmV0dXJuIHJ1bkFu
ZExvZyhwaGFzZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFBoYXNlVHlwZSwgdHlwZW5hbWUg
QXJndW1lbnRUeXBlMT4KLWJvb2wgcnVuUGhhc2UoR3JhcGgmIGdyYXBoLCBBcmd1bWVudFR5cGUx
IGFyZzEpCi17Ci0gICAgUGhhc2VUeXBlIHBoYXNlKGdyYXBoLCBhcmcxKTsKLSAgICByZXR1cm4g
cnVuQW5kTG9nKHBoYXNlKTsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxOCw3ICs2MTgsOCBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgotICAg
ICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6IHsKKyAgICAgICAgY2FzZSBQaGFudG9tQXJndW1l
bnRzOgorICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9k
ZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJ
dCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0
aGlzIHBoYXNlLgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03MDMsOCAr
NzA0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFy
QXJncykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RD
aGlsZCgpOwogICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsg
bm9kZS5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKQotICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICAgICAgIGNo
aWxkSWR4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFs
dWUpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCFu
b2RlLmNoaWxkMSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCShyZXZpc2lvbiAxMjY2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzczLDYgKzIzNzMsMTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBjb21w
aWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAg
ICAKKyAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAgICAgY2hlY2tBcnJheShub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICBzd2l0
Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKQEAgLTI0NzAsNiArMjQ3NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICBFZGdlIGNoaWxkMiA9IG1f
aml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVkZ2UgY2hpbGQzID0g
bV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAgRWRnZSBjaGlsZDQg
PSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwogICAgICAgICAKICAgICAgICAg
QXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKTsKICAg
ICAgICAgYm9vbCBhbHJlYWR5SGFuZGxlZCA9IGZhbHNlOwpAQCAtMjUxMyw4ICsyNTE5LDYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcg
YmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogCi0gICAgICAgIHNwZWN1bGF0ZUFycmF5KGFycmF5TW9kZSwgY2hpbGQxLCBi
YXNlUmVnKTsKLQogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgICAgICBjYXNlIEFy
cmF5OjpKU0FycmF5OgogICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsK
QEAgLTI1MzEsMTMgKzI1MzUsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIo
KTsKICAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWVUYWdSZWcsIGNo
aWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIGNoaWxkNCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7CiAKICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgewot
ICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KLSAgICAgICAgICAgICAg
ICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkp
LCBzdG9yYWdlUmVnKTsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBTdG9y
ZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFs
dWUudGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSkpOwpAQCAtMjU1NCwxMiArMjU1Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgICAgICBwcm9w
ZXJ0eS51c2UoKTsKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAgICAgc3RvcmFn
ZS51c2UoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBzdG9y
YWdlLgotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7Ci0gICAgICAgICAg
ICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VP
ZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCiAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSB3
cml0aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3IuCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CkBAIC0yNjg4LDYgKzI2ODYsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IEFycmF5UHVzaDogeworICAgICAgICBBU1NFUlQobW9kZUlzSlNBcnJheShub2RlLmFycmF5TW9k
ZSgpKSk7CisgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CkBA
IC0yNjk3LDE3ICsyNjk3LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIo
KTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigp
OwogICAgICAgICAKLSAgICAgICAgeworICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJF
bmFibGVkKCkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAg
ICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlVGFnR1BSLCBub2RlLmNoaWxkMigp
LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxl
bmd0aEdQUik7CiAgICAgICAgIH0KIAotICAgICAgICBzcGVjdWxhdGVBcnJheShBcnJheTo6SlNB
cnJheSwgbm9kZS5jaGlsZDEoKSwgYmFzZUdQUik7Ci0gICAgICAgIAotICAgICAgICBHUFJUZW1w
b3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdw
cigpOwogCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgpAQCAtMjcz
MCwxMCArMjcyNywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5UG9wOiB7CisgICAgICAgIEFTU0VSVCht
b2RlSXNKU0FycmF5KG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAgCiAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSB2YWx1ZVRhZyh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlUGF5bG9hZCh0
aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtMjc0Miw5ICsyNzQxLDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxl
bmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZUFycmF5KEFycmF5OjpKU0Fy
cmF5LCBub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9m
ZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xl
bmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTI2Njk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQwNiw2ICsyNDA2LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDaGVja0FycmF5OiB7
CisgICAgICAgIGNoZWNrQXJyYXkobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KIAogICAg
IGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CkBA
IC0yNDk3LDYgKzI1MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCAwKTsKICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpOwogICAgICAgICBFZGdlIGNoaWxkMyA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQo
bm9kZSwgMik7CisgICAgICAgIEVkZ2UgY2hpbGQ0ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCAzKTsKICAgICAgICAgCiAgICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IG1v
ZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSk7CiAgICAgICAgIGJvb2wgYWxyZWFkeUhhbmRsZWQg
PSBmYWxzZTsKQEAgLTI1MzgsMjcgKzI1NDQsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAg
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCi0gICAgICAgIHNw
ZWN1bGF0ZUFycmF5KGFycmF5TW9kZSwgY2hpbGQxLCBiYXNlUmVnKTsKLQogICAgICAgICBzd2l0
Y2ggKGFycmF5TW9kZSkgewogICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgogICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKIAogICAgICAgICAgICAgLy8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFsdWUgaW50
byByZWdpc3RlcnMsIGFsbG9jYXRlIGEgc2NyYXRjaCByZWdpc3Rlci4KICAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hS
ZWcgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICAgICAgd3Jp
dGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgIGlmIChIZWFwOjppc1dyaXRl
QmFycmllckVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOworICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIo
KSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgY2hpbGQ0KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKIAogICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbEFsaWFzKSB7Ci0gICAg
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwotICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJh
eTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAgICAgICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKQEAgLTI1NzUsMTEgKzI1ODAsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBiYXNl
LnVzZSgpOwogICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAgICAgICB2YWx1ZS51
c2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7CiAgICAgICAgIAotICAgICAgICAgICAg
Ly8gR2V0IHRoZSBhcnJheSBzdG9yYWdlLgotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzY3JhdGNoUmVnOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsK
LQogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNv
IGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKQEAgLTI3NDcsMjEgKzI3NDks
MjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBBcnJheVB1c2g6IHsKKyAgICAgICAgQVNTRVJUKG1vZGVJc0pTQXJy
YXkobm9kZS5hcnJheU1vZGUoKSkpOworICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdl
KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKICAgICAg
ICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3Rv
cmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVu
Z3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVl
R1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc3RvcmFn
ZUdQUiwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmll
ckVuYWJsZWQoKSkgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Cisg
ICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQyKCks
IFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKKyAgICAgICAgfQogCi0gICAgICAgIHNwZWN1bGF0ZUFycmF5KEFycmF5OjpKU0Fy
cmF5LCBub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOwogCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BS
KTsKICAgICAgICAgCiAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhz
LgpAQCAtMjc4NiwxOSArMjc5MSwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5UG9wOiB7CisgICAgICAg
IEFTU0VSVChtb2RlSXNKU0FycmF5KG5vZGUuYXJyYXlNb2RlKCkpKTsKKwogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgdmFsdWUodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKICAgICAgICAgCiAgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAg
ICAgIHNwZWN1bGF0ZUFycmF5KEFycmF5OjpKU0FycmF5LCBub2RlLmNoaWxkMSgpLCBiYXNlR1BS
KTsKLQotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAg
IAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NSwyMCArMjk1LDIzIEBAIGNvbnN0IFR5
cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUoKICAgICB9CiB9CiAKLWNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQXJyYXkoQXJyYXk6Ok1v
ZGUgYXJyYXlNb2RlLCBFZGdlIGVkZ2UsIEdQUlJlZyBiYXNlUmVnKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBub2RlKQogewotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yKiByZXN1bHQgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihhcnJheU1vZGUpOworICAgIEFT
U0VSVChtb2RlSXNTcGVjaWZpYyhub2RlLmFycmF5TW9kZSgpKSk7CiAgICAgCi0gICAgaWYgKG1v
ZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUoZWRnZSksIGFycmF5TW9kZSkpCi0gICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgCisg
ICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHJlc3VsdCA9IHR5cGVkQXJyYXlEZXNjcmlw
dG9yKG5vZGUuYXJyYXlNb2RlKCkpOworICAgIAorICAgIGlmIChtb2RlQWxyZWFkeUNoZWNrZWQo
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSkgeworICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAg
ICAgCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBleHBlY3RlZENsYXNzSW5mbyA9IDA7CiAgICAgCi0g
ICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZKU1N0cmlu
Zzo6c19pbmZvOwogICAgICAgICBicmVhazsKQEAgLTMyNSw3ICszMjgsOSBAQCBjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBBcnJheTo6QXJndW1l
bnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6OnNfaW5mbzsKQEAg
LTM1Niw3ICszNjEsNyBAQCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVK
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1
cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKGV4cGVjdGVkQ2xhc3NJbmZvKSkpOwogICAgIAotICAgIHJldHVybiByZXN1bHQ7
CisgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogfQogCiBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTdG9yYWdlKE5vZGVJbmRleCBub2RlSW5kZXgpCkBAIC0zOTMsOCArMzk4LDEwIEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUkKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnVzZUNoaWxkcmVuKE5vZGUmIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUuZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2Rl
LmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hp
bGRyZW4oKTsgY2hpbGRJZHgrKykKLSAgICAgICAgICAgIHVzZShtX2ppdC5ncmFwaCgpLm1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5u
dW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CisgICAgICAgICAgICBpZiAoISFtX2ppdC5ncmFw
aCgpLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQorICAgICAgICAgICAgICAgIHVzZShtX2pp
dC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgfQogICAgIH0g
ZWxzZSB7CiAgICAgICAgIEVkZ2UgY2hpbGQxID0gbm9kZS5jaGlsZDEoKTsKICAgICAgICAgaWYg
KCFjaGlsZDEpIHsKQEAgLTIxNDYsNiArMjE1Myw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uSW4KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
R1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRT
aXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcg
cm91bmRpbmcpCiB7CisgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFw
aCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisgICAgCiAgICAgRWRnZSB2YWx1ZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMik7CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlOwpAQCAtMjIxMywx
MCArMjIyMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAg
ICB9CiAgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZUdQUiwgdmFsdWVHUFIgIT0gcHJvcGVydHkpOwog
ICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBiYXNlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0
aGlzKTsKLSAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgQVNTRVJU
KHZhbHVlR1BSICE9IHN0b3JhZ2VSZWcpOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVn
KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKICAgICBpZiAobm9kZS5v
cCgpID09IFB1dEJ5VmFsKQogICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSk7CkBAIC0yMjc4LDYgKzIyODUs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0
eSwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQogeworICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAg
R1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgIAogICAgIEVkZ2UgYmFzZVVz
ZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgRWRnZSB2YWx1ZVVz
ZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgCkBAIC0yMjg3LDEw
ICsyMjk3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRgogICAg
IAogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCi0gICAgR1BSVGVtcG9yYXJ5
IHN0b3JhZ2UodGhpcyk7Ci0gICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwot
ICAgIAotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVz
Y3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBvdXRPZkJvdW5kczsKICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsKQogICAg
ICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9y
Lm1fbGVuZ3RoT2Zmc2V0KSk7CkBAIC0zMTA5LDggKzMxMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7
CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIAotICAgIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0KLSAgICAgICAgc3BlY3VsYXRlQXJy
YXkobm9kZS5hcnJheU1vZGUoKSwgbm9kZS5jaGlsZDEoKSwgYmFzZVJlZyk7CisgICAgY29uc3Qg
VHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihu
b2RlLmFycmF5TW9kZSgpKTsKICAgICAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsK
ICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CkBAIC0zMjUyLDMzICszMjU3LDQwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudHMKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEFycmF5TGVuZ3RoKE5vZGUmIG5vZGUpCiB7Ci0gICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwotICAgICAgICAKLSAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgCi0gICAgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPQotICAgICAgICBzcGVjdWxhdGVBcnJheShu
b2RlLmFycmF5TW9kZSgpLCBub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKKyAgICBjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUu
YXJyYXlNb2RlKCkpOwogCiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAgICAgY2Fz
ZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0g
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVzdWx0R1BSKTsKKyAgICBjYXNlIEFycmF5OjpKU0FycmF5
T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsK
KyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9sZW5ndGgpKSwgcmVzdWx0UmVnKTsKICAgICAgICAgICAgIAotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgfQorICAgIGNhc2Ug
QXJyYXk6OlN0cmluZzogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2Up
OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3Vs
dEdQUik7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICB9CisgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOiB7CiAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5n
dGgobm9kZSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgorICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAg
ICAgICAgIEFTU0VSVChkZXNjcmlwdG9yKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIGRlc2NyaXB0b3ItPm1fbGVuZ3RoT2Zmc2V0KSwgcmVz
dWx0R1BSKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjE5Nyw3ICsyMTk3LDcgQEAgcHVibGlj
OgogICAgIAogICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVzY3Jp
cHRvcihBcnJheTo6TW9kZSk7CiAgICAgCi0gICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Iq
IHNwZWN1bGF0ZUFycmF5KEFycmF5OjpNb2RlLCBFZGdlIGJhc2VFZGdlLCBHUFJSZWcgYmFzZVJl
Zyk7CisgICAgdm9pZCBjaGVja0FycmF5KE5vZGUmKTsKICAgICAKICAgICB0ZW1wbGF0ZTxib29s
IHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwg
RGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJ
KHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0
dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0
aDoKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CisgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRv
bToKICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNlcy4KICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160611</attachid>
            <date>2012-08-26 12:15:38 -0700</date>
            <delta_ts>2012-08-26 12:48:39 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cseindexing_patch_5.diff</filename>
            <type>text/plain</type>
            <size>76978</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2NzA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAxMi0wOC0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFycmF5IHR5cGUgY2hlY2tzIGFuZCBzdG9yYWdlIGFjY2Vzc2VzIHNob3VsZCBiZSB1bmlmb3Jt
bHkgcmVwcmVzZW50ZWQgYW5kIGF2YWlsYWJsZSB0byBDU0UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1MDEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB1bmlmb3JtbHkgYnJlYWtzIHVwIGFsbCBh
cnJheSBhY2Nlc3NlcyBpbnRvIHVwIHRvIHRocmVlIHBhcnRzOgorICAgICAgICAKKyAgICAgICAg
MSkgVGhlIHR5cGUgY2hlY2ssIHVzaW5nIGEgbmV3bHkgaW50cm9kdWNlZCBDaGVja0FycmF5IG5v
ZGUsIGluIGFkZGl0aW9uIHRvIHBvc3NpYmx5CisgICAgICAgICAgIGEgQ2hlY2tTdHJ1Y3R1cmUg
bm9kZS4gV2Ugd2VyZSBhbHJlYWR5IGluc2VydGluZyB0aGUgQ2hlY2tTdHJ1Y3R1cmUgcHJpb3Ig
dG8gdGhpcworICAgICAgICAgICBwYXRjaC4gVGhlIENoZWNrQXJyYXkgbm9kZSB3aWxsIGJlIGF1
dG9tYXRpY2FsbHkgZWxpbWluYXRlZCBpZiB0aGUgdGhpbmcgaXQgd2FzCisgICAgICAgICAgIGNo
ZWNraW5nIGZvciBoYWQgYWxyZWFkeSBiZWVuIGNoZWNrZWQgZm9yLCBlaXRoZXIgaW50ZW50aW9u
YWxseSAoYSBDaGVja1N0cnVjdHVyZQorICAgICAgICAgICBpbnNlcnRlZCBiYXNlZCBvbiB0aGUg
YXJyYXkgcHJvZmlsZSBvZiB0aGlzIGFjY2Vzcykgb3IgYWNjaWRlbnRhbGx5IChzb21lIGNoZWNr
cywKKyAgICAgICAgICAgdHlwaWNhbGx5IGEgQ2hlY2tTdHJ1Y3R1cmUsIGluc2VydGVkIGZvciBz
b21lIHVucmVsYXRlZCBvcGVyYXRpb25zKS4gVGhlCisgICAgICAgICAgIENoZWNrQXJyYXkgbm9k
ZSBtYXkgbm90IGJlIGluc2VydGVkIGlmIHRoZSBhcnJheSB0eXBlIGlzIG5vbi1zcGVjaWZpYyAo
R2VuZXJpYyBvcgorICAgICAgICAgICBGb3JjZUV4aXQpLgorICAgICAgICAKKyAgICAgICAgMikg
VGhlIHN0b3JhZ2UgbG9hZCB1c2luZyBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLiBQcmV2aW91
c2x5LCB0aGlzIG9ubHkgd29ya2VkIGZvcgorICAgICAgICAgICBHZXRCeVZhbC4gTm93IGl0IHdv
cmtzIGZvciBhbGwgYXJyYXkgYWNjZXNzZXMuIFRoZSBzdG9yYWdlIGxvYWQgbWF5IG5vdCBiZQor
ICAgICAgICAgICBpbnNlcnRlZCBpZiB0aGUgbW9kZSBvZiBhcnJheSBhY2Nlc3MgZG9lcyBub3Qg
cGVybWl0IENTRSBvZiBzdG9yYWdlIGxvYWRzIChsaWtlCisgICAgICAgICAgIG5vbi1zcGVjaWZp
YyBtb2RlcyBvciBBcmd1bWVudHMpLgorICAgICAgICAKKyAgICAgICAgMykgVGhlIGFjY2VzcyBp
dHNlbGY6IG9uZSBvZiBHZXRCeVZhbCwgUHV0QnlWYWwsIFB1dEJ5VmFsQWxpYXMsIEFycmF5UHVz
aCwgQXJyYXlQb3AsCisgICAgICAgICAgIEdldEFycmF5TGVuZ3RoLCBTdHJpbmdDaGFyQXQsIG9y
IFN0cmluZ0NoYXJDb2RlQXQuCisgICAgICAgIAorICAgICAgICBUaGlzIG1lYW5zIHRoYXQgdGhl
IHR5cGUgY2hlY2sgY2FuIGJlIHN1YmplY3RlZCB0byBDU0UgZXZlbiBpZiB0aGUgQ0ZBIGlzbid0
IHNtYXJ0CisgICAgICAgIGVub3VnaCB0byByZWFzb24gYWJvdXQgaXQgKHlldCEpLiBJdCBhbHNv
IG1lYW5zIHRoYXQgdGhlIHN0b3JhZ2UgbG9hZCBjYW4gYWx3YXlzIGJlCisgICAgICAgIHN1Ympl
Y3RlZCB0byBDU0U7IHByZXZpb3VzbHkgQ1NFIG9uIHN0b3JhZ2UgbG9hZCBvbmx5IHdvcmtlZCBm
b3IgYXJyYXkgbG9hZHMgYW5kIG5vdAorICAgICAgICBvdGhlciBmb3JtcyBvZiBhY2Nlc3MuIEZp
bmFsbHksIGl0IHJlbW92ZXMgdGhlIGJpemFycmUgYmVoYXZpb3IgdGhhdAorICAgICAgICBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlIHByZXZpb3VzbHkgaGFkOiBwcmV2aW91c2x5LCBpdCB3YXMg
cmVzcG9uc2libGUgZm9yIHRoZSB0eXBlCisgICAgICAgIGNoZWNrIGluIHNvbWUgY2FzZXMsIGJ1
dCBub3Qgb3RoZXJzOyB0aGlzIG1hZGUgcmVhc29uaW5nIGFib3V0IHRoZSBDRkEgcmVhbGx5Cisg
ICAgICAgIGNvbmZ1c2luZy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gZGlz
YWJsZXMgbGF0ZSByZWZpbmVtZW50IG9mIGFycmF5IG1vZGUsIHNpbmNlIEkgZGVjaWRlZCB0aGF0
CisgICAgICAgIHN1cHBvcnRpbmcgdGhhdCBmZWF0dXJlIGlzIGJvdGggY29uZnVzaW5nIGFuZCBs
aWtlbHkgdW5wcm9maXRhYmxlLiBUaGUgYXJyYXkgbW9kZXMgYXJlCisgICAgICAgIG5vdyBsb2Nr
ZWQgaW4gaW4gdGhlIGZpcnN0IGZpeHVwIHJ1biBhZnRlciBwcmVkaWN0aW9uIHByb3BhZ2F0aW9u
LiBPZiBjb3Vyc2UsCisgICAgICAgIHJlZmluZW1lbnRzIGZyb20gR2VuZXJpYyB0byBzb21ldGhp
bmcgZWxzZSB3b3VsZCBub3QgaGF2ZSBiZWVuIGEgcHJvYmxlbTsgd2UgY291bGQKKyAgICAgICAg
cmVlbmFibGUgdGhvc2UgaWYgd2UgdGhvdWdodCB3ZSByZWFsbHkgbmVlZGVkIHRvLgorCisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmZyb21TdHJ1Y3R1cmUpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpyZWZpbmVBcnJheU1vZGUpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJheSk6CisgICAgICAg
IChKU0M6OkRGRzo6bGVuZ3RoTmVlZHNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjptb2Rl
SXNTcGVjaWZpYyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmdldEFycmF5TW9kZSk6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9kZUFuZEVtaXRDaGVja3Mp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAg
KiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9ja3MpOgorICAgICAgICAqIGRmZy9ERkdD
U0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OkNTRVBoYXNlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbik6Cisg
ICAgICAgIChDU0VQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrQXJy
YXlFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNTRSk6Cisg
ICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpjaGVja0FycmF5KToKKyAgICAgICAgKEZpeHVwUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToKKyAgICAgICAgKERGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpjb2xsZWN0R2FyYmFnZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
IChHcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZvdGUpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpzdWJzdGl0dXRlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6c2V0QXJyYXlNb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdQaGFzZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlOjptZXJnZURlZmF1bHRGbGFncyk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hl
Y2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnVzZUNoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorCiAyMDEy
LTA4LTI1ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5
IGEgbGl0dGxlIGhhcmRlciB0byBmaXggdGhlIExpbnV4IGJ1aWxkLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjY2
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04ODcsMTIgKzg4NywxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTAwLDQyICs4
OTgsMzQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CiAgICAgICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcgb2YgdGhlIG91dC1vZi1i
b3VuZHMKICAgICAgICAgICAgIC8vIGNhc2UuCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1h
a2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjSW50OEFy
cmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMkFycmF5KTsKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjVWludDhDbGFtcGVkQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNVaW50MTZBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQz
MkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAg
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwpAQCAtOTQz
LDEyICs5MzMsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Zsb2F0MzJBcnJheSk7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjRmxvYXQ2NEFycmF5KTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC05NTksNyArOTQ3LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKTsKICAgICAgICAgc3dpdGNoIChtb2RlRm9yUHV0KG5vZGUuYXJyYXlNb2Rl
KCkpKSB7CkBAIC05NzAsMjAgKzk1NywxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZp
bHRlcihTcGVjQXJndW1lbnRzKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4
QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwpAQCAtOTkxLDcg
Kzk3NCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2No
aWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTk5OSw3ICs5ODEsNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjSW50MzJBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJ
bnQzMik7CkBAIC0xMDA3LDcgKzk4OCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNO
dW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OEFycmF5KTsK
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTEwMTUsNyAr
OTk1LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNVaW50OENsYW1wZWRBcnJheSk7CiAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBp
ZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CkBAIC0xMDIzLDcgKzEwMDIs
NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQxKS5maWx0ZXIoU3BlY1VpbnQxNkFycmF5KTsKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxk
M10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTEwMzEsNyArMTAwOSw2IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjVWludDMyQXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihT
cGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
SW50MzIpOwpAQCAtMTAzOSwxMiArMTAxNiwxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihT
cGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9hdDMy
QXJyYXkpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwog
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA1Nywx
MyArMTAzMiwxMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgICAgICAKICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY051bWJlcik7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
Q2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCkBAIC0xMzQ3LDgwICsxMzIwLDggQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUo
KSkgewotICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpG
b3JjZUV4aXQ6Ci0gICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6U3Ry
aW5nOgotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1N0cmluZ1NwZWN1bGF0aW9uKGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpKU0FycmF5OgotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwotICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIG5vZGUu
c2V0Q2FuRXhpdCghaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0ludDhBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToK
LSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNJbnQxNkFycmF5U3BlY3VsYXRpb24oZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQxNkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0ludDMy
QXJyYXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyQXJyYXkpOwotICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoIWlzVWludDhBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjVWludDhBcnJheSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFt
cGVkQXJyYXk6Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzVWludDhDbGFtcGVkQXJy
YXlTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1VpbnQ4Q2xhbXBlZEFycmF5KTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0ludDMyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjVWludDE2QXJyYXkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQzMkFycmF5OgotICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQzMkFycmF5U3Bl
Y3VsYXRpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNVaW50MzJBcnJheSk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KCFpc0Zsb2F0MzJBcnJheVNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
RmxvYXQzMkFycmF5KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0lu
dDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJy
YXk6Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmxvYXQ2NEFycmF5U3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNGbG9hdDY0QXJyYXkpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgaXQncyB0
cnVlIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgSlNBcnJheSwgc28gaXQncyBnb29kIGVub3VnaC4K
KyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CkBAIC0xNDkyLDggKzEzOTMsMTMgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyAoYWxtb3N0KSBhbHdheXMgZm9s
bG93ZWQgYnkgR2V0QnlWYWwsIHdoaWNoIGRvZXMgZXhpdC4gU28gbm8gcG9pbnQgaW4gdHJ5aW5n
IHRvIGJlIG1vcmUgcHJlY2lzZS4KKyAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAgICAgaWYg
KG1vZGVBbHJlYWR5Q2hlY2tlZChmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9k
ZSgpKSkgeworICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xs
b3dlZCBieSBvcGVyYXRpb25zIChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0
aGVyZSBpcyBubyBwb2ludCBpbiB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCiAgICAgICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsK
QEAgLTE1MDQsNiArMTQxMCw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0
aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNJbnQ4QXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTM1LDYg
KzE0NDQsMTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlOiB7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICAvLyBTdHJpbmdzIGFyZSB3ZWlyZCAtIHdl
IG1heSBzcGVjIGZhaWwgaWYgdGhlIHN0cmluZyB3YXMgYSByb3BlLiBUaGF0IGlzIG9mIGNvdXJz
ZQorICAgICAgICAgICAgLy8gc3R1cGlkLCBhbmQgd2Ugc2hvdWxkIGZpeCB0aGF0LCBidXQgZm9y
IG5vdyBsZXQncyBhdCBsZWFzdCBiZSBob25lc3QgYWJvdXQgaXQuCisgICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAg
YnJlYWs7IAogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDYgKzMxMiw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKICAgICAgICAg
ICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAg
ICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAgICAgICAg
ICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
Y2FyZSBhYm91dCB0aGVzZSBiZWNhdXNlIGlmIHdlIGdldCB1c2VzIG9mIHRoZSByZWxldmFudAog
ICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZSB0aGVuIHdlIGNhbiBzYWZlbHkgZ2V0IHJp
ZCBvZiB0aGVzZSwgdG9vLiBUaGlzIG9mIGNvdXJzZQogICAgICAgICAgICAgICAgICAgICAvLyBy
ZWxpZXMgb24gdGhlcmUgbm90IGJlaW5nIGFueSBpbmZvcm1hdGlvbiB0cmFuc2ZlcnJlZCBieSB0
aGUgQ0ZBCkBAIC00NzYsNyArNDc3LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1
cmU6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoK
LSAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDogeworICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50OgorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBjYW4ganVzdCBnZXQgcmlkIG9mIHRoaXMgbm9kZSwgaWYgaXQgcmVmZXJl
bmNlcyBhIHBoYW50b20gYXJndW1lbnQuCiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1Rv
T3B0aW1pemUobV9ncmFwaFtub2RlLmNoaWxkMSgpXSkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5j
cHAJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJy
YXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTEgQEAgQXJyYXk6Ok1vZGUg
ZnJvbU9ic2VydmVkKEFycmF5TW9kZXMgbW9kZQogICAgIH0KIH0KIAorQXJyYXk6Ok1vZGUgZnJv
bVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBtYWtlU2FmZSkKK3sKKyAgICBy
ZXR1cm4gZnJvbU9ic2VydmVkKGFycmF5TW9kZUZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKSwgbWFr
ZVNhZmUpOworfQorCiBBcnJheTo6TW9kZSByZWZpbmVBcnJheU1vZGUoQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBpbmRleCkKIHsKICAg
ICBpZiAoIWJhc2UgfHwgIWluZGV4KSB7CkBAIC02NCwxNyArNjksOCBAQCBBcnJheTo6TW9kZSBy
ZWZpbmVBcnJheU1vZGUoQXJyYXk6Ok1vZGUgCiAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24o
aW5kZXgpIHx8ICFpc0NlbGxTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAgcmV0dXJuIEFycmF5
OjpHZW5lcmljOwogICAgIAotICAgIC8vIFBhc3MgdGhyb3VnaCBhbnkgYXJyYXkgbW9kZXMgdGhh
dCB3b3VsZCBoYXZlIGJlZW4gZGVjaWRlZCBieSB0aGUgYXJyYXkgcHJvZmlsZSwgc2luY2UKLSAg
ICAvLyB0aGUgcHJlZGljdGlvbnMgb2YgdGhlIGlucHV0cyB3aWxsIG5vdCB0ZWxsIHVzIGFueXRo
aW5nIHVzZWZ1bCB0aGF0IHdlIGRpZG4ndCBhbHJlYWR5Ci0gICAgLy8gZ2V0IGZyb20gdGhlIGFy
cmF5IHByb2ZpbGUuCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpG
b3JjZUV4aXQ6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5T3V0T2ZCb3VuZHM6CisgICAgaWYgKGFycmF5TW9kZSAhPSBBcnJheTo6VW5kZWNpZGVkKQog
ICAgICAgICByZXR1cm4gYXJyYXlNb2RlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KICAgICAKICAgICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAg
cmV0dXJuIEFycmF5OjpTdHJpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmgJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEyICs2MywyNSBAQCBlbnVt
IE1vZGUgewogCiBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9v
bCBtYWtlU2FmZSk7CiAKK0FycmF5OjpNb2RlIGZyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiwgYm9v
bCBtYWtlU2FmZSk7CisKIEFycmF5OjpNb2RlIHJlZmluZUFycmF5TW9kZShBcnJheTo6TW9kZSwg
U3BlY3VsYXRlZFR5cGUgYmFzZSwgU3BlY3VsYXRlZFR5cGUgaW5kZXgpOwogCiBib29sIG1vZGVB
bHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiwgQXJyYXk6Ok1vZGUpOwogCiBjb25zdCBjaGFy
KiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUpOwogCitpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5
KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRz
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCiBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFy
cmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewpAQCAtODIsNiArOTUsMTEgQEAg
aW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcgogICAgIH0KIH0KIAoraW5s
aW5lIGJvb2wgbGVuZ3RoTmVlZHNTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAg
ICByZXR1cm4gbW9kZUlzSlNBcnJheShhcnJheU1vZGUpOworfQorCiBpbmxpbmUgQXJyYXk6Ok1v
ZGUgbW9kZUZvclB1dChBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJh
eU1vZGUpIHsKQEAgLTExNSw3ICsxMzMsNyBAQCBpbmxpbmUgYm9vbCBtb2Rlc0NvbXBhdGlibGVG
b3JTdG9yYWdlTG9hCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxpbmUgYm9vbCBtb2RlU3Vw
cG9ydHNMZW5ndGgoQXJyYXk6Ok1vZGUgbW9kZSkKK2lubGluZSBib29sIG1vZGVJc1NwZWNpZmlj
KEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBBcnJh
eTo6VW5kZWNpZGVkOgpAQCAtMTI3LDYgKzE0NSwxMSBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9y
dHNMZW5ndGgoQXJyYXk6Ok1vCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNM
ZW5ndGgoQXJyYXk6Ok1vZGUgbW9kZSkKK3sKKyAgICByZXR1cm4gbW9kZUlzU3BlY2lmaWMobW9k
ZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBA
IHB1YmxpYzoKICAgICAgICAgLCBtX2lubGluZVN0YWNrVG9wKDApCiAgICAgICAgICwgbV9oYXZl
QnVpbHRPcGVyYW5kTWFwcyhmYWxzZSkKICAgICAgICAgLCBtX2VtcHR5SlNWYWx1ZUluZGV4KFVJ
TlRfTUFYKQorICAgICAgICAsIG1fY3VycmVudEluc3RydWN0aW9uKDApCiAgICAgewogICAgICAg
ICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgCkBAIC04MTgsOSArODE5LDE0IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBt
X2N1cnJlbnRQcm9maWxpbmdJbmRleCk7CiAgICAgfQogICAgIAotICAgIEFycmF5OjpNb2RlIGdl
dEFycmF5TW9kZVdpdGhvdXRPU1JFeGl0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IE5vZGVJbmRleCBiYXNlKQorICAgIEFycmF5OjpNb2RlIGdldEFycmF5TW9kZShBcnJheVByb2Zp
bGUqIHByb2ZpbGUpCisgICAgeworICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24oKTsKKyAgICAgICAgcmV0dXJuIGZyb21PYnNlcnZlZChwcm9maWxlLT5vYnNlcnZlZEFy
cmF5TW9kZXMoKSwgZmFsc2UpOworICAgIH0KKyAgICAKKyAgICBBcnJheTo6TW9kZSBnZXRBcnJh
eU1vZGVBbmRFbWl0Q2hlY2tzKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgTm9kZUluZGV4IGJhc2Up
CiAgICAgewotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CiAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbigpOwogICAgICAgICBpZiAocHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChwcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIGJhc2UpOwpAQCAt
ODM4LDE2ICs4NDQsNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZnJvbU9ic2VydmVkKHBy
b2ZpbGUtPm9ic2VydmVkQXJyYXlNb2RlcygpLCBtYWtlU2FmZSk7CiAgICAgfQogICAgIAotICAg
IEFycmF5OjpNb2RlIGdldEFycmF5TW9kZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBOb2RlSW5kZXggYmFzZSkKLSAgICB7Ci0gICAgICAgIEFycmF5OjpNb2RlIHJlc3VsdCA9IGdl
dEFycmF5TW9kZVdpdGhvdXRPU1JFeGl0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFzZSk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAocmVzdWx0ID09IEFycmF5OjpGb3JjZUV4aXQpCi0gICAgICAgICAg
ICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLQogICAgIE5vZGVJbmRleCBtYWtlU2FmZShOb2RlSW5kZXggbm9kZUluZGV4
KQogICAgIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTEx
NTAsNiArMTE0Niw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gQ2FjaGUgb2YgY29kZSBibG9j
a3MgdGhhdCB3ZSd2ZSBnZW5lcmF0ZWQgYnl0ZWNvZGUgZm9yLgogICAgIEJ5dGVDb2RlQ2FjaGU8
Y2FuSW5saW5lRnVuY3Rpb25Gb3I+IG1fY29kZUJsb2NrQ2FjaGU7CisgICAgCisgICAgSW5zdHJ1
Y3Rpb24qIG1fY3VycmVudEluc3RydWN0aW9uOwogfTsKIAogI2RlZmluZSBORVhUX09QQ09ERShu
YW1lKSBcCkBAIC0xNTUzLDcgKzE1NTEsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW50cmluc2ljKGJvbwogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0g
MikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRl
eCBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKDApLCBPcEluZm8ocHJl
ZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0
KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKKyAgICAgICAgQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1fY3VycmVudEluc3RydWN0aW9uWzVdLnUu
YXJyYXlQcm9maWxlKTsKKyAgICAgICAgaWYgKCFtb2RlSXNKU0FycmF5KGFycmF5TW9kZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIE5vZGVJbmRleCBhcnJheVB1c2ggPSBh
ZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9u
KSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwogICAgICAgICBpZiAodXNlc1Jlc3Vs
dCkKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhcnJheVB1c2gpOwogICAgICAgICAK
QEAgLTE1NjQsNyArMTU2NSwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWMoYm9vCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAxKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IGFycmF5
UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiks
IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7CisgICAgICAgIEFy
cmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJbnN0cnVjdGlvbls1
XS51LmFycmF5UHJvZmlsZSk7CisgICAgICAgIGlmICghbW9kZUlzSlNBcnJheShhcnJheU1vZGUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBOb2RlSW5kZXggYXJyYXlQb3Ag
PSBhZGRUb0dyYXBoKEFycmF5UG9wLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rp
b24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOwogICAgICAg
ICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhcnJheVBv
cCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc5Miw2ICsxNzk2LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAKICAgICAgICAgLy8gU3dp
dGNoIG9uIHRoZSBjdXJyZW50IGJ5dGVjb2RlIG9wY29kZS4KICAgICAgICAgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2luICsgbV9jdXJyZW50SW5kZXg7
CisgICAgICAgIG1fY3VycmVudEluc3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uOyAvLyBT
b21lIG1ldGhvZHMgd2FudCB0byB1c2UgdGhpcywgYW5kIHdlJ2QgcmF0aGVyIG5vdCB0aHJlYWQg
aXQgdGhyb3VnaCBjYWxscy4KICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7CiAgICAgICAgIHN3
aXRjaCAob3Bjb2RlSUQpIHsKIApAQCAtMjE3Nyw3ICsyMTgyLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9k
ZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoY3VycmVudEluc3Ry
dWN0aW9uLCBiYXNlKTsKKyAgICAgICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFy
cmF5TW9kZUFuZEVtaXRDaGVja3MoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
LCBiYXNlKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9
IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJlZGljdGlv
biksIGJhc2UsIHByb3BlcnR5KTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCBnZXRCeVZhbCk7CkBAIC0yMTg4LDcgKzIxOTMsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bDogewogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdl
dEFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhc2UpOworICAgICAgICAgICAgQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUsIGJhc2UpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCk7CkBAIC0yMTk2LDYgKzIyMDEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsK
ICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKICAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKHZhbHVlKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKE5vTm9kZSk7IC8v
IExlYXZlIHJvb20gZm9yIHByb3BlcnR5IHN0b3JhZ2UuCiAgICAgICAgICAgICBhZGRUb0dyYXBo
KE5vZGU6OlZhckFyZywgUHV0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8oMCkpOwog
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfdmFsKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU5LDggKzY1OSwx
MCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFz
VmFyQXJncykgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0g
bm9kZS5maXJzdENoaWxkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBu
b2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICArK2NoaWxkSWR4KQotICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVH
ZXRMb2NhbChmaXJzdEJsb2NrLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBj
aGFuZ2VSZWYpOworICAgICAgICAgICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghIW1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJz
dEJsb2NrLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBjaGFuZ2VSZWYpOwor
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghIW5vZGUu
Y2hpbGQxKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJz
dEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBjaGFuZ2VSZWYpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1
LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBDU0VQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CiBwdWJsaWM6Ci0gICAgQ1NFUGhhc2UoR3JhcGgmIGdyYXBoLCBPcHRp
bWl6YXRpb25GaXhwb2ludFN0YXRlIGZpeHBvaW50U3RhdGUpCisgICAgQ1NFUGhhc2UoR3JhcGgm
IGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAiY29tbW9uIHN1YmV4cHJlc3Npb24gZWxp
bWluYXRpb24iKQotICAgICAgICAsIG1fZml4cG9pbnRTdGF0ZShmaXhwb2ludFN0YXRlKQogICAg
IHsKICAgICAgICAgLy8gUmVwbGFjZW1lbnRzIGFyZSB1c2VkIHRvIGltcGxlbWVudCBsb2NhbCBj
b21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbi4KICAgICAgICAgbV9yZXBsYWNlbWVudHMu
cmVzaXplKG1fZ3JhcGguc2l6ZSgpKTsKQEAgLTMyNyw3ICszMjYsNyBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBjaGVja1N0cnVjdHVyZUxvYWRF
bGltaW5hdGlvbihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgTm9kZUluZGV4IGNo
aWxkMSkKKyAgICBib29sIGNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24oY29uc3QgU3RydWN0dXJl
U2V0JiBzdHJ1Y3R1cmVTZXQsIE5vZGVJbmRleCBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewogICAgICAgICAgICAgTm9kZUlu
ZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwpAQCAtNjI0LDggKzYyMywzNyBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQorICAgIAor
ICAgIGJvb2wgY2hlY2tBcnJheUVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5OjpN
b2RlIGFycmF5TW9kZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJ
bkJsb2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+YXQoaSk7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKSAKKyAgICAgICAg
ICAgICAgICBicmVhazsKIAotICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
TG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIGJvb2wgaGFzSW50ZWdlckluZGV4UHJl
ZGljdGlvbikKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0
OgorICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgLy8gQ2hh
bmdpbmcgdGhlIHN0cnVjdHVyZSBvciBwdXR0aW5nIHRvIHRoZSBzdG9yYWdlIGNhbm5vdAorICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyLgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBD
aGVja0FycmF5OgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAm
JiBub2RlLmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29y
bGQoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9h
ZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5OjpNb2RlIGFycmF5TW9kZSkKICAg
ICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAg
ICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CkBAIC02
MzUsOSArNjYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W2luZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBj
YXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBiYXNlUHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlv
bigpOwotICAgICAgICAgICAgICAgIGJvb2wgbm9kZUhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24g
PSAhKCEoYmFzZVByZWRpY3Rpb24gJiBTcGVjSW50MzIpICYmIGJhc2VQcmVkaWN0aW9uKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgaGFzSW50ZWdlcklu
ZGV4UHJlZGljdGlvbiA9PSBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbikKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5hcnJheU1vZGUoKSA9
PSBhcnJheU1vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTk4OCw3ICsxMDE0LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9
PSB2YXJpYWJsZUFjY2Vzc0RhdGEpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBi
ZSBhYmxlIHRvIHJlbW92ZSBTZXRMb2NhbHMgdGhhdCBjYW4gZXhpdDsgd2UganVzdCBuZWVkCiAg
ICAgICAgICAgICAvLyB0byByZXBsYWNlIHRoZW0gd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNoZWNr
cy4KLSAgICAgICAgICAgIGlmIChtX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJn
ZWQpIHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2lu
dE5vdENvbnZlcmdlZCkgewogICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gYmUgY29uc2VydmF0
aXZlIGF0IHRoaXMgdGltZTsgaWYgdGhlIFNldExvY2FsIGhhcyBhbnkgY2hhbmNlIG9mIHBlcmZv
cm1pbmcKICAgICAgICAgICAgICAgICAvLyBhbnkgc3BlY3VsYXRpb25zIHRoZW4gd2UgY2Fubm90
IGRvIGFueXRoaW5nLgogICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlz
Q2FwdHVyZWQoKSkgewpAQCAtMTA3Nyw3ICsxMTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJD
aGVjazoKLSAgICAgICAgICAgIGlmIChtX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252
ZXJnZWQpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9p
bnROb3RDb252ZXJnZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBlbGlt
aW5hdGUoZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTExMDMsNyArMTEyOSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBGb3J3
YXJkQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxp
bWluYXRpb24obm9kZS5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKKyAg
ICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlU2V0
KCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTExNCw3ICsxMTQwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
UHV0U3RydWN0dXJlOgotICAgICAgICAgICAgaWYgKG1fZml4cG9pbnRTdGF0ZSA9PSBGaXhwb2lu
dE5vdENvbnZlcmdlZCkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9
PSBGaXhwb2ludE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGVsaW1pbmF0ZShwdXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCku
aW5kZXgoKSksIFBoYW50b21QdXRTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0x
MTI0LDEwICsxMTUwLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVj
a0FycmF5OgorICAgICAgICAgICAgaWYgKGNoZWNrQXJyYXlFbGltaW5hdGlvbihub2RlLmNoaWxk
MSgpLmluZGV4KCksIG5vZGUuYXJyYXlNb2RlKCkpKQorICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBiYXNl
UHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwotICAgICAg
ICAgICAgYm9vbCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbiA9ICEoIShiYXNlUHJlZGlj
dGlvbiAmIFNwZWNJbnQzMikgJiYgYmFzZVByZWRpY3Rpb24pOwotICAgICAgICAgICAgc2V0UmVw
bGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLmNo
aWxkMSgpLmluZGV4KCksIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKSk7CisgICAgICAg
ICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0
aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5hcnJheU1vZGUoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTE0MCw3ICsxMTY5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6
Ci0gICAgICAgICAgICBpZiAobV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2Vk
KQorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90
Q29udmVyZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZWxpbWluYXRl
KHB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTc4LDE0ICsxMjA3LDEz
IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7CiAgICAgVmVjdG9yPE5v
ZGVJbmRleCwgMTY+IG1fcmVwbGFjZW1lbnRzOwogICAgIEZpeGVkQXJyYXk8dW5zaWduZWQsIExh
c3ROb2RlVHlwZT4gbV9sYXN0U2VlbjsKLSAgICBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1f
Zml4cG9pbnRTdGF0ZTsKICAgICBib29sIG1fY2hhbmdlZDsgLy8gT25seSB0cmFja3MgY2hhbmdl
cyB0aGF0IGhhdmUgYSBzdWJzdGFudGl2ZSBlZmZlY3Qgb24gb3RoZXIgb3B0aW1pemF0aW9ucy4K
IH07CiAKLWJvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgsIE9wdGltaXphdGlvbkZpeHBvaW50
U3RhdGUgZml4cG9pbnRTdGF0ZSkKK2Jvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCiB7CiAg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDU0UgUGhhc2UiKTsKLSAgICBy
ZXR1cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoLCBmaXhwb2ludFN0YXRlKTsKKyAgICByZXR1
cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNp
b24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIEdyYXBoOwogLy8gYSB3aWRlIHJh
bmdlIG9mIHN1YmV4cHJlc3Npb24gc2ltaWxhcml0aWVzLiBJdCdzIGtub3duIHRvIHByb2R1Y2Ug
YmlnIHdpbnMKIC8vIG9uIGEgZmV3IGJlbmNobWFya3MsIGFuZCBpcyByZWxhdGl2ZWx5IGNoZWFw
IHRvIHJ1bi4KIAotYm9vbCBwZXJmb3JtQ1NFKEdyYXBoJiwgT3B0aW1pemF0aW9uRml4cG9pbnRT
dGF0ZSk7Citib29sIHBlcmZvcm1DU0UoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9u
IDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBlbnVtIFNwaWxsUmVnaXN0ZXJzTW9kZSB7IE5l
ZWRUb1NwaWxsLCBECiAKIGVudW0gTm9SZXN1bHRUYWcgeyBOb1Jlc3VsdCB9OwogCi1lbnVtIE9w
dGltaXphdGlvbkZpeHBvaW50U3RhdGUgeyBGaXhwb2ludENvbnZlcmdlZCwgRml4cG9pbnROb3RD
b252ZXJnZWQgfTsKK2VudW0gT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSB7IEJlZm9yZUZpeHBv
aW50LCBGaXhwb2ludE5vdENvbnZlcmdlZCwgRml4cG9pbnRDb252ZXJnZWQgfTsKIAogaW5saW5l
IGJvb2wgc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxMjY2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSwxNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50KHN0cnVjdHVyZVZhbHVlLnNpbmdsZXRvbigpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1v
ZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJy
YXlNb2RlKCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOworICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2
aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDcgQEAgaW5saW5lIGJvb2wgY29tcGlsZShD
b21waWxlTW9kZSBjb21waWxlTQogICAgIHBlcmZvcm1GaXh1cChkZmcpOwogICAgIHBlcmZvcm1T
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nKGRmZyk7CiAgICAgdW5zaWduZWQgY250ID0gMTsKKyAgICBk
ZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnROb3RDb252ZXJnZWQ7CiAgICAgZm9yICg7OyAr
K2NudCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygi
REZHIGJlZ2lubmluZyBvcHRpbWl6YXRpb24gZml4cG9pbnQgaXRlcmF0aW9uICMldS5cbiIsIGNu
dCk7CkBAIC0xMjUsMTMgKzEyNiwxNCBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2Rl
IGNvbXBpbGVNCiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcp
OwogICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Bcmd1bWVudHNTaW1wbGlmaWNhdGlvbihkZmcp
OwogICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihkZmcpOwotICAg
ICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1DU0UoZGZnLCBGaXhwb2ludE5vdENvbnZlcmdlZCk7Cisg
ICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNTRShkZmcpOwogICAgICAgICBpZiAoIWNoYW5nZWQp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGZnLnJlc2V0RXhpdFN0YXRlcygpOwogICAg
ICAgICBwZXJmb3JtRml4dXAoZGZnKTsKICAgICB9Ci0gICAgcGVyZm9ybUNTRShkZmcsIEZpeHBv
aW50Q29udmVyZ2VkKTsKKyAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJn
ZWQ7CisgICAgcGVyZm9ybUNTRShkZmcpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkK
ICAgICBkYXRhTG9nKCJERkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBpbiAldSBp
dGVyYXRpb25zLlxuIiwgY250KTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMjY2OTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2
ICs3NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAg
ICAgIGNhc2UgR2V0QnlJZDogeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0
YXRlID4gQmVmb3JlRml4cG9pbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKICAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbm9kZTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obV9ncmFwaFttX2NvbXBpbGVJbmRleF0u
cHJlZGljdGlvbigpKSkKQEAgLTkwLDggKzkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCksIGZh
bHNlKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRp
Y3Rpb24oKSk7ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobW9kZVN1
cHBvcnRzTGVuZ3RoKGFycmF5TW9kZSkKLSAgICAgICAgICAgICAgICAgICAgJiYgYXJyYXlQcm9m
aWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1vZGVT
dXBwb3J0c0xlbmd0aChhcnJheU1vZGUpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1
Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihub2RlUHRyLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUgY2hlY2tTdHJ1Y3R1cmUoQ2hlY2tTdHJ1
Y3R1cmUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgbm9kZVB0ci0+Y2hpbGQxKCku
aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlLnJlZigpOwpAQCAt
MTEzLDE3ICsxMTUsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG5vZGVQdHItPmNsZWFyRmxh
Z3MoTm9kZU11c3RHZW5lcmF0ZSk7CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXko
YXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgp
LCBsZW5ndGhOZWVkc1N0b3JhZ2UpOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2Rl
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBub2Rl
UHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOworICAgICAgICAgICAgbm9kZVB0ci0+Y2hp
bGRyZW4uY2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAg
ICAgICBub2RlLnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICByZWZpbmVBcnJheU1vZGUo
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCksCi0gICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAg
Ly8gUHJlZGljdGlvbnMgc2hvdWxkIG9ubHkgYmVjb21lIG1vcmUsIHJhdGhlciB0aGFuIGxlc3Ms
IHJlZmluZWQuIEhlbmNlCi0gICAgICAgICAgICAvLyBpZiB3ZSB3ZXJlIGV2ZXIgYWJsZSB0byBD
U0UgdGhlIHN0b3JhZ2UgcG9pbnRlciBmb3IgdGhpcyBvcGVyYXRpb24sCi0gICAgICAgICAgICAv
LyB0aGVuIHdlIHNob3VsZCBhbHdheXMgY29udGludWUgdG8gYmUgYWJsZSB0byBkbyBzby4KICAg
ICAgICAgICAgIEFTU0VSVChjYW5DU0VTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMzYsMzAgKzEzNywxOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwK
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkp
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGNhbkNTRVN0b3JhZ2Uobm9kZS5hcnJh
eU1vZGUoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSkgewotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMygpXS5vcCgpID09IEdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobW9kZXND
b21wYXRpYmxlRm9yU3RvcmFnZUxvYWQobV9ncmFwaFtub2RlLmNoaWxkMygpXS5hcnJheU1vZGUo
KSwgbm9kZS5hcnJheU1vZGUoKSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgdGhlIG5vZGUgcmVmZXJlbmNl
IGFmdGVyIHdlIGRvIHRoZSBhcHBlbmQuCi0gICAgICAgICAgICAgICAgICAgIE5vZGUgZ2V0SW5k
ZXhlZFByb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2UsIG5vZGUuY29kZU9yaWdpbiwgT3BJbmZvKG5vZGUuYXJyYXlNb2RlKCkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNo
aWxkMigpLmluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkgPSBFZGdlKGdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2VJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2UpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihnZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlSW5kZXgpOyAvLyBPbmNlIGJlY2F1c2UgaXQncyBNdXN0R2VuZXJh
dGUuCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2VJbmRleCk7IC8vIEFuZCBhZ2FpbiBiZWNhdXNlIGl0J3MgcmVmZXJlbmNlZCBmcm9tIHRo
ZSBHZXRCeVZhbC4KLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1f
aW5kZXhJbkJsb2NrLCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gU2VlIGFi
b3ZlLiBDb250aW51ZWQgZml4dXAgb2YgdGhlIGdyYXBoIHNob3VsZCBub3QgcmVncmVzcyBvdXIg
YWJpbGl0eQotICAgICAgICAgICAgICAgIC8vIHRvIHNwZWN1bGF0ZS4KLSAgICAgICAgICAgICAg
ICBBU1NFUlQoIW5vZGUuY2hpbGQzKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKKyAgICAg
ICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgMik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXlQb3A6
IHsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgMSk7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewogICAg
ICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlTnVtYmVy
KCkKICAgICAgICAgICAgICAgICAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKSB7CkBAIC0zMzAsMTEg
KzMyMCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpOwogICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpOworCiAgICAgICAgICAgICBub2RlLnNldEFycmF5TW9kZSgKICAg
ICAgICAgICAgICAgICByZWZpbmVBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUu
YXJyYXlNb2RlKCksIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksIG1fZ3JhcGhbY2hpbGQy
XS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKSwK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgMyk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKSkg
eworICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChtb2RlRm9yUHV0KG5vZGVQdHItPmFy
cmF5TW9kZSgpKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgogICAgICAg
ICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyQXJyYXk6CkBAIC0zNjgsNiArMzY1LDU3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9CiAg
ICAgCisgICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJheSwgYm9vbCAoKnN0b3JhZ2VDaGVjayko
QXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFnZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtb2Rl
SXNTcGVjaWZpYyhhcnJheU1vZGUpKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgucmVmKGFy
cmF5KTsKKyAgICAgICAgTm9kZSBjaGVja0FycmF5KENoZWNrQXJyYXksIGNvZGVPcmlnaW4sIE9w
SW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CisgICAgICAgIGNoZWNrQXJyYXkucmVmKCk7CisgICAg
ICAgIE5vZGVJbmRleCBjaGVja0FycmF5SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAg
bV9ncmFwaC5hcHBlbmQoY2hlY2tBcnJheSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVu
ZChtX2luZGV4SW5CbG9jaywgY2hlY2tBcnJheUluZGV4KTsKKworICAgICAgICBpZiAoIXN0b3Jh
Z2VDaGVjayhhcnJheU1vZGUpKQorICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAg
CisgICAgICAgIG1fZ3JhcGgucmVmKGFycmF5KTsKKyAgICAgICAgTm9kZSBnZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlKAorICAgICAgICAgICAgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29k
ZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKKyAgICAgICAgZ2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZS5yZWYoKTsKKyAgICAgICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2VJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChn
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5k
KG1faW5kZXhJbkJsb2NrLCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXgpOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleDsKKyAgICB9
CisgICAgCisgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgdW5zaWduZWQg
c3RvcmFnZUNoaWxkSWR4KQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0
YXRlID4gQmVmb3JlRml4cG9pbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAK
KyAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChub2RlUHRyLT5hcnJheU1vZGUoKSA9PSBBcnJheTo6Rm9yY2VFeGl0
KSB7CisgICAgICAgICAgICBOb2RlIGZvcmNlRXhpdChGb3JjZU9TUkV4aXQsIG5vZGVQdHItPmNv
ZGVPcmlnaW4pOworICAgICAgICAgICAgZm9yY2VFeGl0LnJlZigpOworICAgICAgICAgICAgTm9k
ZUluZGV4IGZvcmNlRXhpdEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICBtX2dy
YXBoLmFwcGVuZChmb3JjZUV4aXQpOworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5k
KG1faW5kZXhJbkJsb2NrLCBmb3JjZUV4aXRJbmRleCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbW9kZUlzU3BlY2lmaWMobm9kZVB0ci0+
YXJyYXlNb2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAg
IE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9k
ZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UgPT0g
Tm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIG1fZ3Jh
cGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdl
KHN0b3JhZ2UpOworICAgIH0KKyAgICAKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkK
ICAgICB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2VkZ2VdOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2
ICs0MCwxOCBAQCBzdGF0aWMgY29uc3QgY2hhciogZGZnT3BOYW1lc1tdID0gewogI3VuZGVmIFNU
UklOR0laRV9ERkdfT1BfRU5VTQogfTsKIAorR3JhcGg6OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJ
bmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCisgICAgOiBt
X2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAg
ICAsIG1fcHJvZmlsZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisgICAgLCBtX2hh
c0FyZ3VtZW50cyhmYWxzZSkKKyAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCkKKyAgICAsIG1fbXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVz
KQorICAgICwgbV9maXhwb2ludFN0YXRlKEJlZm9yZUZpeHBvaW50KQoreworICAgIEFTU0VSVCht
X3Byb2ZpbGVkQmxvY2spOworfQorCiBjb25zdCBjaGFyICpHcmFwaDo6b3BOYW1lKE5vZGVUeXBl
IG9wKQogewogICAgIHJldHVybiBkZmdPcE5hbWVzW29wXTsKQEAgLTE3OSw2ICsxOTEsOCBAQCB2
b2lkIEdyYXBoOjpkdW1wKGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiLCAiKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBoYXNQcmlu
dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICghbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0p
CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBkYXRhTG9nKCIlc0AldSVz
IiwKICAgICAgICAgICAgICAgICAgICAgdXNlS2luZFRvU3RyaW5nKG1fdmFyQXJnQ2hpbGRyZW5b
Y2hpbGRJZHhdLnVzZUtpbmQoKSksCiAgICAgICAgICAgICAgICAgICAgIG1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdLmluZGV4KCksCkBAIC0zOTIsOCArNDA2LDEwIEBAIHZvaWQgR3JhcGg6OmR1
bXAoKQogICAgICAgICBpZiAoX25vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBfY2hpbGRJ
ZHggPSBfbm9kZS5maXJzdENoaWxkKCk7ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAg
ICBfY2hpbGRJZHggPCBfbm9kZS5maXJzdENoaWxkKCkgKyBfbm9kZS5udW1DaGlsZHJlbigpOyAg
XAotICAgICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3ZhckFyZ0No
aWxkcmVuW19jaGlsZElkeF0pOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICBf
Y2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92YXJBcmdD
aGlsZHJlbltfY2hpbGRJZHhdKTsgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDEoKSkgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIEFTU0VSVCgh
X25vZGUuY2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNDgz
LDYgKzQ5OSw4IEBAIHZvaWQgR3JhcGg6OmNvbGxlY3RHYXJiYWdlKCkKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgICAg
ICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKICAg
ICAgICAgICAgICAgICAgKytjaGlsZElkeCkgeworICAgICAgICAgICAgICAgIGlmICghbV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF0pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZE5vZGVJbmRleCA9IG1fdmFyQXJnQ2hpbGRyZW5b
Y2hpbGRJZHhdLmluZGV4KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhdChjaGlsZE5vZGVJbmRl
eCkucmVmKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxNiArNzYsNyBA
QCBzdHJ1Y3QgUmVzb2x2ZUdsb2JhbERhdGEgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJl
bWFpbiBpbiB0aGUgdmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIDogcHVibGlj
IFZlY3RvcjxOb2RlLCA2ND4gewogcHVibGljOgotICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJ
bmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCi0gICAgICAg
IDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJs
b2NrKQotICAgICAgICAsIG1fcHJvZmlsZWRCbG9jayhjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkp
Ci0gICAgICAgICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCi0gICAgICAgICwgbV9vc3JFbnRyeUJ5
dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICAsIG1fbXVzdEhhbmRs
ZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcHJvZmls
ZWRCbG9jayk7Ci0gICAgfQorICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYsIENvZGVCbG9jayosIHVu
c2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11
c3RIYW5kbGVWYWx1ZXMpOwogICAgIAogICAgIHVzaW5nIFZlY3RvcjxOb2RlLCA2ND46Om9wZXJh
dG9yW107CiAgICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6YXQ7CkBAIC01ODUsOCArNTc2LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7
CiAgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51
bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgIGNoaWxkSWR4KyspCi0gICAgICAgICAgICAg
ICAgdm90ZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgYmFsbG90KTsKKyAgICAgICAgICAg
ICAgICAgY2hpbGRJZHgrKykgeworICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdKQorICAgICAgICAgICAgICAgICAgICB2b3RlKG1fdmFyQXJnQ2hpbGRyZW5b
Y2hpbGRJZHhdLCBiYWxsb3QpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtNjA4LDggKzYwMSwxMCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2tbaW5kZXhJbkJsb2NrXTsKICAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICAgICAgaWYgKG5vZGUuZmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
aGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgp
ICsgbm9kZS5udW1DaGlsZHJlbigpOyArK2NoaWxkSWR4KQotICAgICAgICAgICAgICAgICAgICBj
b21wYXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1Ro
aW5nLCBub2RlLnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hp
bGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgKytjaGlsZElkeCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGlu
ZywgbmV3VGhpbmcsIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KCFub2RlLmNoaWxkMSgpKQpAQCAtNjg1LDYgKzY4MCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBtX3BhcmFtZXRlclNsb3RzOwogICAgIHVuc2lnbmVkIG1fb3NyRW50cnlCeXRlY29kZUluZGV4
OwogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG1fbXVzdEhhbmRsZVZhbHVlczsKKyAgICAKKyAgICBP
cHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1fZml4cG9pbnRTdGF0ZTsKIHByaXZhdGU6CiAgICAg
CiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xp
c3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTI2Njk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0
Myw2ICs3NDMsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAg
ICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Cisg
ICAgICAgIGNhc2UgQ2hlY2tBcnJheToKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAg
IGNhc2UgQXJyYXlQb3A6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc1NSwxMCArNzU4LDEzIEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFycmF5OjpNb2RlPihtX29wSW5m
byk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0QXJyYXlNb2RlKEFycmF5OjpNb2RlIGFycmF5
TW9kZSkKKyAgICBib29sIHNldEFycmF5TW9kZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiAgICAg
ewogICAgICAgICBBU1NFUlQoaGFzQXJyYXlNb2RlKCkpOworICAgICAgICBpZiAodGhpcy0+YXJy
YXlNb2RlKCkgPT0gYXJyYXlNb2RlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBtX29wSW5mbyA9IGFycmF5TW9kZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IAogICAgIGJvb2wgaGFzVmlydHVhbFJlZ2lzdGVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw4
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVS
ZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAg
ICAgbWFjcm8oR2V0UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAotICAgIG1h
Y3JvKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVz
dWx0U3RvcmFnZSkgXAorICAgIG1hY3JvKENoZWNrQXJyYXksIE5vZGVNdXN0R2VuZXJhdGUpIFwK
KyAgICBtYWNybyhHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkg
XAogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQdXRC
eU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldEFycmF5TGVuZ3RoLCBO
b2RlUmVzdWx0SW50MzIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc1LDYgKzU3NSwxNCBA
QCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKIH0KIAorRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqIGV4ZWMsIEpT
QXJyYXkqIGFycmF5KQoreworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5n
bG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRh
LCBleGVjKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5wb3AoZXhl
YykpOworfQorICAgICAgICAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UmVnRXhwRXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVu
dCkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CkBAIC02MDMsMTQgKzYxMSw2IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4
cFRlc3QKICAgICByZXR1cm4gYXNSZWdFeHBPYmplY3QoYmFzZSktPnRlc3QoZXhlYywgaW5wdXQp
OwogfQogICAgICAgICAKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJy
YXlQb3AoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKLXsKLSAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMpKTsKLX0KLSAgICAgICAgCiB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUp
CiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHJldmlzaW9uIDEyNjY5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtOTUsMTMgKzk1LDYgQEAgYm9vbCBydW5QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgcmV0dXJu
IHJ1bkFuZExvZyhwaGFzZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFBoYXNlVHlwZSwgdHlw
ZW5hbWUgQXJndW1lbnRUeXBlMT4KLWJvb2wgcnVuUGhhc2UoR3JhcGgmIGdyYXBoLCBBcmd1bWVu
dFR5cGUxIGFyZzEpCi17Ci0gICAgUGhhc2VUeXBlIHBoYXNlKGdyYXBoLCBhcmcxKTsKLSAgICBy
ZXR1cm4gcnVuQW5kTG9nKHBoYXNlKTsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxOCw3ICs2MTgsOCBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJl
OgotICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6IHsKKyAgICAgICAgY2FzZSBQaGFudG9t
QXJndW1lbnRzOgorICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgICAgIC8vIFRo
aXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0
aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9s
bG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03
MDMsOCArNzA0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUu
Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICBjaGlsZElkeCsrKQot
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgIGNoaWxkSWR4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
aWYgKCFub2RlLmNoaWxkMSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAxMjY2OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzczLDYgKzIz
NzMsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAgICAgY2hlY2tBcnJheShub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAg
ICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKQEAgLTI0NzAsNiArMjQ3NSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgRWRnZSBjaGlsZDEg
PSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICBFZGdlIGNoaWxk
MiA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVkZ2UgY2hp
bGQzID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAgRWRnZSBj
aGlsZDQgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwogICAgICAgICAKICAg
ICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgp
KTsKICAgICAgICAgYm9vbCBhbHJlYWR5SGFuZGxlZCA9IGZhbHNlOwpAQCAtMjUxMyw4ICsyNTE5
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBH
UFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOwogCi0gICAgICAgIHNwZWN1bGF0ZUFycmF5KGFycmF5TW9kZSwgY2hp
bGQxLCBiYXNlUmVnKTsKLQogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5OgogICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3Vu
ZHM6IHsKQEAgLTI1MzEsMTMgKzI1MzUsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRj
aC5ncHIoKTsKICAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWVUYWdS
ZWcsIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hSZWcpOwog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIGNoaWxkNCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7CiAKICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlh
cykgewotICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4KLSAgICAgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zm
c2V0KCkpLCBzdG9yYWdlUmVnKTsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAv
LyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIodmFsdWUudGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSkpOwpAQCAtMjU1NCwxMiArMjU1Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgICAg
ICBwcm9wZXJ0eS51c2UoKTsKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAgICAg
c3RvcmFnZS51c2UoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IHRoZSBhcnJh
eSBzdG9yYWdlLgotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7Ci0gICAg
ICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0
b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCiAgICAgICAgICAgICAvLyBDaGVjayBpZiB3
ZSdyZSB3cml0aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0
b3IuCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0
eVZhbHVlVGFnKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CkBAIC0yNjg4LDYgKzI2ODYsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEFycmF5UHVzaDogeworICAgICAgICBBU1NFUlQobW9kZUlzSlNBcnJheShub2RlLmFy
cmF5TW9kZSgpKSk7CisgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhp
cyk7CkBAIC0yNjk3LDE3ICsyNjk3LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxv
YWRHUFIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3Ro
LmdwcigpOwogICAgICAgICAKLSAgICAgICAgeworICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJh
cnJpZXJFbmFibGVkKCkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwogICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlVGFnR1BSLCBub2RlLmNo
aWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwgc3Rv
cmFnZUxlbmd0aEdQUik7CiAgICAgICAgIH0KIAotICAgICAgICBzcGVjdWxhdGVBcnJheShBcnJh
eTo6SlNBcnJheSwgbm9kZS5jaGlsZDEoKSwgYmFzZUdQUik7Ci0gICAgICAgIAotICAgICAgICBH
UFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9y
YWdlLmdwcigpOwogCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgpA
QCAtMjczMCwxMCArMjcyNywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5UG9wOiB7CisgICAgICAgIEFT
U0VSVChtb2RlSXNKU0FycmF5KG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAgCiAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSB2YWx1ZVRhZyh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlUGF5
bG9hZCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpAQCAtMjc0Miw5ICsyNzQxLDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQ
UiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3Rv
cmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZUFycmF5KEFycmF5
OjpKU0FycmF5LCBub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKLSAgICAgICAgCi0gICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3Rv
cmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTI2
Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQwNiw2ICsyNDA2LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmco
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDaGVja0Fy
cmF5OiB7CisgICAgICAgIGNoZWNrQXJyYXkobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
IAogICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgp
KSB7CkBAIC0yNDk3LDYgKzI1MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCAwKTsKICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0No
aWxkKG5vZGUsIDEpOwogICAgICAgICBFZGdlIGNoaWxkMyA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMik7CisgICAgICAgIEVkZ2UgY2hpbGQ0ID0gbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCAzKTsKICAgICAgICAgCiAgICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9k
ZSA9IG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSk7CiAgICAgICAgIGJvb2wgYWxyZWFkeUhh
bmRsZWQgPSBmYWxzZTsKQEAgLTI1MzgsMjcgKzI1NDQsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3By
KCk7CiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCi0gICAg
ICAgIHNwZWN1bGF0ZUFycmF5KGFycmF5TW9kZSwgY2hpbGQxLCBiYXNlUmVnKTsKLQogICAgICAg
ICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgogICAg
ICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKICAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKIAogICAgICAgICAgICAgLy8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFs
dWUgaW50byByZWdpc3RlcnMsIGFsbG9jYXRlIGEgc2NyYXRjaCByZWdpc3Rlci4KICAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICAg
ICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmll
ckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgIGlmIChIZWFwOjpp
c1dyaXRlQmFycmllckVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOworICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1
ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5n
cHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgY2hpbGQ0KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFn
ZS5ncHIoKTsKIAogICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbEFsaWFzKSB7
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzY3JhdGNoUmVnOwotICAgICAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAg
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKQEAgLTI1NzUsMTEgKzI1ODAs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBiYXNlLnVzZSgpOwogICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAgICAgICB2
YWx1ZS51c2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7CiAgICAgICAgIAotICAgICAg
ICAgICAgLy8gR2V0IHRoZSBhcnJheSBzdG9yYWdlLgotICAgICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzY3JhdGNoUmVnOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdl
UmVnKTsKLQogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7
IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgogICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKQEAgLTI3NDcsMjEg
KzI3NDksMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVB1c2g6IHsKKyAgICAgICAgQVNTRVJUKG1vZGVJ
c0pTQXJyYXkobm9kZS5hcnJheU1vZGUoKSkpOworICAgICAgICAKICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBz
dG9yYWdlKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsK
ICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzdG9yYWdlR1BS
ID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9y
YWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIs
IHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywg
c3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIGlmIChIZWFwOjppc1dyaXRl
QmFycmllckVuYWJsZWQoKSkgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CisgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hp
bGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgfQogCi0gICAgICAgIHNwZWN1bGF0ZUFycmF5KEFycmF5
OjpKU0FycmF5LCBub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKKyAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VH
UFIgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQ
Uik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBs
ZW5ndGhzLgpAQCAtMjc4NiwxOSArMjc5MSwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5UG9wOiB7Cisg
ICAgICAgIEFTU0VSVChtb2RlSXNKU0FycmF5KG5vZGUuYXJyYXlNb2RlKCkpKTsKKwogICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgdmFsdWUodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRo
aXMpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKICAgICAgICAg
CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFn
ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAg
Ci0gICAgICAgIHNwZWN1bGF0ZUFycmF5KEFycmF5OjpKU0FycmF5LCBub2RlLmNoaWxkMSgpLCBi
YXNlR1BSKTsKLQotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwogICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAg
ICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkocmV2aXNpb24gMTI2Njk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NSwyMCArMjk1LDIzIEBAIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUoKICAgICB9CiB9CiAKLWNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQXJyYXkoQXJy
YXk6Ok1vZGUgYXJyYXlNb2RlLCBFZGdlIGVkZ2UsIEdQUlJlZyBiYXNlUmVnKQordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBub2RlKQogewotICAgIGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yKiByZXN1bHQgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihhcnJheU1vZGUpOwor
ICAgIEFTU0VSVChtb2RlSXNTcGVjaWZpYyhub2RlLmFycmF5TW9kZSgpKSk7CiAgICAgCi0gICAg
aWYgKG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUoZWRnZSksIGFycmF5TW9kZSkp
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Cisg
ICAgCisgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHJlc3VsdCA9IHR5cGVkQXJyYXlE
ZXNjcmlwdG9yKG5vZGUuYXJyYXlNb2RlKCkpOworICAgIAorICAgIGlmIChtb2RlQWxyZWFkeUNo
ZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSkg
eworICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBleHBlY3RlZENsYXNzSW5mbyA9IDA7CiAg
ICAgCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7
CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZK
U1N0cmluZzo6c19pbmZvOwogICAgICAgICBicmVhazsKQEAgLTMyNSw3ICszMjgsOSBAQCBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8p
KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6OnNfaW5m
bzsKQEAgLTM1Niw3ICszNjEsNyBAQCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3Vs
YXRpdmVKCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBT
dHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGV4cGVjdGVkQ2xhc3NJbmZvKSkpOwogICAgIAotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogfQogCiBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGVJbmRleCBub2RlSW5kZXgpCkBAIC0zOTMsOCArMzk4
LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUkKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnVzZUNoaWxkcmVuKE5vZGUmIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUuZmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHgg
PSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUu
bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKLSAgICAgICAgICAgIHVzZShtX2ppdC5ncmFwaCgp
Lm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsg
bm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CisgICAgICAgICAgICBpZiAoISFtX2pp
dC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQorICAgICAgICAgICAgICAgIHVz
ZShtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgfQog
ICAgIH0gZWxzZSB7CiAgICAgICAgIEVkZ2UgY2hpbGQxID0gbm9kZS5jaGlsZDEoKTsKICAgICAg
ICAgaWYgKCFjaGlsZDEpIHsKQEAgLTIxNDYsNiArMjE1Myw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYgbm9kZSwgc2l6ZV90IGVs
ZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzLCBUeXBlZEFycmF5Um91
bmRpbmcgcm91bmRpbmcpCiB7CisgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CisgICAgCiAgICAgRWRnZSB2YWx1ZVVzZSA9IG1faml0LmdyYXBoKCku
dmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlOwpAQCAt
MjIxMywxMCArMjIyMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckkKICAgICB9CiAgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZUdQUiwgdmFsdWVHUFIgIT0gcHJvcGVy
dHkpOwogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBiYXNlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc3Rv
cmFnZSh0aGlzKTsKLSAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAg
QVNTRVJUKHZhbHVlR1BSICE9IHN0b3JhZ2VSZWcpOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9y
YWdlUmVnKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKICAgICBpZiAo
bm9kZS5vcCgpID09IFB1dEJ5VmFsKQogICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSk7CkBAIC0yMjc4LDYg
KzIyODUsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBw
cm9wZXJ0eSwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQogeworICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7
CisgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgIAogICAgIEVkZ2Ug
YmFzZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgRWRnZSB2
YWx1ZVVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgCkBAIC0y
Mjg3LDEwICsyMjk3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
RgogICAgIAogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCi0gICAgR1BSVGVt
cG9yYXJ5IHN0b3JhZ2UodGhpcyk7Ci0gICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwotICAgIAotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFs
KQogICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBkZXNj
cmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSk7CkBAIC0zMTA5LDggKzMxMTUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2Uo
dGhpcyk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIAotICAg
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0KLSAgICAgICAgc3BlY3Vs
YXRlQXJyYXkobm9kZS5hcnJheU1vZGUoKSwgbm9kZS5jaGlsZDEoKSwgYmFzZVJlZyk7CisgICAg
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3Jp
cHRvcihub2RlLmFycmF5TW9kZSgpKTsKICAgICAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkpIHsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CkBAIC0zMjUyLDMzICszMjU3LDQwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudHMKIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKE5vZGUmIG5vZGUpCiB7Ci0gICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotICAgICAgICAKLSAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgCi0gICAgY29u
c3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPQotICAgICAgICBzcGVjdWxhdGVB
cnJheShub2RlLmFycmF5TW9kZSgpLCBub2RlLmNoaWxkMSgpLCBiYXNlR1BSKTsKKyAgICBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9y
KG5vZGUuYXJyYXlNb2RlKCkpOwogCiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAg
ICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3Vu
ZHM6Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVzdWx0R1BSKTsKKyAgICBjYXNlIEFycmF5OjpK
U0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9y
YWdlKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVzdWx0UmVnKTsKICAgICAgICAgICAgIAotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkp
KTsKICAgICAgICAgICAgIAotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgfQorICAg
IGNhc2UgQXJyYXk6OlN0cmluZzogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IGJhc2UpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSks
IHJlc3VsdEdQUik7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICB9
CisgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOiB7CiAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVu
dHNMZW5ndGgobm9kZSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgorICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOworICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CiAgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIGRlc2NyaXB0b3ItPm1fbGVuZ3RoT2Zmc2V0
KSwgcmVzdWx0R1BSKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjE5Nyw3ICsyMTk3LDcgQEAg
cHVibGljOgogICAgIAogICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5
RGVzY3JpcHRvcihBcnJheTo6TW9kZSk7CiAgICAgCi0gICAgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3IqIHNwZWN1bGF0ZUFycmF5KEFycmF5OjpNb2RlLCBFZGdlIGJhc2VFZGdlLCBHUFJSZWcg
YmFzZVJlZyk7CisgICAgdm9pZCBjaGVja0FycmF5KE5vZGUmKTsKICAgICAKICAgICB0ZW1wbGF0
ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJ
bmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAJKHJldmlzaW9uIDEyNjY5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNiAr
OTksOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRBcnJh
eUxlbmd0aDoKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CisgICAgICAgICAgICAg
ICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2Ug
UGhhbnRvbToKICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNlcy4K
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cg==
</data>
<flag name="review"
          id="171207"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>