<?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>102327</bug_id>
          
          <creation_ts>2012-11-14 21:28:32 -0800</creation_ts>
          <short_desc>Given a PutById or GetById with a proven structure, the DFG should be able to emit a PutByOffset or GetByOffset instead</short_desc>
          <delta_ts>2012-11-17 00:38:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>102326</dependson>
    
    <dependson>102445</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>767687</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-14 21:28:32 -0800</bug_when>
    <thetext>This will be fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768962</commentid>
    <comment_count>1</comment_count>
      <attachid>174615</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-15 23:38:22 -0800</bug_when>
    <thetext>Created attachment 174615
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769618</commentid>
    <comment_count>2</comment_count>
      <attachid>174749</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-16 13:21:25 -0800</bug_when>
    <thetext>Created attachment 174749
still working on it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769810</commentid>
    <comment_count>3</comment_count>
      <attachid>174789</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-16 17:56:37 -0800</bug_when>
    <thetext>Created attachment 174789
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769819</commentid>
    <comment_count>4</comment_count>
      <attachid>174789</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-16 18:08:35 -0800</bug_when>
    <thetext>Comment on attachment 174789
the patch

Attachment 174789 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14860469</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769826</commentid>
    <comment_count>5</comment_count>
      <attachid>174789</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-16 18:12:10 -0800</bug_when>
    <thetext>Comment on attachment 174789
the patch

Attachment 174789 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14860470</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769838</commentid>
    <comment_count>6</comment_count>
      <attachid>174789</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-11-16 18:36:28 -0800</bug_when>
    <thetext>Comment on attachment 174789
the patch

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

r=me with build fixes.

&gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:169
&gt; +                // Now before we do anything else, push the CFA forward over the PutById

Should this be &quot;...over the GetById&quot; instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769870</commentid>
    <comment_count>7</comment_count>
      <attachid>174789</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-16 20:18:51 -0800</bug_when>
    <thetext>Comment on attachment 174789
the patch

Attachment 174789 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14880054</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769914</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-17 00:00:59 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 174789 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174789&amp;action=review
&gt; 
&gt; r=me with build fixes.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:169
&gt; &gt; +                // Now before we do anything else, push the CFA forward over the PutById
&gt; 
&gt; Should this be &quot;...over the GetById&quot; instead?

Yup!  Thanks for catching it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769920</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-17 00:38:29 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/135041</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174615</attachid>
            <date>2012-11-15 23:38:22 -0800</date>
            <delta_ts>2012-11-16 13:21:25 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>provethings.patch</filename>
            <type>text/plain</type>
            <size>17220</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM0OTA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDEyLTExLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2l2ZW4gYSBQdXRCeUlkIG9yIEdldEJ5SWQgd2l0aCBhIHByb3ZlbiBzdHJ1Y3R1cmUsIHRoZSBE
Rkcgc2hvdWxkIGJlIGFibGUgdG8gZW1pdCBhIFB1dEJ5T2Zmc2V0IG9yIEdldEJ5T2Zmc2V0IGlu
c3RlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MjMyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdv
cmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaDoKKyAgICAgICAgKEpTQzo6R2V0
QnlJZFN0YXR1czo6R2V0QnlJZFN0YXR1cyk6CisgICAgICAgIChHZXRCeUlkU3RhdHVzKToKKyAg
ICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuaDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6UHV0QnlJZFN0
YXR1cyk6CisgICAgICAgIChQdXRCeUlkU3RhdHVzKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFZhbHVlOjpiZXN0UHJvdmVuU3RydWN0dXJlKToKKyAgICAgICAgKEFic3RyYWN0VmFs
dWUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmlzVmFsaWQpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgor
ICAgICAgICAoSlNDOjppc1Byb3RvdHlwZUNoYWluTm9ybWFsaXplZCk6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1
ZSk6CisKIDIwMTItMTEtMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDbGFzc0luZm8uaCBzaG91bGQgaGF2ZSBjb3JyZWN0IGluZGVudGF0aW9uLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAko
cmV2aXNpb24gMTM0ODM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgR2V0QnlJZFN0
YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIAogICAgIC8vIEZpbmFsbHkgZmln
dXJlIG91dCBpZiB3ZSBjYW4gZGVyaXZlIGFuIGFjY2VzcyBzdHJhdGVneS4KICAgICBHZXRCeUlk
U3RhdHVzIHJlc3VsdDsKLSAgICByZXN1bHQubV93YXNTZWVuSW5KSVQgPSB0cnVlOworICAgIHJl
c3VsdC5tX3dhc1NlZW5JbkpJVCA9IHRydWU7IC8vIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5
dGVjb2RlIGR1bXBpbmcgb25seS4KICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsK
ICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQo
cHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgaWRlbnQpOwpAQCAtMjUyLDUgKzI1MiwzMiBA
QCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKIH0KIAorR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIElkZW50aWZpZXIm
IGlkZW50KQoreworICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUgdGhlIHN1cGVyIHNpbXBs
ZSBzZWxmIGFjY2VzcyBjYXNlLiBXZSBjb3VsZCBoYW5kbGUgdGhlCisgICAgLy8gcHJvdG90eXBl
IGNhc2UgaW4gdGhlIGZ1dHVyZS4KKyAgICAKKyAgICBpZiAoUHJvcGVydHlOYW1lKGlkZW50KS5h
c0luZGV4KCkgIT0gTm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSkKKyAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CisgICAgCisgICAgR2V0QnlJZFN0YXR1cyByZXN1bHQ7CisgICAgcmVzdWx0
Lm1fd2FzU2VlbkluSklUID0gZmFsc2U7IC8vIFRvIG15IGtub3dsZWRnZSBub2JvZHkgdGhhdCB1
c2VzIGNvbXB1dGVGb3IoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgSWRlbnRpZmllciYpIHJl
YWRzIHRoaXMgZmllbGQsIGJ1dCBJIG1pZ2h0IGFzIHdlbGwgYmUgaG9uZXN0OiBubywgaXQgd2Fz
bid0IHNlZW4gaW4gdGhlIEpJVCwgc2luY2UgSSBjb21wdXRlZCBpdCBzdGF0aWNhbGx5LgorICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOworICAgIHJl
c3VsdC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KGdsb2JhbERhdGEsIGlkZW50LCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zm
c2V0KSkKKyAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7IC8vIEl0
J3MgcHJvYmFibHkgYSBwcm90b3R5cGUgbG9va3VwLiBHaXZlIHVwIG9uIGxpZmUgZm9yIG5vdywg
ZXZlbiB0aG91Z2ggd2UgY291bGQgdG90YWxseSBiZSB3YXkgc21hcnRlciBhYm91dCBpdC4KKyAg
ICBpZiAoYXR0cmlidXRlcyAmIEFjY2Vzc29yKQorICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhNYWtlc0NhbGxzKTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAg
ICAgc3BlY2lmaWNWYWx1ZSA9IDA7CisgICAgcmVzdWx0Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1
Y3R1cmUpOworICAgIHJlc3VsdC5tX3NwZWNpZmljVmFsdWUgPSBKU1ZhbHVlKHNwZWNpZmljVmFs
dWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHJl
dmlzaW9uIDEzNDgzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEzIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAorICAgIEdldEJ5SWRTdGF0dXMoU3RhdGUgc3RhdGUpCisgICAgICAgIDog
bV9zdGF0ZShzdGF0ZSkKKyAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHN0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgc3RhdGUgPT0gVGFrZXNT
bG93UGF0aCB8fCBzdGF0ZSA9PSBNYWtlc0NhbGxzKTsKKyAgICB9CisgICAgCiAgICAgR2V0QnlJ
ZFN0YXR1cygKICAgICAgICAgU3RhdGUgc3RhdGUsIGJvb2wgd2FzU2VlbkluSklULCBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLAogICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LCBKU1ZhbHVlIHNwZWNpZmljVmFsdWUg
PSBKU1ZhbHVlKCksIFZlY3RvcjxTdHJ1Y3R1cmUqPiBjaGFpbiA9IFZlY3RvcjxTdHJ1Y3R1cmUq
PigpKQpAQCAtNjUsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBH
ZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCwgSWRlbnRpZmllciYpOworICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgSWRlbnRpZmllciYpOwogICAgIAogICAgIFN0YXRlIHN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTM0
ODM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNSArMTM0LDYzIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcigKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCitQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSWRl
bnRpZmllciYgaWRlbnQpCit7CisgICAgaWYgKFByb3BlcnR5TmFtZShpZGVudCkuYXNJbmRleCgp
ICE9IE5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworICAgIAorICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90KCkpCisgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworCisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBKU0NlbGwqIHNwZWNpZmljVmFs
dWVJZ25vcmVkOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KGds
b2JhbERhdGEsIGlkZW50LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlSWdub3JlZCk7CisgICAg
aWYgKGF0dHJpYnV0ZXMgJiAoQWNjZXNzb3IgfCBSZWFkT25seSkpCisgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpCisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFNpbXBsZVJlcGxhY2UsIHN0cnVjdHVy
ZSwgMCwgMCwgb2Zmc2V0KTsKKyAgICAKKyAgICAvLyBPdXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdl
J3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHByb3ZlIHRoYXQgdGhpcyBpcyByZWFs
bHkKKyAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUgc2FuaXR5IGNoZWNrcy4KKyAgICAK
KyAgICAvLyBJZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhcyBzZXR0ZXJzIG9yIHJlYWQtb25seSBw
cm9wZXJ0aWVzLCB0aGVuIGdpdmUgdXAuCisgICAgaWYgKHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hh
aW5NYXlJbnRlcmNlcHRTdG9yZVRvKGdsb2JhbERhdGEsIGlkZW50KSkKKyAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgLy8gSWYgdGhlIHByb3Rv
dHlwZSBjaGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94aWVz
IG9yIGRpY3Rpb25hcmllcykKKyAgICAvLyB0aGVuIGdpdmUgdXAuIFRoZSBkaWN0aW9uYXJ5IGNh
c2Ugd291bGQgb25seSBoYXBwZW4gaWYgdGhpcyBzdHJ1Y3R1cmUgaGFzIG5vdCBiZWVuCisgICAg
Ly8gdXNlZCBpbiBhbiBvcHRpbWl6ZWQgcHV0X2J5X2lkIHRyYW5zaXRpb24uCisgICAgaWYgKCFp
c1Byb3RvdHlwZUNoYWluTm9ybWFsaXplZChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpCisgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIAorICAgIC8vIElm
IHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3QgYW4gb2Jq
ZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNlCisgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRp
bmcgcHJvcGVydGllcyB0byBzdHJpbmdzLgorICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpID09IFN0cmluZ1R5cGUpCisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOworICAgIAorICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxy
ZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KKyAgICAv
LyBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgYWxsb3dzIHVzIHRvIGd1YXJkIGFnYWluc3QgYSB0
cmFuc2l0aW9uIHdpdGggYSBzcGVjaWZpYworICAgIC8vIHZhbHVlLgorICAgIC8vCisgICAgLy8g
LSBJZiB3ZSdyZSBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBiZSBzcGVjaWZpYzogdGhpcyB3
b3VsZCBvbmx5IGJlIGEgcHJvYmxlbSBpZgorICAgIC8vICAgdGhlIGV4aXN0aW5nIHRyYW5zaXRp
b24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSBhbHJlYWR5LCBzaW5jZSBpZiBpdCBkaWRuJ3Qs
CisgICAgLy8gICB0aGVuIHdlIHdvdWxkIGJlaGF2ZSAiYXMgaWYiIHdlIHdlcmUgbm90IHN0b3Jp
bmcgYSBzcGVjaWZpYyB2YWx1ZS4gSWYgaXQgZGlkCisgICAgLy8gICBoYXZlIGEgc3BlY2lmaWMg
dmFsdWUsIHRoZW4gd2UnbGwga25vdyAtIHRoZSBmYWN0IHRoYXQgd2UgcGFzcyAwIGZvcgorICAg
IC8vICAgc3BlY2lmaWNWYWx1ZSB3aWxsIHRlbGwgdXMuCisgICAgLy8KKyAgICAvLyAtIElmIHdl
J3JlIG5vdCBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBiZSBzcGVjaWZpYzogYWdhaW4sIHRo
aXMgd291bGQgb25seSBiZSBhCisgICAgLy8gICBwcm9ibGVtIGlmIHRoZSBleGlzdGluZyB0cmFu
c2l0aW9uIGRpZCBoYXZlIGEgc3BlY2lmaWMgdmFsdWUsIHdoaWNoIHdlIGNoZWNrIGZvcgorICAg
IC8vICAgYnkgcGFzc2luZyAwIGZvciB0aGUgc3BlY2lmaWNWYWx1ZS4KKyAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmUoc3RydWN0dXJlLCBpZGVudCwgMCwgMCwgb2Zmc2V0KTsKKyAgICBpZiAoIXRyYW5z
aXRpb24pCisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBU
aGlzIG9jY3VycyBpbiBiaXphcnJlIGNhc2VzIG9ubHkuCisgICAgQVNTRVJUKCF0cmFuc2l0aW9u
LT50cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSk7CisgICAgQVNTRVJUKGlzVmFs
aWRPZmZzZXQob2Zmc2V0KSk7CisgICAgCisgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoCisgICAg
ICAgIFNpbXBsZVRyYW5zaXRpb24sIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwKKyAgICAgICAgc3Ry
dWN0dXJlLT5wcm90b3R5cGVDaGFpbihnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QpLCBvZmZzZXQp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAxMzQ4MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw2ICs2MCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKKyAgICBQdXRC
eUlkU3RhdHVzKFN0YXRlIHN0YXRlKQorICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikK
KyAgICAgICAgLCBtX29sZFN0cnVjdHVyZSgwKQorICAgICAgICAsIG1fbmV3U3RydWN0dXJlKDAp
CisgICAgICAgICwgbV9zdHJ1Y3R1cmVDaGFpbigwKQorICAgICAgICAsIG1fb2Zmc2V0KGludmFs
aWRPZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9u
IHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCk7CisgICAgfQorICAgIAogICAgIFB1dEJ5SWRT
dGF0dXMoCiAgICAgICAgIFN0YXRlIHN0YXRlLAogICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSwKQEAgLTc5LDYgKzg5LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIElkZW50aWZpZXImKTsKKyAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKEpT
R2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSosIElk
ZW50aWZpZXImKTsKICAgICAKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTM0ODk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwOSw4ICsxNDA5
LDI4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGlj
dGlvbigpKSkKKyAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0NlbGwpOworCisgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAg
ICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsIHN0cnVjdHVy
ZSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+aWRlbnRpZmllcihu
b2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNT
aW1wbGUoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnQgdGhpbmdzIHRoYXQgd2Ug
Y2FuJ3QgaGFuZGxlIGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkgbWV0aG9kCisgICAgICAgICAg
ICAgICAgICAgIC8vIGFib3ZlIHdvbid0IGJlIGFibGUgdG8gcmV0dXJuLgorICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoc3RhdHVzLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5jaGFpbigpLmlzRW1wdHkoKSk7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnNwZWNpZmljVmFs
dWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoc3Rh
dHVzLnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMTYwMyw2ICsxNjIzLDI1IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0Ogog
ICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7
CisgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoCisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsCisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwKKyAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVCbG9jay0+
aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOworICAgICAgICAgICAgaWYgKHN0
YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgeworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0
YW50cyA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CisgICAgICAgICAgICAg
ICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnNldChzdGF0dXMubmV3U3RydWN0dXJlKCkpOworICAgICAgICAg
ICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAgICAgICAgICAgIG1fZm91bmRD
b25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxs
KTsKICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTM0ODM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw2ICszNDIsMTUg
QEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgCisgICAgU3RydWN0dXJlKiBiZXN0UHJvdmVuU3RydWN0dXJlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkK
KyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0
b24oKTsKKyAgICAgICAgaWYgKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaGFzU2lu
Z2xldG9uKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZS5zaW5nbGV0b24oKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAogICAgIHZv
aWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIShtX3R5cGUg
JiBTcGVjQ2VsbCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTM0ODM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDY4LDIyICs0
NjgsMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBwcm90b3R5cGVGb3JMb29r
dXAoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgU3Ry
dWN0dXJlQ2hhaW4qIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4oRXhlY1N0YXRlKiBleGVjKSBj
b25zdAorICAgIGlubGluZSBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpwcm90b3R5cGVDaGFp
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
IGNvbnN0CiAgICAgewogICAgICAgICAvLyBXZSBjYWNoZSBvdXIgcHJvdG90eXBlIGNoYWluIHNv
IG91ciBjbGllbnRzIGNhbiBzaGFyZSBpdC4KLSAgICAgICAgaWYgKCFpc1ZhbGlkKGV4ZWMsIG1f
Y2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHByb3Rv
dHlwZSA9IHByb3RvdHlwZUZvckxvb2t1cChleGVjKTsKLSAgICAgICAgICAgIG1fY2FjaGVkUHJv
dG90eXBlQ2hhaW4uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgU3RydWN0dXJlQ2hhaW46
OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3RvdHlwZS5pc051bGwoKSA/IDAgOiBhc09i
amVjdChwcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBpZiAoIWlzVmFsaWQoZ2xv
YmFsT2JqZWN0LCBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpKSkgeworICAgICAgICAgICAg
SlNWYWx1ZSBwcm90b3R5cGUgPSBwcm90b3R5cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0KGdsb2JhbERhdGEsIHRoaXMsIFN0
cnVjdHVyZUNoYWluOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLmlzTnVsbCgpID8gMCA6
IGFzT2JqZWN0KHByb3RvdHlwZSktPnN0cnVjdHVyZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCk7CiAgICAgfQogCi0gICAgaW5saW5l
IGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlQ2hhaW4q
IGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdAorICAgIGlubGluZSBTdHJ1Y3R1cmVDaGFpbiog
U3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gcHJvdG90eXBlQ2hhaW4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIH0KKworICAgIGlubGluZSBib29sIFN0cnVjdHVy
ZTo6aXNWYWxpZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVDaGFpbiog
Y2FjaGVkUHJvdG90eXBlQ2hhaW4pIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIWNhY2hlZFBy
b3RvdHlwZUNoYWluKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEpTVmFs
dWUgcHJvdG90eXBlID0gcHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpOworICAgICAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IHByb3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmplY3QpOwogICAgICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiogY2FjaGVkU3RydWN0dXJlID0gY2FjaGVkUHJvdG90eXBl
Q2hhaW4tPmhlYWQoKTsKICAgICAgICAgd2hpbGUoKmNhY2hlZFN0cnVjdHVyZSAmJiAhcHJvdG90
eXBlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBpZiAoYXNPYmplY3QocHJvdG90eXBlKS0+c3Ry
dWN0dXJlKCkgIT0gY2FjaGVkU3RydWN0dXJlLT5nZXQoKSkKQEAgLTQ5NCw2ICs0OTksMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBwcm90b3R5cGUuaXNOdWxsKCkgJiYgISpj
YWNoZWRTdHJ1Y3R1cmU7CiAgICAgfQogCisgICAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1Zh
bGlkKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWlu
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVmFsaWQoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBjYWNoZWRQcm90b3R5cGVDaGFpbik7CisgICAgfQorCiAgICAgaW5saW5lIEpT
R2xvYmFsT2JqZWN0KiBFeGVjU3RhdGU6OmR5bmFtaWNHbG9iYWxPYmplY3QoKQogICAgIHsKICAg
ICAgICAgaWYgKHRoaXMgPT0gbGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lv
biAxMzQ4MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1Niw2ICszNTYsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBpbmxpbmUgYm9vbCBpc1Byb3RvdHlwZUNoYWluTm9ybWFsaXpl
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkudHlwZSgpID09IFByb3h5VHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0cnVjdHVyZS0+cHJvdG90
eXBlRm9yTG9va3VwKGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBpZiAodi5pc051bGwoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
c3RydWN0dXJlID0gdi5hc0NlbGwoKS0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBPcGVyYXRpb25zX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMzQ4MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDEyICsxNjYsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEV4ZWNT
dGF0ZSopIGNvbnN0OwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2Jh
bE9iamVjdCopIGNvbnN0OwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChDb2Rl
QmxvY2sqKSBjb25zdDsKKyAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEpT
R2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZUNo
YWluKiBwcm90b3R5cGVDaGFpbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgICAgICAKICAgICAg
ICAgLy8gV2lsbCBqdXN0IHRoZSBwcm90b3R5cGUgY2hhaW4gaW50ZXJjZXB0IHRoaXMgcHJvcGVy
dHkgYWNjZXNzPwogICAgICAgICBib29sIHByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVU
byhKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICAKKyAgICAgICAgYm9vbCB0
cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiAhIW1fc3Bl
Y2lmaWNWYWx1ZUluUHJldmlvdXM7IH0KKyAgICAgICAgCiAgICAgICAgIFN0cnVjdHVyZSogcHJl
dmlvdXNJRCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CkBAIC00MDAsNiArNDAzLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9v
ZmZzZXQsIG1fdHlwZUluZm8udHlwZSgpKTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgaXNW
YWxpZChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFp
bikgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNWYWxpZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVDaGFp
biogY2FjaGVkUHJvdG90eXBlQ2hhaW4pIGNvbnN0OwogICAgICAgICAKICAgICAgICAgdm9pZCBw
aW4oKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174749</attachid>
            <date>2012-11-16 13:21:25 -0800</date>
            <delta_ts>2012-11-16 17:56:37 -0800</delta_ts>
            <desc>still working on it</desc>
            <filename>provethings.patch</filename>
            <type>text/plain</type>
            <size>32072</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM0OTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBA
CisyMDEyLTExLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2l2ZW4gYSBQdXRCeUlkIG9yIEdldEJ5SWQgd2l0aCBhIHByb3ZlbiBzdHJ1Y3R1cmUsIHRoZSBE
Rkcgc2hvdWxkIGJlIGFibGUgdG8gZW1pdCBhIFB1dEJ5T2Zmc2V0IG9yIEdldEJ5T2Zmc2V0IGlu
c3RlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MjMyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElm
IHRoZSBwcm9maWxlciB0ZWxscyB1cyB0aGF0IGEgR2V0QnlJZCBvciBQdXRCeUlkIG1heSBiZSBw
b2x5bW9ycGhpYyBidXQgb3VyCisgICAgICAgIGNvbnRyb2wgZmxvdyBhbmFseXNpcyBwcm92ZXMg
dGhhdCBpdCBpc24ndCwgd2Ugc2hvdWxkIHRydXN0IHRoZSBjb250cm9sIGZsb3cKKyAgICAgICAg
YW5hbHlzaXMgb3ZlciB0aGUgcHJvZmlsZXIuIFRoaXMgYXJpc2VzIGluIGNhc2VzIHdoZXJlIEdl
dEJ5SWQgb3IgUHV0QnlJZCB3ZXJlCisgICAgICAgIGlubGluZWQ6IHRoZSBpbmxpbmVkIGZ1bmN0
aW9uIG1heSBoYXZlIGJlZW4gY2FsbGVkIGZyb20gb3RoZXIgcGxhY2VzIHRoYXQgbGVkCisgICAg
ICAgIHRvIHBvbHltb3JwaGlzbSwgYnV0IGluIHRoZSBjdXJyZW50IGlubGluZWQgY29udGV4dCwg
dGhlcmUgaXMgbm8gcG9seW1vcnBoaXNtLgorCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmg6CisgICAgICAg
IChKU0M6OkdldEJ5SWRTdGF0dXM6OkdldEJ5SWRTdGF0dXMpOgorICAgICAgICAoR2V0QnlJZFN0
YXR1cyk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChK
U0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6
OlB1dEJ5SWRTdGF0dXMpOgorICAgICAgICAoUHV0QnlJZFN0YXR1cyk6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6YmVzdFByb3ZlblN0cnVjdHVyZSk6CisgICAgICAgIChB
YnN0cmFjdFZhbHVlKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKToKKyAgICAgICAgKENvbnN0YW50Rm9sZGluZ1BoYXNlKToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb0dl
dEJ5T2Zmc2V0KToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNv
bnZlcnRUb1B1dEJ5T2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc1ZhbGlkKToKKyAgICAgICAgKiBydW50aW1l
L09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6aXNQcm90b3R5cGVDaGFpbk5vcm1hbGl6ZWQp
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAg
ICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0cmFuc2l0aW9uRGlkSW52
b2x2ZVNwZWNpZmljVmFsdWUpOgorCisyMDEyLTExLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0
YXR1czo6R2V0QnlJZFN0YXR1cyk6CisgICAgICAgIChHZXRCeUlkU3RhdHVzKToKKyAgICAgICAg
KiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuaDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6UHV0QnlJZFN0YXR1cyk6
CisgICAgICAgIChQdXRCeUlkU3RhdHVzKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjpiZXN0UHJvdmVuU3RydWN0dXJlKToKKyAgICAgICAgKEFic3RyYWN0VmFsdWUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpwcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmlzVmFsaWQpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAg
ICAoSlNDOjppc1Byb3RvdHlwZUNoYWluTm9ybWFsaXplZCk6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSk6CisK
IDIwMTItMTEtMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBD
bGFzc0luZm8uaCBzaG91bGQgaGF2ZSBjb3JyZWN0IGluZGVudGF0aW9uLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNp
b24gMTM0ODM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgR2V0QnlJZFN0YXR1cyBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIAogICAgIC8vIEZpbmFsbHkgZmlndXJlIG91
dCBpZiB3ZSBjYW4gZGVyaXZlIGFuIGFjY2VzcyBzdHJhdGVneS4KICAgICBHZXRCeUlkU3RhdHVz
IHJlc3VsdDsKLSAgICByZXN1bHQubV93YXNTZWVuSW5KSVQgPSB0cnVlOworICAgIHJlc3VsdC5t
X3dhc1NlZW5JbkpJVCA9IHRydWU7IC8vIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5dGVjb2Rl
IGR1bXBpbmcgb25seS4KICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKICAgICBj
YXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmls
ZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgaWRlbnQpOwpAQCAtMjUyLDUgKzI1MiwzNSBAQCBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKIH0KIAorR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIElkZW50aWZpZXImIGlkZW50
KQoreworICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUgdGhlIHN1cGVyIHNpbXBsZSBzZWxm
IGFjY2VzcyBjYXNlLiBXZSBjb3VsZCBoYW5kbGUgdGhlCisgICAgLy8gcHJvdG90eXBlIGNhc2Ug
aW4gdGhlIGZ1dHVyZS4KKyAgICAKKyAgICBpZiAoUHJvcGVydHlOYW1lKGlkZW50KS5hc0luZGV4
KCkgIT0gTm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QoKSkKKyAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisgICAgCisgICAgaWYgKCFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKKyAgICAKKyAgICBHZXRCeUlkU3RhdHVzIHJlc3VsdDsKKyAgICByZXN1bHQubV93
YXNTZWVuSW5KSVQgPSBmYWxzZTsgLy8gVG8gbXkga25vd2xlZGdlIG5vYm9keSB0aGF0IHVzZXMg
Y29tcHV0ZUZvcihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBJZGVudGlmaWVyJikgcmVhZHMg
dGhpcyBmaWVsZCwgYnV0IEkgbWlnaHQgYXMgd2VsbCBiZSBob25lc3Q6IG5vLCBpdCB3YXNuJ3Qg
c2VlbiBpbiB0aGUgSklULCBzaW5jZSBJIGNvbXB1dGVkIGl0IHN0YXRpY2FsbHkuCisgICAgdW5z
aWduZWQgYXR0cmlidXRlczsKKyAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CisgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoZ2xvYmFsRGF0YSwgaWRlbnQsIGF0dHJpYnV0ZXMs
IHNwZWNpZmljVmFsdWUpOworICAgIGlmICghaXNWYWxpZE9mZnNldChyZXN1bHQubV9vZmZzZXQp
KQorICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsgLy8gSXQncyBw
cm9iYWJseSBhIHByb3RvdHlwZSBsb29rdXAuIEdpdmUgdXAgb24gbGlmZSBmb3Igbm93LCBldmVu
IHRob3VnaCB3ZSBjb3VsZCB0b3RhbGx5IGJlIHdheSBzbWFydGVyIGFib3V0IGl0LgorICAgIGlm
IChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpCisgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE1h
a2VzQ2FsbHMpOworICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICBz
cGVjaWZpY1ZhbHVlID0gMDsKKyAgICByZXN1bHQubV9zdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVy
ZSk7CisgICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoc3BlY2lmaWNWYWx1ZSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkocmV2aXNp
b24gMTM0ODM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTMgQEAgcHVibGljOgogICAgIHsKICAg
ICB9CiAgICAgCisgICAgR2V0QnlJZFN0YXR1cyhTdGF0ZSBzdGF0ZSkKKyAgICAgICAgOiBtX3N0
YXRlKHN0YXRlKQorICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCisgICAgeworICAg
ICAgICBBU1NFUlQoc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBzdGF0ZSA9PSBUYWtlc1Nsb3dQ
YXRoIHx8IHN0YXRlID09IE1ha2VzQ2FsbHMpOworICAgIH0KKyAgICAKICAgICBHZXRCeUlkU3Rh
dHVzKAogICAgICAgICBTdGF0ZSBzdGF0ZSwgYm9vbCB3YXNTZWVuSW5KSVQsIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlU2V0ID0gU3RydWN0dXJlU2V0KCksCiAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IEpT
VmFsdWUoKSwgVmVjdG9yPFN0cnVjdHVyZSo+IGNoYWluID0gVmVjdG9yPFN0cnVjdHVyZSo+KCkp
CkBAIC02NSw2ICs3Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIEdldEJ5
SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJ
ZGVudGlmaWVyJik7CisgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqLCBJZGVudGlmaWVyJik7CiAgICAgCiAgICAgU3RhdGUgc3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxMzQ4MzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzNCw1ICsxMzQsNzYgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKK1B1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBJZGVudGlm
aWVyJiBpZGVudCwgYm9vbCBpc0RpcmVjdCkKK3sKKyAgICBpZiAoUHJvcGVydHlOYW1lKGlkZW50
KS5hc0luZGV4KCkgIT0gTm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSkKKyAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CisKKyAgICBpZiAoIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9wZXJ0
eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOworICAgIAorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgSlNDZWxs
KiBzcGVjaWZpY1ZhbHVlSWdub3JlZDsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldChnbG9iYWxEYXRhLCBpZGVudCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZUln
bm9yZWQpOworICAgIGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVhZE9ubHkpKQorICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICBpZiAoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKQorICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhTaW1wbGVSZXBs
YWNlLCBzdHJ1Y3R1cmUsIDAsIDAsIG9mZnNldCk7CisgICAgCisgICAgLy8gT3VyIGh5cG90aGVz
aXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0
IHRoaXMgaXMgcmVhbGx5CisgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBj
aGVja3MuCisgICAgCisgICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9uIGRpY3Rp
b25hcmllcy4KKyAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAvLyBJZiB0aGUgc3RydWN0
dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0IGFuIG9iamVjdCwgdGhlbiBn
aXZlIHVwLCBzaW5jZQorICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRp
ZXMgdG8gc3RyaW5ncy4KKyAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBT
dHJpbmdUeXBlKQorICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
KyAgICAKKyAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUg
Y2hhaW4gaGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5IHByb3BlcnRpZXMsIHRoZW4gZ2l2ZSB1cC4K
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRv
KGdsb2JhbERhdGEsIGlkZW50KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFp
biBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94aWVzIG9yIGRpY3Rp
b25hcmllcykKKyAgICAgICAgLy8gdGhlbiBnaXZlIHVwLiBUaGUgZGljdGlvbmFyeSBjYXNlIHdv
dWxkIG9ubHkgaGFwcGVuIGlmIHRoaXMgc3RydWN0dXJlIGhhcyBub3QgYmVlbgorICAgICAgICAv
LyB1c2VkIGluIGFuIG9wdGltaXplZCBwdXRfYnlfaWQgdHJhbnNpdGlvbi4gQW5kIHJlYWxseSB0
aGUgb25seSByZWFzb24gd2h5IHdlIHdvdWxkCisgICAgICAgIC8vIGJhaWwgaGVyZSBpcyB0aGF0
IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZpbmcgdGhlIG9wdGltaXppbmcgSklUIGdvIGFu
ZCBmbGF0dGVuCisgICAgICAgIC8vIGRpY3Rpb25hcmllcyBpZiB3ZSBoYXZlIGV2aWRlbmNlIHRv
IHN1Z2dlc3QgdGhhdCB0aG9zZSBvYmplY3RzIHdlcmUgbmV2ZXIgdXNlZCBhcworICAgICAgICAv
LyBwcm90b3R5cGVzIGluIGEgY2FjaGVhYmxlIHByb3RvdHlwZSBhY2Nlc3MgLSBpLmUuIHRoZXJl
J3MgYSBnb29kIGNoYW5jZSB0aGF0IHNvbWUgb2YKKyAgICAgICAgLy8gdGhlIG90aGVyIGNoZWNr
cyBiZWxvdyB3aWxsIGZhaWwuCisgICAgICAgIGlmICghaXNQcm90b3R5cGVDaGFpbk5vcm1hbGl6
ZWQoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgfQorICAgIAorICAgIC8vIFdlIG9ubHkgb3B0aW1p
emUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlz
IGNhY2hlZCB0by4KKyAgICAvLyBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgYWxsb3dzIHVzIHRv
IGd1YXJkIGFnYWluc3QgYSB0cmFuc2l0aW9uIHdpdGggYSBzcGVjaWZpYworICAgIC8vIHZhbHVl
LgorICAgIC8vCisgICAgLy8gLSBJZiB3ZSdyZSBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBi
ZSBzcGVjaWZpYzogdGhpcyB3b3VsZCBvbmx5IGJlIGEgcHJvYmxlbSBpZgorICAgIC8vICAgdGhl
IGV4aXN0aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSBhbHJlYWR5LCBz
aW5jZSBpZiBpdCBkaWRuJ3QsCisgICAgLy8gICB0aGVuIHdlIHdvdWxkIGJlaGF2ZSAiYXMgaWYi
IHdlIHdlcmUgbm90IHN0b3JpbmcgYSBzcGVjaWZpYyB2YWx1ZS4gSWYgaXQgZGlkCisgICAgLy8g
ICBoYXZlIGEgc3BlY2lmaWMgdmFsdWUsIHRoZW4gd2UnbGwga25vdyAtIHRoZSBmYWN0IHRoYXQg
d2UgcGFzcyAwIGZvcgorICAgIC8vICAgc3BlY2lmaWNWYWx1ZSB3aWxsIHRlbGwgdXMuCisgICAg
Ly8KKyAgICAvLyAtIElmIHdlJ3JlIG5vdCBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBiZSBz
cGVjaWZpYzogYWdhaW4sIHRoaXMgd291bGQgb25seSBiZSBhCisgICAgLy8gICBwcm9ibGVtIGlm
IHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIGRpZCBoYXZlIGEgc3BlY2lmaWMgdmFsdWUsIHdoaWNo
IHdlIGNoZWNrIGZvcgorICAgIC8vICAgYnkgcGFzc2luZyAwIGZvciB0aGUgc3BlY2lmaWNWYWx1
ZS4KKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJh
bnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0dXJlLCBpZGVudCwgMCwgMCwgb2Zmc2V0
KTsKKyAgICBpZiAoIXRyYW5zaXRpb24pCisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOyAvLyBUaGlzIG9jY3VycyBpbiBiaXphcnJlIGNhc2VzIG9ubHkuIFNlZSBh
Ym92ZS4KKyAgICBBU1NFUlQoIXRyYW5zaXRpb24tPnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lm
aWNWYWx1ZSgpKTsKKyAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAKKyAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cygKKyAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0
dXJlLCB0cmFuc2l0aW9uLAorICAgICAgICBpc0RpcmVjdCA/IHN0cnVjdHVyZS0+cHJvdG90eXBl
Q2hhaW4oZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0KSA6IDAsIG9mZnNldCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDEzNDgzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYw
LDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAorICAgIFB1dEJ5SWRTdGF0dXMoU3Rh
dGUgc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQorICAgICAgICAsIG1f
b2xkU3RydWN0dXJlKDApCisgICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUoMCkKKyAgICAgICAgLCBt
X3N0cnVjdHVyZUNoYWluKDApCisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9
PSBUYWtlc1Nsb3dQYXRoKTsKKyAgICB9CisgICAgCiAgICAgUHV0QnlJZFN0YXR1cygKICAgICAg
ICAgU3RhdGUgc3RhdGUsCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLApAQCAtNzks
NiArODksNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVz
IGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRpZmll
ciYpOworICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxEYXRhJiwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiwgSWRlbnRpZmllciYsIGJv
b2wgaXNEaXJlY3QpOwogICAgIAogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMzQ4OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA5LDggKzE0
MDksMzAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVk
aWN0aW9uKCkpKQorICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7Cisg
ICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZ2xvYmFsRGF0YSwgc3RydWN0
dXJlLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KG5vZGUuaWRlbnRpZmllck51bWJlcigpKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5p
c1NpbXBsZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFzc2VydCB0aGluZ3MgdGhhdCB3
ZSBjYW4ndCBoYW5kbGUgYW5kIHRoYXQgdGhlIGNvbXB1dGVGb3IoKSBtZXRob2QKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYWJvdmUgd29uJ3QgYmUgYWJsZSB0byByZXR1cm4uCisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChzdGF0dXMuc3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLmNoYWluKCkuaXNFbXB0eSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuc3BlY2lmaWNW
YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChz
dGF0dXMuc3BlY2lmaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoc3RhdHVzLnN0cnVjdHVy
ZVNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNjAzLDYgKzE2MjUsMjYgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgUHV0QnlJZDoK
ICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3Rh
dHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICBtX2dyYXBo
Lm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLmNvZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLm1fY29kZUJsb2NrLT5pZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllck51bWJl
cigpKSwKKyAgICAgICAgICAgICAgICBub2RlLm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CisgICAg
ICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpKSB7CisgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsK
KyAgICAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuc2V0KHN0YXR1cy5uZXdTdHJ1Y3R1cmUo
KSk7CisgICAgICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxMzQ4MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQyLDYgKzM0MiwxNSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAKKyAgICBTdHJ1Y3R1cmUqIGJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhh
c1NpbmdsZXRvbigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLnNpbmdsZXRvbigpOworICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0
cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2Z1dHVy
ZVBvc3NpYmxlU3RydWN0dXJlLnNpbmdsZXRvbigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKICAgICB7CiAgICAgICAg
IGlmICghKG1fdHlwZSAmIFNwZWNDZWxsKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDEz
NDg5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNiArMTM5LDE4MiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsK
KyAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmlnaW47
CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkID0gbm9kZS5jaGlsZDEoKS5pbmRleCgp
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLmlkZW50
aWZpZXJOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWlz
Q2VsbFNwZWN1bGF0aW9uKG1fZ3JhcGhbY2hpbGRdLnByZWRpY3Rpb24oKSkpCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwor
ICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIG5lZWRzV2F0Y2hwb2lu
dCA9ICFmb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24o
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1
cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAgIGdsb2Jh
bERhdGEoKSwgc3RydWN0dXJlLCBjb2RlQmxvY2soKS0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVt
YmVyKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNT
aW1wbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5jaGFpbigpLmlzRW1wdHkoKSk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b24oKSA9PSBz
dHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIE5vdyBiZWZv
cmUgd2UgZG8gYW55dGhpbmcgZWxzZSwgcHVzaCB0aGUgQ0ZBIGZvcndhcmQgb3ZlciB0aGUgUHV0
QnlJZAorICAgICAgICAgICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgd2Ugc2lnbmFsIHRvIHRoZSBs
b29wIHRoYXQgaXQgc2hvdWxkIGNvbnRpbnVlIGFuZCBub3QKKyAgICAgICAgICAgICAgICAvLyBk
byBhbnkgZWxpbWluYXRpb25zLgorICAgICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuaXNTdWJzZXRPZihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSB3YXRj
aHBvaW50KFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLCBPcEluZm8o
c3RydWN0dXJlKSwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50LnJlZigp
OworICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggd2F0Y2hwb2ludEluZGV4ID0gbV9ncmFw
aC5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHdhdGNocG9pbnQp
OworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2Nr
LCB3YXRjaHBvaW50SW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHlTdG9yYWdlSW5kZXg7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZz
ZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gY2hpbGQ7
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgZ2V0QnV0
dGVyZmx5KEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGQpOworICAgICAgICAgICAgICAg
ICAgICBnZXRCdXR0ZXJmbHkucmVmKCk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
YXBwZW5kKGdldEJ1dHRlcmZseSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmFwcGVuZChpbmRleEluQmxvY2ssIHByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBp
bGVJbmRleF0uY29udmVydFRvR2V0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
LnNpemUoKSwgcHJvcGVydHlTdG9yYWdlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOworICAgICAgICAg
ICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jhc2Uoc3Rh
dHVzLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlm
aWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgUHV0QnlJZDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDogeworICAgICAg
ICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUuY29kZU9yaWdpbjsKKyAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggY2hpbGQgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUuaWRlbnRpZmllck51
bWJlcigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOworICAgICAgICAg
ICAgICAgIGlmICghc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIG5lZWRzV2F0Y2hwb2ludCA9ICFmb3JO
b2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICAgICAgICAgIGdsb2JhbERhdGEoKSwK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbiks
CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgY29k
ZUJsb2NrKCktPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlciksCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUub3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSAmJiAhc3RhdHVzLmlzU2lt
cGxlVHJhbnNpdGlvbigpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm9sZFN0cnVjdHVyZSgpID09IHN0
cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gTm93IGJlZm9y
ZSB3ZSBkbyBhbnl0aGluZyBlbHNlLCBwdXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRoZSBQdXRC
eUlkCisgICAgICAgICAgICAgICAgLy8gYW5kIG1ha2Ugc3VyZSB3ZSBzaWduYWwgdG8gdGhlIGxv
b3AgdGhhdCBpdCBzaG91bGQgY29udGludWUgYW5kIG5vdAorICAgICAgICAgICAgICAgIC8vIGRv
IGFueSBlbGltaW5hdGlvbnMuCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5leGVjdXRlKGluZGV4
SW5CbG9jayk7CisgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkgeworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoZm9yTm9kZShjaGlsZCkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZS5pc1N1YnNldE9mKHN0cnVjdHVyZSkpOworICAgICAgICAgICAgICAgICAgICBOb2RlIHdhdGNo
cG9pbnQoU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhz
dHJ1Y3R1cmUpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIHdhdGNocG9pbnQucmVmKCk7
CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCB3YXRjaHBvaW50SW5kZXggPSBtX2dyYXBo
LnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQod2F0Y2hwb2ludCk7
CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2ss
IHdhdGNocG9pbnRJbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKiB0cmFuc2l0aW9uRGF0YTsK
KyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRyYW5zaXRpb25EYXRhID0gbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKHN0
cnVjdHVyZSwgc3RhdHVzLm5ld1N0cnVjdHVyZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5SWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25D
aGVjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdG9yZWRQ
cm90b3R5cGUoKS5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4qIGl0ID0gc3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmhlYWQ7ICppdDsg
KytpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0g
KCppdCktPnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwcm90b3R5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcm90b3R5cGUuaXND
ZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRp
b25DaGVjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrLCBwcm90b3R5cGUuYXNDZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgTm9kZUluZGV4IHByb3BlcnR5U3RvcmFnZUluZGV4OworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQorICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IGNoaWxkOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUgZ2V0QnV0dGVyZmx5KEdldEJ1dHRl
cmZseSwgY29kZU9yaWdpbiwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBnZXRCdXR0ZXJm
bHkucmVmKCk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9n
cmFwaC5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGdldEJ1dHRl
cmZseSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleElu
QmxvY2ssIHByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7
CisgICAgICAgICAgICAgICAgICAgIE5vZGUgYWxsb2NhdGVTdG9yYWdlKEFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZCk7Cisg
ICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlU3RvcmFnZS5yZWYoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5hcHBlbmQoYWxsb2NhdGVTdG9yYWdlKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKGluZGV4SW5CbG9jaywgcHJvcGVydHlTdG9yYWdl
SW5kZXgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID4gc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIE5vZGUgZ2V0QnV0dGVyZmx5KEdldEJ1dHRlcmZseSwgY29k
ZU9yaWdpbiwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBnZXRCdXR0ZXJmbHkucmVmKCk7
CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCdXR0ZXJmbHlJbmRleCA9IG1fZ3Jh
cGguc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChnZXRCdXR0ZXJm
bHkpOworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJs
b2NrLCBnZXRCdXR0ZXJmbHlJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBOb2RlIHJlYWxsb2NhdGVTdG9yYWdlKFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UsIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkLCBnZXRCdXR0ZXJm
bHlJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHJlYWxsb2NhdGVTdG9yYWdlLnJlZigpOwor
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1fZ3JhcGguc2l6ZSgp
OworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChyZWFsbG9jYXRlU3RvcmFnZSk7
CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2ss
IHByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkgewor
ICAgICAgICAgICAgICAgICAgICBOb2RlIHB1dFN0cnVjdHVyZShQdXRTdHJ1Y3R1cmUsIGNvZGVP
cmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHV0U3RydWN0dXJlLnJlZigpOworICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHV0
U3RydWN0dXJlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5hcHBlbmQocHV0U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuYXBwZW5kKGluZGV4SW5CbG9jaywgcHV0U3RydWN0dXJlSW5kZXgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoW21fY29t
cGlsZUluZGV4XS5jb252ZXJ0VG9QdXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0Rh
dGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2VJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CisgICAgICAg
ICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShz
dGF0dXMub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50
aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgICAgIG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTIy
OCw2ICs0MDQsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQog
ICAgIAorICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwpCisgICAgeworICAg
ICAgICBOb2RlIHdlYWtDb25zdGFudChXZWFrSlNDb25zdGFudCwgY29kZU9yaWdpbiwgT3BJbmZv
KGNlbGwpKTsKKyAgICAgICAgd2Vha0NvbnN0YW50LnJlZigpOworICAgICAgICBOb2RlSW5kZXgg
d2Vha0NvbnN0YW50SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgbV9ncmFwaC5hcHBl
bmQod2Vha0NvbnN0YW50KTsKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKGluZGV4SW5C
bG9jaywgd2Vha0NvbnN0YW50SW5kZXgpOworICAgICAgICAKKyAgICAgICAgaWYgKGNlbGwtPnN0
cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7CisgICAg
ICAgICAgICBOb2RlIHdhdGNocG9pbnQoU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNv
ZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIHdlYWtDb25zdGFudEluZGV4KTsK
KyAgICAgICAgICAgIHdhdGNocG9pbnQucmVmKCk7CisgICAgICAgICAgICBOb2RlSW5kZXggd2F0
Y2hwb2ludEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICBtX2dyYXBoLmFwcGVu
ZCh3YXRjaHBvaW50KTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleElu
QmxvY2ssIHdhdGNocG9pbnRJbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIE5vZGUgY2hlY2soQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4s
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFr
Q29uc3RhbnRJbmRleCk7CisgICAgICAgIGNoZWNrLnJlZigpOworICAgICAgICBOb2RlSW5kZXgg
Y2hlY2tJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChjaGVj
ayk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2ssIGNoZWNrSW5k
ZXgpOworICAgIH0KKyAgICAKICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBD
RkEgbWF5IHJlYWNoIGNvbmNsdXNpb25zIGFib3V0IGNvbnN0YW50cyBiYXNlZCBvbiBpdHMKICAg
ICAvLyBhc3N1bXB0aW9uIHRoYXQgY2VydGFpbiBjb2RlIG11c3QgZXhpdCwgYnV0IHRoZW4gdGhv
c2UgY29uc3RhbnRzIG1heSBsZWFkIGZ1dHVyZQogICAgIC8vIHJlZXhlY3V0aW9ucyBvZiB0aGUg
Q0ZBIHRvIGJlbGlldmUgdGhhdCB0aGUgc2FtZSBjb2RlIHdpbGwgbm93IG5vIGxvbmdlciBleGl0
LiBUaHVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTM0
ODM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2OSw2ICsyNjksMjUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjb252ZXJ0VG9T
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1
Y3R1cmUoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5z
aWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZUluZGV4IHN0b3JhZ2UpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNoKTsK
KyAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OworICAgICAgICBjaGls
ZHJlbi5zZXRDaGlsZDIoY2hpbGRyZW4uY2hpbGQxKCkpOworICAgICAgICBjaGlsZHJlbi5zZXRD
aGlsZDEoc3RvcmFnZSk7CisgICAgICAgIG1fb3AgPSBHZXRCeU9mZnNldDsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0
YUluZGV4LCBOb2RlSW5kZXggc3RvcmFnZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09
IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9vcEluZm8gPSBz
dG9yYWdlQWNjZXNzRGF0YUluZGV4OworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDMoY2hpbGRy
ZW4uY2hpbGQyKCkpOworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDIoY2hpbGRyZW4uY2hpbGQx
KCkpOworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoc3RvcmFnZSk7CisgICAgICAgIG1fb3Ag
PSBQdXRCeU9mZnNldDsKKyAgICB9CisgICAgCiAgICAgSlNDZWxsKiB3ZWFrQ29uc3RhbnQoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG9wKCkgPT0gV2Vha0pTQ29uc3RhbnQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAxMzQ4MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjgsMjIgKzQ2OCwyNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgcmV0dXJuIHByb3RvdHlwZUZvckxvb2t1cChleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpOwogICAgIH0KIAotICAgIGlubGluZSBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpw
cm90b3R5cGVDaGFpbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgaW5saW5lIFN0cnVjdHVy
ZUNoYWluKiBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKICAgICB7CiAgICAgICAgIC8v
IFdlIGNhY2hlIG91ciBwcm90b3R5cGUgY2hhaW4gc28gb3VyIGNsaWVudHMgY2FuIHNoYXJlIGl0
LgotICAgICAgICBpZiAoIWlzVmFsaWQoZXhlYywgbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQo
KSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gcHJvdG90eXBlRm9yTG9va3Vw
KGV4ZWMpOwotICAgICAgICAgICAgbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvdG90eXBlLmlzTnVsbCgpID8gMCA6IGFzT2JqZWN0KHByb3RvdHlwZSktPnN0cnVjdHVy
ZSgpKSk7CisgICAgICAgIGlmICghaXNWYWxpZChnbG9iYWxPYmplY3QsIG1fY2FjaGVkUHJvdG90
eXBlQ2hhaW4uZ2V0KCkpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHByb3Rv
dHlwZUZvckxvb2t1cChnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgbV9jYWNoZWRQcm90b3R5
cGVDaGFpbi5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZShnbG9i
YWxEYXRhLCBwcm90b3R5cGUuaXNOdWxsKCkgPyAwIDogYXNPYmplY3QocHJvdG90eXBlKS0+c3Ry
dWN0dXJlKCkpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbV9jYWNoZWRQcm90b3R5cGVD
aGFpbi5nZXQoKTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OmlzVmFsaWQo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4pIGNv
bnN0CisgICAgaW5saW5lIFN0cnVjdHVyZUNoYWluKiBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWlu
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBwcm90b3R5cGVD
aGFpbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Cisg
ICAgfQorCisgICAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikgY29u
c3QKICAgICB7CiAgICAgICAgIGlmICghY2FjaGVkUHJvdG90eXBlQ2hhaW4pCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBwcm90b3R5cGVG
b3JMb29rdXAoZXhlYyk7CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gcHJvdG90eXBlRm9y
TG9va3VwKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBj
YWNoZWRTdHJ1Y3R1cmUgPSBjYWNoZWRQcm90b3R5cGVDaGFpbi0+aGVhZCgpOwogICAgICAgICB3
aGlsZSgqY2FjaGVkU3RydWN0dXJlICYmICFwcm90b3R5cGUuaXNOdWxsKCkpIHsKICAgICAgICAg
ICAgIGlmIChhc09iamVjdChwcm90b3R5cGUpLT5zdHJ1Y3R1cmUoKSAhPSBjYWNoZWRTdHJ1Y3R1
cmUtPmdldCgpKQpAQCAtNDk0LDYgKzQ5OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
cmV0dXJuIHByb3RvdHlwZS5pc051bGwoKSAmJiAhKmNhY2hlZFN0cnVjdHVyZTsKICAgICB9CiAK
KyAgICBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OmlzVmFsaWQoRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4pIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNWYWxpZChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhY2hlZFByb3RvdHlw
ZUNoYWluKTsKKyAgICB9CisKICAgICBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIEV4ZWNTdGF0ZTo6
ZHluYW1pY0dsb2JhbE9iamVjdCgpCiAgICAgewogICAgICAgICBpZiAodGhpcyA9PSBsZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDEzNDgzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzU2LDYg
KzM1NiwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgIH0KIAorICAgIGlubGlu
ZSBib29sIGlzUHJvdG90eXBlQ2hhaW5Ob3JtYWxpemVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgZm9yICg7Oykgewor
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gUHJveHlUeXBl
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgSlNWYWx1ZSB2ID0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgICAgIGlmICh2LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSB2LmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIE9wZXJhdGlvbnNfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDEz
NDgzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjYsMTIgKzE2NiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpT
VmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgICAg
IEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKENvZGVCbG9jayopIGNvbnN0OworICAgICAgICBT
dHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmpl
Y3QqKSBjb25zdDsKICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEV4ZWNT
dGF0ZSopIGNvbnN0OwogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAgICAgICAgIAogICAgICAgICAvLyBXaWxsIGp1c3QgdGhlIHByb3Rv
dHlwZSBjaGFpbiBpbnRlcmNlcHQgdGhpcyBwcm9wZXJ0eSBhY2Nlc3M/CiAgICAgICAgIGJvb2wg
cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5
TmFtZSk7CiAgICAgICAgIAorICAgICAgICBib29sIHRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lm
aWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsgfQor
ICAgICAgICAKICAgICAgICAgU3RydWN0dXJlKiBwcmV2aW91c0lEKCkgY29uc3QKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZv
KTsKQEAgLTQwMCw2ICs0MDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVy
biBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV90eXBlSW5mby50eXBlKCkp
OwogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBpc1ZhbGlkKEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdDsKICAgICAgICAgYm9vbCBp
c1ZhbGlkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikg
Y29uc3Q7CiAgICAgICAgIAogICAgICAgICB2b2lkIHBpbigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174789</attachid>
            <date>2012-11-16 17:56:37 -0800</date>
            <delta_ts>2012-11-16 20:18:51 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>provethings.patch</filename>
            <type>text/plain</type>
            <size>34932</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM1MDIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBA
CisyMDEyLTExLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2l2ZW4gYSBQdXRCeUlkIG9yIEdldEJ5SWQgd2l0aCBhIHByb3ZlbiBzdHJ1Y3R1cmUsIHRoZSBE
Rkcgc2hvdWxkIGJlIGFibGUgdG8gZW1pdCBhIFB1dEJ5T2Zmc2V0IG9yIEdldEJ5T2Zmc2V0IGlu
c3RlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MjMyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElm
IHRoZSBwcm9maWxlciB0ZWxscyB1cyB0aGF0IGEgR2V0QnlJZCBvciBQdXRCeUlkIG1heSBiZSBw
b2x5bW9ycGhpYyBidXQgb3VyCisgICAgICAgIGNvbnRyb2wgZmxvdyBhbmFseXNpcyBwcm92ZXMg
dGhhdCBpdCBpc24ndCwgd2Ugc2hvdWxkIHRydXN0IHRoZSBjb250cm9sIGZsb3cKKyAgICAgICAg
YW5hbHlzaXMgb3ZlciB0aGUgcHJvZmlsZXIuIFRoaXMgYXJpc2VzIGluIGNhc2VzIHdoZXJlIEdl
dEJ5SWQgb3IgUHV0QnlJZCB3ZXJlCisgICAgICAgIGlubGluZWQ6IHRoZSBpbmxpbmVkIGZ1bmN0
aW9uIG1heSBoYXZlIGJlZW4gY2FsbGVkIGZyb20gb3RoZXIgcGxhY2VzIHRoYXQgbGVkCisgICAg
ICAgIHRvIHBvbHltb3JwaGlzbSwgYnV0IGluIHRoZSBjdXJyZW50IGlubGluZWQgY29udGV4dCwg
dGhlcmUgaXMgbm8gcG9seW1vcnBoaXNtLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcik6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
aDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6R2V0QnlJZFN0YXR1cyk6CisgICAgICAg
IChHZXRCeUlkU3RhdHVzKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OlB1dEJ5SWRTdGF0dXMpOgorICAgICAgICAoUHV0
QnlJZFN0YXR1cyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdFZhbHVlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6YmVzdFBy
b3ZlblN0cnVjdHVyZSk6CisgICAgICAgIChBYnN0cmFjdFZhbHVlKToKKyAgICAgICAgKiBkZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50
Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFu
dEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToKKyAgICAgICAgKENv
bnN0YW50Rm9sZGluZ1BoYXNlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb0dldEJ5T2Zmc2V0KToKKyAgICAgICAgKE5vZGUpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlUmVzdWx0KToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4p
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc1ZhbGlkKToKKyAg
ICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6aXNQcm90b3R5cGVD
aGFpbk5vcm1hbGl6ZWQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUpOgorCiAyMDEyLTExLTE2ICBUb255IENo
YW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIEVOQUJMRV9DU1NfSElF
UkFSQ0hJRVMgc2luY2UgaXQncyBubyBsb25nZXIgaW4gdXNlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTM0ODk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYzMiwxMSArNjMyLDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSog
ZXhlYywgY28KICAgICAgICAgY2FzZSBvcF9nZXRfY2FsbGVlOiB7CiAgICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIG9wX2dl
dF9jYWxsZWUgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7
CisgICAgICAgICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBvcF9jcmVhdGVfdGhpczogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBjcmVhdGVfdGhpcyAlcyIsIGxv
Y2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7CisgICAgICAgICAgICBpbnQg
cjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGNyZWF0
ZV90aGlzICVzLCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwg
cmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5kYXRhKCkpOwogICAgICAgICAgICAgZHVtcEJ5dGVjb2Rl
Q29tbWVudEFuZE5ld0xpbmUobG9jYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5jcHAJKHJldmlzaW9uIDEzNDg5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBA
IEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAKICAgICAvLyBG
aW5hbGx5IGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGRlcml2ZSBhbiBhY2Nlc3Mgc3RyYXRlZ3kuCiAg
ICAgR2V0QnlJZFN0YXR1cyByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gdHJ1
ZTsKKyAgICByZXN1bHQubV93YXNTZWVuSW5KSVQgPSB0cnVlOyAvLyBUaGlzIGlzIGludGVyZXN0
aW5nIGZvciBieXRlY29kZSBkdW1waW5nIG9ubHkuCiAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nl
c3NUeXBlKSB7CiAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CiAgICAgICAgIHJldHVybiBjb21wdXRl
RnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIGlkZW50KTsKQEAgLTI1Miw1
ICsyNTIsMzUgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKK0dldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBJ
ZGVudGlmaWVyJiBpZGVudCkKK3sKKyAgICAvLyBGb3Igbm93IHdlIG9ubHkgaGFuZGxlIHRoZSBz
dXBlciBzaW1wbGUgc2VsZiBhY2Nlc3MgY2FzZS4gV2UgY291bGQgaGFuZGxlIHRoZQorICAgIC8v
IHByb3RvdHlwZSBjYXNlIGluIHRoZSBmdXR1cmUuCisgICAgCisgICAgaWYgKFByb3BlcnR5TmFt
ZShpZGVudCkuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAg
cmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgaWYgKHN0cnVj
dHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSkKKyAgICAgICAg
cmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgaWYgKCFzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgCisgICAgR2V0QnlJZFN0YXR1cyByZXN1
bHQ7CisgICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gZmFsc2U7IC8vIFRvIG15IGtub3dsZWRn
ZSBub2JvZHkgdGhhdCB1c2VzIGNvbXB1dGVGb3IoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwg
SWRlbnRpZmllciYpIHJlYWRzIHRoaXMgZmllbGQsIGJ1dCBJIG1pZ2h0IGFzIHdlbGwgYmUgaG9u
ZXN0OiBubywgaXQgd2Fzbid0IHNlZW4gaW4gdGhlIEpJVCwgc2luY2UgSSBjb21wdXRlZCBpdCBz
dGF0aWNhbGx5LgorICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgSlNDZWxsKiBzcGVjaWZp
Y1ZhbHVlOworICAgIHJlc3VsdC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KGdsb2JhbERhdGEs
IGlkZW50LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQocmVzdWx0Lm1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7IC8vIEl0J3MgcHJvYmFibHkgYSBwcm90b3R5cGUgbG9va3VwLiBHaXZlIHVwIG9u
IGxpZmUgZm9yIG5vdywgZXZlbiB0aG91Z2ggd2UgY291bGQgdG90YWxseSBiZSB3YXkgc21hcnRl
ciBhYm91dCBpdC4KKyAgICBpZiAoYXR0cmlidXRlcyAmIEFjY2Vzc29yKQorICAgICAgICByZXR1
cm4gR2V0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKKyAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CisgICAgcmVzdWx0Lm1fc3RydWN0
dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC5tX3NwZWNpZmljVmFsdWUgPSBKU1Zh
bHVlKHNwZWNpZmljVmFsdWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmgJKHJldmlzaW9uIDEzNDg5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEzIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAorICAgIGV4cGxpY2l0IEdldEJ5SWRTdGF0dXMo
U3RhdGUgc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICAgICAgLCBtX29mZnNl
dChpbnZhbGlkT2Zmc2V0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlID09IE5vSW5mb3Jt
YXRpb24gfHwgc3RhdGUgPT0gVGFrZXNTbG93UGF0aCB8fCBzdGF0ZSA9PSBNYWtlc0NhbGxzKTsK
KyAgICB9CisgICAgCiAgICAgR2V0QnlJZFN0YXR1cygKICAgICAgICAgU3RhdGUgc3RhdGUsIGJv
b2wgd2FzU2VlbkluSklULCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVj
dHVyZVNldCgpLAogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0
LCBKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBKU1ZhbHVlKCksIFZlY3RvcjxTdHJ1Y3R1cmUqPiBj
aGFpbiA9IFZlY3RvcjxTdHJ1Y3R1cmUqPigpKQpAQCAtNjUsNiArNzIsNyBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2Nr
KiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRpZmllciYpOworICAgIHN0YXRpYyBHZXRC
eUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgSWRlbnRpZmll
ciYpOwogICAgIAogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAkocmV2aXNpb24gMTM0ODk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVk
ZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogCkBAIC0xMzQs
NSArMTM1LDc3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQogfQogCitQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNE
aXJlY3QpCit7CisgICAgaWYgKFByb3BlcnR5TmFtZShpZGVudCkuYXNJbmRleCgpICE9IFByb3Bl
cnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QoKSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CisKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpKQorICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZUln
bm9yZWQ7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoZ2xvYmFs
RGF0YSwgaWRlbnQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWVJZ25vcmVkKTsKKyAgICBpZiAo
aXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vz
c29yIHwgUmVhZE9ubHkpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFNpbXBsZVJlcGxhY2UsIHN0
cnVjdHVyZSwgMCwgMCwgb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgLy8gT3VyIGh5cG90aGVz
aXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0
IHRoaXMgaXMgcmVhbGx5CisgICAgLy8gdHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBj
aGVja3MuCisgICAgCisgICAgLy8gRG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9uIGRpY3Rp
b25hcmllcy4KKyAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAvLyBJZiB0aGUgc3RydWN0
dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0IGFuIG9iamVjdCwgdGhlbiBn
aXZlIHVwLCBzaW5jZQorICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRp
ZXMgdG8gc3RyaW5ncy4KKyAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBT
dHJpbmdUeXBlKQorICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
KyAgICAKKyAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUg
Y2hhaW4gaGFzIHNldHRlcnMgb3IgcmVhZC1vbmx5IHByb3BlcnRpZXMsIHRoZW4gZ2l2ZSB1cC4K
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRv
KGdsb2JhbERhdGEsIGlkZW50KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFp
biBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94aWVzIG9yIGRpY3Rp
b25hcmllcykKKyAgICAgICAgLy8gdGhlbiBnaXZlIHVwLiBUaGUgZGljdGlvbmFyeSBjYXNlIHdv
dWxkIG9ubHkgaGFwcGVuIGlmIHRoaXMgc3RydWN0dXJlIGhhcyBub3QgYmVlbgorICAgICAgICAv
LyB1c2VkIGluIGFuIG9wdGltaXplZCBwdXRfYnlfaWQgdHJhbnNpdGlvbi4gQW5kIHJlYWxseSB0
aGUgb25seSByZWFzb24gd2h5IHdlIHdvdWxkCisgICAgICAgIC8vIGJhaWwgaGVyZSBpcyB0aGF0
IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZpbmcgdGhlIG9wdGltaXppbmcgSklUIGdvIGFu
ZCBmbGF0dGVuCisgICAgICAgIC8vIGRpY3Rpb25hcmllcyBpZiB3ZSBoYXZlIGV2aWRlbmNlIHRv
IHN1Z2dlc3QgdGhhdCB0aG9zZSBvYmplY3RzIHdlcmUgbmV2ZXIgdXNlZCBhcworICAgICAgICAv
LyBwcm90b3R5cGVzIGluIGEgY2FjaGVhYmxlIHByb3RvdHlwZSBhY2Nlc3MgLSBpLmUuIHRoZXJl
J3MgYSBnb29kIGNoYW5jZSB0aGF0IHNvbWUgb2YKKyAgICAgICAgLy8gdGhlIG90aGVyIGNoZWNr
cyBiZWxvdyB3aWxsIGZhaWwuCisgICAgICAgIGlmICghaXNQcm90b3R5cGVDaGFpbk5vcm1hbGl6
ZWQoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgfQorICAgIAorICAgIC8vIFdlIG9ubHkgb3B0aW1p
emUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlz
IGNhY2hlZCB0by4KKyAgICAvLyBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgYWxsb3dzIHVzIHRv
IGd1YXJkIGFnYWluc3QgYSB0cmFuc2l0aW9uIHdpdGggYSBzcGVjaWZpYworICAgIC8vIHZhbHVl
LgorICAgIC8vCisgICAgLy8gLSBJZiB3ZSdyZSBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBi
ZSBzcGVjaWZpYzogdGhpcyB3b3VsZCBvbmx5IGJlIGEgcHJvYmxlbSBpZgorICAgIC8vICAgdGhl
IGV4aXN0aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSBhbHJlYWR5LCBz
aW5jZSBpZiBpdCBkaWRuJ3QsCisgICAgLy8gICB0aGVuIHdlIHdvdWxkIGJlaGF2ZSAiYXMgaWYi
IHdlIHdlcmUgbm90IHN0b3JpbmcgYSBzcGVjaWZpYyB2YWx1ZS4gSWYgaXQgZGlkCisgICAgLy8g
ICBoYXZlIGEgc3BlY2lmaWMgdmFsdWUsIHRoZW4gd2UnbGwga25vdyAtIHRoZSBmYWN0IHRoYXQg
d2UgcGFzcyAwIGZvcgorICAgIC8vICAgc3BlY2lmaWNWYWx1ZSB3aWxsIHRlbGwgdXMuCisgICAg
Ly8KKyAgICAvLyAtIElmIHdlJ3JlIG5vdCBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBiZSBz
cGVjaWZpYzogYWdhaW4sIHRoaXMgd291bGQgb25seSBiZSBhCisgICAgLy8gICBwcm9ibGVtIGlm
IHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIGRpZCBoYXZlIGEgc3BlY2lmaWMgdmFsdWUsIHdoaWNo
IHdlIGNoZWNrIGZvcgorICAgIC8vICAgYnkgcGFzc2luZyAwIGZvciB0aGUgc3BlY2lmaWNWYWx1
ZS4KKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJh
bnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0dXJlLCBpZGVudCwgMCwgMCwgb2Zmc2V0
KTsKKyAgICBpZiAoIXRyYW5zaXRpb24pCisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOyAvLyBUaGlzIG9jY3VycyBpbiBiaXphcnJlIGNhc2VzIG9ubHkuIFNlZSBh
Ym92ZS4KKyAgICBBU1NFUlQoIXRyYW5zaXRpb24tPnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lm
aWNWYWx1ZSgpKTsKKyAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAKKyAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cygKKyAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0
dXJlLCB0cmFuc2l0aW9uLAorICAgICAgICBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCksIG9mZnNldCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmgJKHJldmlzaW9uIDEzNDg5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIElkZW50aWZpZXI7CitjbGFzcyBKU0ds
b2JhbERhdGE7CitjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNz
IFN0cnVjdHVyZUNoYWluOwogCkBAIC02MCw2ICs2MiwxNiBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KICAgICAKKyAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0YXRlIHN0YXRlKQorICAgICAg
ICA6IG1fc3RhdGUoc3RhdGUpCisgICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUoMCkKKyAgICAgICAg
LCBtX25ld1N0cnVjdHVyZSgwKQorICAgICAgICAsIG1fc3RydWN0dXJlQ2hhaW4oMCkKKyAgICAg
ICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc3Rh
dGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGgpOworICAgIH0K
KyAgICAKICAgICBQdXRCeUlkU3RhdHVzKAogICAgICAgICBTdGF0ZSBzdGF0ZSwKICAgICAgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCkBAIC03OSw2ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4LCBJZGVudGlmaWVyJik7CisgICAgc3RhdGljIFB1dEJ5SWRT
dGF0dXMgY29tcHV0ZUZvcihKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSosIElkZW50aWZpZXImLCBib29sIGlzRGlyZWN0KTsKICAgICAKICAgICBTdGF0ZSBzdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTM0ODk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRl
ICJQdXRCeUlkU3RhdHVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApA
QCAtMTQwOSw4ICsxNDExLDMwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpKSkKKyAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworCisgICAgICAgICAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1
Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2dsb2Jh
bERhdGEsIHN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIoKSkpOworICAgICAgICAgICAgICAg
IGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnQg
dGhpbmdzIHRoYXQgd2UgY2FuJ3QgaGFuZGxlIGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkgbWV0
aG9kCisgICAgICAgICAgICAgICAgICAgIC8vIGFib3ZlIHdvbid0IGJlIGFibGUgdG8gcmV0dXJu
LgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLnN0cnVjdHVyZVNldCgpLnNpemUo
KSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5jaGFpbigpLmlzRW1w
dHkoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
dHVzLnNwZWNpZmljVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoc3RhdHVzLnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9w
KCk7CisgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKHN0
YXR1cy5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTU3MywxNSAr
MTU5NywyNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAg
ICAgIGJyZWFrOyAKICAgICB9CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNTdG9yYWdlUmVzdWx0KCkpIHsK
KyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgIGNhc2UgUHV0
QnlPZmZzZXQ6Ci0gICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAg
Ym9vbCBjYW5FeGl0ID0gZmFsc2U7CisgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5oYXNTdG9yYWdlUmVzdWx0KCkpIHsKKyAgICAgICAgICAgIGNhbkV4aXQgfD0gIWlzQ2VsbFNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgfQorICAgICAg
ICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1f
dHlwZSk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsK
KyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGNhbkV4aXQpOwogICAgICAgICBicmVhazsKKyAgICB9
CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsKQEAgLTE2MDMsNiArMTYz
NiwyNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2Fz
ZSBQdXRCeUlkOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOworICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgUHV0QnlJ
ZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLAor
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS5pZGVu
dGlmaWVyTnVtYmVyKCkpLAorICAgICAgICAgICAgICAgIG5vZGUub3AoKSA9PSBQdXRCeUlkRGly
ZWN0KTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkpIHsKKyAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihzdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5z
aXRpb24oKSkgeworICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5zZXQoc3RhdHVzLm5l
d1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDEzNDg5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDIsNiArMzQyLDE1IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAorICAgIFN0cnVjdHVyZSogYmVzdFByb3ZlblN0
cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaGFzU2luZ2xldG9uKCkpCisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCk7CisgICAgICAgIGlmIChtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpKQorICAgICAgICAgICAgcmV0dXJuIG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUuc2luZ2xldG9uKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKICAgICB2
b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCEobV90eXBl
ICYgU3BlY0NlbGwpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTM0ODk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1
ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAi
R2V0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC0xMzksNiArMTQxLDE5MCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6
IHsKKyAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLmNvZGVPcmln
aW47CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkID0gbm9kZS5jaGlsZDEoKS5pbmRl
eCgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLmlk
ZW50aWZpZXJOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
IWlzQ2VsbFNwZWN1bGF0aW9uKG1fZ3JhcGhbY2hpbGRdLnByZWRpY3Rpb24oKSkpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3Ry
dWN0dXJlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJvb2wgbmVl
ZHNXYXRjaHBvaW50ID0gIW1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaGFzU2luZ2xldG9uKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
R2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAg
ICAgICAgICAgICAgICBnbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgY29kZUJsb2NrKCktPmlkZW50
aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmICghc3RhdHVzLmlzU2ltcGxlKCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuc3RydWN0dXJl
U2V0KCkuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuY2hhaW4o
KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuc3RydWN0dXJlU2V0
KCkuc2luZ2xldG9uU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2gg
dGhlIENGQSBmb3J3YXJkIG92ZXIgdGhlIFB1dEJ5SWQKKyAgICAgICAgICAgICAgICAvLyBhbmQg
bWFrZSBzdXJlIHdlIHNpZ25hbCB0byB0aGUgbG9vcCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBh
bmQgbm90CisgICAgICAgICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KKyAgICAgICAg
ICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBl
bGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
bmVlZHNXYXRjaHBvaW50KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0YXRlLmZv
ck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1
cmVTZXQoc3RydWN0dXJlKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkXS5y
ZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSB3YXRjaHBvaW50KFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGQpOwor
ICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50LnJlZigpOworICAgICAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggd2F0Y2hwb2ludEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHdhdGNocG9pbnQpOworICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2NrLCB3YXRjaHBvaW50SW5kZXgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggcHJvcGVydHlTdG9yYWdlSW5kZXg7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgbV9ncmFwaFtjaGlsZF0ucmVmKCk7CisgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZUluZGV4ID0gY2hpbGQ7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGUgZ2V0QnV0dGVyZmx5KEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGQp
OworICAgICAgICAgICAgICAgICAgICBnZXRCdXR0ZXJmbHkucmVmKCk7CisgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGdldEJ1dHRlcmZseSk7CisgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2ssIHByb3BlcnR5U3RvcmFnZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbV9ncmFwaFtub2RlSW5kZXhdLmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0
YTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBpbmRleFJlbGF0
aXZlVG9CYXNlKHN0YXR1cy5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vz
c0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAgICAg
ICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgICAgICBjYXNlIFB1dEJ5SWREaXJl
Y3Q6IHsKKyAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLmNvZGVP
cmlnaW47CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkID0gbm9kZS5jaGlsZDEoKS5p
bmRleCgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2Rl
LmlkZW50aWZpZXJOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0
cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIG5l
ZWRzV2F0Y2hwb2ludCA9ICFtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmhhc1NpbmdsZXRvbigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAg
ICAgICAgICAgICAgICAgZ2xvYmFsRGF0YSgpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLAorICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+aWRlbnRpZmllcihpZGVudGlm
aWVyTnVtYmVyKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5vcCgpID09IFB1dEJ5SWREaXJl
Y3QpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2lt
cGxlUmVwbGFjZSgpICYmICFzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VS
VChzdGF0dXMub2xkU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2gg
dGhlIENGQSBmb3J3YXJkIG92ZXIgdGhlIFB1dEJ5SWQKKyAgICAgICAgICAgICAgICAvLyBhbmQg
bWFrZSBzdXJlIHdlIHNpZ25hbCB0byB0aGUgbG9vcCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBh
bmQgbm90CisgICAgICAgICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KKyAgICAgICAg
ICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBl
bGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
bmVlZHNXYXRjaHBvaW50KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0YXRlLmZv
ck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1
cmVTZXQoc3RydWN0dXJlKSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkXS5y
ZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSB3YXRjaHBvaW50KFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGQpOwor
ICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50LnJlZigpOworICAgICAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggd2F0Y2hwb2ludEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHdhdGNocG9pbnQpOworICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2NrLCB3YXRjaHBvaW50SW5kZXgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNpdGlvbkRhdGE7CisgICAgICAgICAgICAgICAgaWYg
KHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICB0cmFu
c2l0aW9uRGF0YSA9IG1fZ3JhcGguYWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCisgICAgICAg
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShzdHJ1Y3R1cmUsIHN0YXR1
cy5uZXdTdHJ1Y3R1cmUoKSkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeUlkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIGluZGV4SW5CbG9jaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5h
c0NlbGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4qIGl0ID0gc3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmhlYWQoKTsgKml0OyArK2l0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSAoKml0KS0+c3Rv
cmVkUHJvdG90eXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvdHlw
ZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBpbmRleEluQmxvY2ss
IHByb3RvdHlwZS5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggcHJvcGVydHlTdG9yYWdlSW5kZXg7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgbV9ncmFwaFtjaGlsZF0ucmVmKCk7CisgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZUluZGV4ID0gY2hpbGQ7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzLmlzU2lt
cGxlUmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMu
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSBnZXRCdXR0ZXJmbHkoR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZCk7Cisg
ICAgICAgICAgICAgICAgICAgIGdldEJ1dHRlcmZseS5yZWYoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlTdG9yYWdlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5hcHBlbmQoZ2V0QnV0dGVyZmx5KTsKKyAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuYXBwZW5kKGluZGV4SW5CbG9jaywgcHJvcGVydHlTdG9yYWdlSW5kZXgp
OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lu
bGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSBh
bGxvY2F0ZVN0b3JhZ2UoQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5m
byh0cmFuc2l0aW9uRGF0YSksIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVT
dG9yYWdlLnJlZigpOyAvLyBPbmNlIGZvciB0aGUgdXNlLgorICAgICAgICAgICAgICAgICAgICBh
bGxvY2F0ZVN0b3JhZ2UucmVmKCk7IC8vIFR3aWNlIGJlY2F1c2UgaXQncyBtdXN0LWdlbmVyYXRl
LgorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1fZ3JhcGguc2l6
ZSgpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChhbGxvY2F0ZVN0b3JhZ2Up
OworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2Nr
LCBwcm9wZXJ0eVN0b3JhZ2VJbmRleCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgPiBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZSBnZXRCdXR0ZXJmbHko
R2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIGdl
dEJ1dHRlcmZseS5yZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ1dHRl
cmZseUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
YXBwZW5kKGdldEJ1dHRlcmZseSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
LmFwcGVuZChpbmRleEluQmxvY2ssIGdldEJ1dHRlcmZseUluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGRdLnJlZigpOworICAgICAg
ICAgICAgICAgICAgICBOb2RlIHJlYWxsb2NhdGVTdG9yYWdlKFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkLCBnZXRCdXR0
ZXJmbHlJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHJlYWxsb2NhdGVTdG9yYWdlLnJlZigp
OyAvLyBPbmNlIGZvciB0aGUgdXNlLgorICAgICAgICAgICAgICAgICAgICByZWFsbG9jYXRlU3Rv
cmFnZS5yZWYoKTsgLy8gVHdpY2UgYmVjYXVzZSBpdCdzIG11c3QtZ2VuZXJhdGUuCisgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHJlYWxsb2NhdGVTdG9yYWdlKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKGluZGV4SW5CbG9jaywgcHJvcGVy
dHlTdG9yYWdlSW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CisgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGRdLnJlZigpOworICAgICAgICAgICAgICAgICAgICBO
b2RlIHB1dFN0cnVjdHVyZShQdXRTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0
aW9uRGF0YSksIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgcHV0U3RydWN0dXJlLnJlZigp
OworICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHV0U3RydWN0dXJlSW5kZXggPSBtX2dy
YXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQocHV0U3RydWN0
dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKGluZGV4SW5C
bG9jaywgcHV0U3RydWN0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0uY29udmVydFRvUHV0QnlP
ZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdl
SW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NE
YXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOworICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRh
Lm9mZnNldCA9IGluZGV4UmVsYXRpdmVUb0Jhc2Uoc3RhdHVzLm9mZnNldCgpKTsKKyAgICAgICAg
ICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51
bWJlcjsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5k
KHN0b3JhZ2VBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMjgsNiArNDE0LDMxIEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KICAgICAKKyAgICB2b2lkIGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjayhDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5C
bG9jaywgSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgTm9kZSB3ZWFrQ29uc3RhbnQoV2Vh
a0pTQ29uc3RhbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsKSk7CisgICAgICAgIHdlYWtDb25z
dGFudC5yZWYoKTsKKyAgICAgICAgd2Vha0NvbnN0YW50LnByZWRpY3Qoc3BlY3VsYXRpb25Gcm9t
VmFsdWUoY2VsbCkpOworICAgICAgICBOb2RlSW5kZXggd2Vha0NvbnN0YW50SW5kZXggPSBtX2dy
YXBoLnNpemUoKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQod2Vha0NvbnN0YW50KTsKKyAgICAg
ICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKGluZGV4SW5CbG9jaywgd2Vha0NvbnN0YW50SW5kZXgp
OworICAgICAgICAKKyAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0
Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBOb2RlIHdhdGNocG9pbnQo
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5z
dHJ1Y3R1cmUoKSksIHdlYWtDb25zdGFudEluZGV4KTsKKyAgICAgICAgICAgIHdhdGNocG9pbnQu
cmVmKCk7CisgICAgICAgICAgICBOb2RlSW5kZXggd2F0Y2hwb2ludEluZGV4ID0gbV9ncmFwaC5z
aXplKCk7CisgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZCh3YXRjaHBvaW50KTsKKyAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2ssIHdhdGNocG9pbnRJbmRleCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGUg
Y2hlY2soQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29uc3RhbnRJbmRleCk7CisgICAgICAg
IGNoZWNrLnJlZigpOworICAgICAgICBOb2RlSW5kZXggY2hlY2tJbmRleCA9IG1fZ3JhcGguc2l6
ZSgpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChjaGVjayk7CisgICAgICAgIG1faW5zZXJ0aW9u
U2V0LmFwcGVuZChpbmRleEluQmxvY2ssIGNoZWNrSW5kZXgpOworICAgIH0KKyAgICAKICAgICAv
LyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBDRkEgbWF5IHJlYWNoIGNvbmNsdXNpb25z
IGFib3V0IGNvbnN0YW50cyBiYXNlZCBvbiBpdHMKICAgICAvLyBhc3N1bXB0aW9uIHRoYXQgY2Vy
dGFpbiBjb2RlIG11c3QgZXhpdCwgYnV0IHRoZW4gdGhvc2UgY29uc3RhbnRzIG1heSBsZWFkIGZ1
dHVyZQogICAgIC8vIHJlZXhlY3V0aW9ucyBvZiB0aGUgQ0ZBIHRvIGJlbGlldmUgdGhhdCB0aGUg
c2FtZSBjb2RlIHdpbGwgbm93IG5vIGxvbmdlciBleGl0LiBUaHVzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTM0ODk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OSw2ICsyNjksMjYgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludChzdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJ
bmRleCwgTm9kZUluZGV4IHN0b3JhZ2UpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBH
ZXRCeUlkIHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNoKTsKKyAgICAgICAgbV9vcEluZm8gPSBzdG9y
YWdlQWNjZXNzRGF0YUluZGV4OworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShzdG9y
YWdlKSk7CisgICAgICAgIG1fb3AgPSBHZXRCeU9mZnNldDsKKyAgICAgICAgbV9mbGFncyAmPSB+
Tm9kZUNsb2JiZXJzV29ybGQ7CisgICAgfQorICAgIAorICAgIHZvaWQgY29udmVydFRvUHV0QnlP
ZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZUluZGV4IHN0b3JhZ2Up
CisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeUlkIHx8IG1fb3AgPT0gUHV0QnlJ
ZERpcmVjdCk7CisgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsKKyAg
ICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQzKGNoaWxkcmVuLmNoaWxkMigpKTsKKyAgICAgICAgY2hp
bGRyZW4uc2V0Q2hpbGQyKGNoaWxkcmVuLmNoaWxkMSgpKTsKKyAgICAgICAgY2hpbGRyZW4uc2V0
Q2hpbGQxKEVkZ2Uoc3RvcmFnZSkpOworICAgICAgICBtX29wID0gUHV0QnlPZmZzZXQ7CisgICAg
ICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOworICAgIH0KKyAgICAKICAgICBKU0Nl
bGwqIHdlYWtDb25zdGFudCgpCiAgICAgewogICAgICAgICBBU1NFUlQob3AoKSA9PSBXZWFrSlND
b25zdGFudCk7CkBAIC01NDUsNiArNTY1LDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0
dXJuIChtX2ZsYWdzICYgTm9kZVJlc3VsdE1hc2spID09IE5vZGVSZXN1bHRCb29sZWFuOwogICAg
IH0KIAorICAgIGJvb2wgaGFzU3RvcmFnZVJlc3VsdCgpCisgICAgeworICAgICAgICByZXR1cm4g
KG1fZmxhZ3MgJiBOb2RlUmVzdWx0TWFzaykgPT0gTm9kZVJlc3VsdFN0b3JhZ2U7CisgICAgfQor
CiAgICAgYm9vbCBpc0p1bXAoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gSnVtcDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAkocmV2aXNpb24gMTM0ODk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDY1LDIyICs0NjUsMjcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBwcm90b3R5cGVGb3JMb29rdXAoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgU3RydWN0dXJlQ2hhaW4qIFN0
cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4oRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIGlubGlu
ZSBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiAgICAgewog
ICAgICAgICAvLyBXZSBjYWNoZSBvdXIgcHJvdG90eXBlIGNoYWluIHNvIG91ciBjbGllbnRzIGNh
biBzaGFyZSBpdC4KLSAgICAgICAgaWYgKCFpc1ZhbGlkKGV4ZWMsIG1fY2FjaGVkUHJvdG90eXBl
Q2hhaW4uZ2V0KCkpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHByb3RvdHlw
ZUZvckxvb2t1cChleGVjKTsKLSAgICAgICAgICAgIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZShleGVjLT5n
bG9iYWxEYXRhKCksIHByb3RvdHlwZS5pc051bGwoKSA/IDAgOiBhc09iamVjdChwcm90b3R5cGUp
LT5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBpZiAoIWlzVmFsaWQoZ2xvYmFsT2JqZWN0LCBtX2Nh
Y2hlZFByb3RvdHlwZUNoYWluLmdldCgpKSkgeworICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5
cGUgPSBwcm90b3R5cGVGb3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIG1fY2Fj
aGVkUHJvdG90eXBlQ2hhaW4uc2V0KGdsb2JhbERhdGEsIHRoaXMsIFN0cnVjdHVyZUNoYWluOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLmlzTnVsbCgpID8gMCA6IGFzT2JqZWN0KHByb3Rv
dHlwZSktPnN0cnVjdHVyZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1fY2FjaGVk
UHJvdG90eXBlQ2hhaW4uZ2V0KCk7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgU3RydWN0dXJl
Ojppc1ZhbGlkKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlw
ZUNoYWluKSBjb25zdAorICAgIGlubGluZSBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlOjpwcm90
b3R5cGVDaGFpbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
cHJvdG90eXBlQ2hhaW4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpOworICAgIH0KKworICAgIGlubGluZSBib29sIFN0cnVjdHVyZTo6aXNWYWxpZChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBl
Q2hhaW4pIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIWNhY2hlZFByb3RvdHlwZUNoYWluKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0g
cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpOworICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHBy
b3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmplY3QpOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiogY2FjaGVkU3RydWN0dXJlID0gY2FjaGVkUHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsK
ICAgICAgICAgd2hpbGUoKmNhY2hlZFN0cnVjdHVyZSAmJiAhcHJvdG90eXBlLmlzTnVsbCgpKSB7
CiAgICAgICAgICAgICBpZiAoYXNPYmplY3QocHJvdG90eXBlKS0+c3RydWN0dXJlKCkgIT0gY2Fj
aGVkU3RydWN0dXJlLT5nZXQoKSkKQEAgLTQ5MSw2ICs0OTYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHJldHVybiBwcm90b3R5cGUuaXNOdWxsKCkgJiYgISpjYWNoZWRTdHJ1Y3R1cmU7
CiAgICAgfQogCisgICAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzVmFsaWQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWNo
ZWRQcm90b3R5cGVDaGFpbik7CisgICAgfQorCiAgICAgaW5saW5lIEpTR2xvYmFsT2JqZWN0KiBF
eGVjU3RhdGU6OmR5bmFtaWNHbG9iYWxPYmplY3QoKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMg
PT0gbGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMzQ4OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1Niw2ICszNTYsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICB9CiAK
KyAgICBpbmxpbmUgYm9vbCBpc1Byb3RvdHlwZUNoYWluTm9ybWFsaXplZChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGZv
ciAoOzspIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09
IFByb3h5VHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGds
b2JhbE9iamVjdCk7CisgICAgICAgICAgICBpZiAodi5pc051bGwoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RydWN0dXJlID0gdi5h
c0NlbGwoKS0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBPcGVyYXRp
b25zX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShy
ZXZpc2lvbiAxMzQ4OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDEyICsxNjYsMTUgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEV4ZWNTdGF0ZSopIGNvbnN0Owog
ICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCopIGNvbnN0
OwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChDb2RlQmxvY2sqKSBjb25zdDsK
KyAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEpTR2xvYmFsRGF0YSYsIEpT
R2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVD
aGFpbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgICAgICAKICAgICAgICAgLy8gV2lsbCBqdXN0
IHRoZSBwcm90b3R5cGUgY2hhaW4gaW50ZXJjZXB0IHRoaXMgcHJvcGVydHkgYWNjZXNzPwogICAg
ICAgICBib29sIHByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhKU0dsb2JhbERhdGEm
LCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICAKKyAgICAgICAgYm9vbCB0cmFuc2l0aW9uRGlkSW52
b2x2ZVNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiAhIW1fc3BlY2lmaWNWYWx1ZUluUHJl
dmlvdXM7IH0KKyAgICAgICAgCiAgICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXNJRCgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkg
PT0gJnNfaW5mbyk7CkBAIC00MDAsNiArNDAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICByZXR1cm4gbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1fdHlwZUlu
Zm8udHlwZSgpKTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgaXNWYWxpZChKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikgY29uc3Q7CiAgICAg
ICAgIGJvb2wgaXNWYWxpZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90
eXBlQ2hhaW4pIGNvbnN0OwogICAgICAgICAKICAgICAgICAgdm9pZCBwaW4oKTsK
</data>
<flag name="review"
          id="189991"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
    <flag name="commit-queue"
          id="189995"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>