<?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>64147</bug_id>
          
          <creation_ts>2011-07-07 22:09:54 -0700</creation_ts>
          <short_desc>DFG JIT does not implement prototype chain or list caching for get_by_id</short_desc>
          <delta_ts>2011-07-13 14:45:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>433890</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-07 22:09:54 -0700</bug_when>
    <thetext>The JSC JIT supports caching of prototype lists (if a get_by_id access may hit one of several prototypes) and chains (if a get_by_id access may hit a prototype at any depth in the prototype chain), as well as prototype chain lists (if a get_by_id access may hit one of several prototypes at varying depths in the prototype chain).  The DFG JIT supports prototype caching only, but should support prototype lists, chains, and chain lists to ensure good performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433896</commentid>
    <comment_count>1</comment_count>
      <attachid>100071</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-07 22:22:21 -0700</bug_when>
    <thetext>Created attachment 100071
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433901</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-07 22:25:45 -0700</bug_when>
    <thetext>Attachment 100071 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGRepatch.cpp:400:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433916</commentid>
    <comment_count>3</comment_count>
      <attachid>100079</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-07 23:29:14 -0700</bug_when>
    <thetext>Created attachment 100079
the patch (fix style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433954</commentid>
    <comment_count>4</comment_count>
      <attachid>100079</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-07-08 01:54:22 -0700</bug_when>
    <thetext>Comment on attachment 100079
the patch (fix style)

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

Sorry, just one minor style nit.

&gt; Source/JavaScriptCore/dfg/DFGRepatch.cpp:225
&gt; +        return false;

Please lose the { } here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433958</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-08 02:00:34 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 100079 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100079&amp;action=review
&gt; 
&gt; Sorry, just one minor style nit.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGRepatch.cpp:225
&gt; &gt; +        return false;
&gt; 
&gt; Please lose the { } here.

Ah, right.  Thanks for catching that.  Will fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436548</commentid>
    <comment_count>6</comment_count>
      <attachid>100692</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-13 11:29:19 -0700</bug_when>
    <thetext>Created attachment 100692
the patch

This patch subsumes https://bugs.webkit.org/show_bug.cgi?id=64077, in that the implementation of prototype chain and list caching involved redoing prototype caching.  I did it this way to make prototype caching, prototype chain caching, prototype list caching, and prototype list chain caching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436671</commentid>
    <comment_count>7</comment_count>
      <attachid>100692</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-13 14:44:57 -0700</bug_when>
    <thetext>Comment on attachment 100692
the patch

Clearing flags on attachment: 100692

Committed r90950: &lt;http://trac.webkit.org/changeset/90950&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436672</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-13 14:45:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100071</attachid>
            <date>2011-07-07 22:22:21 -0700</date>
            <delta_ts>2011-07-07 23:29:14 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>protochainlist_patch_1.diff</filename>
            <type>text/plain</type>
            <size>25123</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA2MTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAK
KzIwMTEtMDctMDcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGltcGxlbWVudCBwcm90b3R5cGUgY2hhaW4gb3IgbGlzdCBjYWNoaW5n
IGZvciBnZXRfYnlfaWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NDE0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIHVuaWZpZWQgc3VwcG9ydCBmb3IgcHJvdG90
eXBlIGNhY2hpbmcsIHByb3RvdHlwZSBjaGFpbgorICAgICAgICBjYWNoaW5nLCBhbmQgcG9seW1v
cnBoaWMgKGkuZS4gbGlzdCkgcHJvdG90eXBlIGFuZCBwcm90b3R5cGUgY2hhaW4KKyAgICAgICAg
Y2FjaGluZy4gIFRoaXMgaXMgZG9uZSBieSBmYWN0b3Jpbmcgb3V0IHRoZSBjb2RlIGZvciBlbWl0
dGluZyBhIHByb3RvdHlwZQorICAgICAgICBhY2Nlc3Mgc3R1YiBpbnRvIGdlbmVyYXRlUHJvdG9D
aGFpbkFjY2Vzc1N0dWIoKSwgYW5kIGV4dGVuZGluZyBpdCB0bworICAgICAgICBzdXBwb3J0IGJv
dGggZGlyZWN0IHByb3RvdHlwZSBjYWNoaW5nIGFuZCBwcm90b3R5cGUgY2hhaW4gY2FjaGluZyAo
d2hlcmUKKyAgICAgICAgYW4gYWNjZXNzIHRvIHRoZSBkaXJlY3QgcHJvdG90eXBlIG9mIGFuIG9i
amVjdCBpcyBzaW1wbHkgYW4gYWNjZXNzIHRocm91Z2gKKyAgICAgICAgYSBjaGFpbiB0aGF0IG9u
bHkgY29udGFpbnMgb25lIHByb3RvdHlwZSkuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieQor
ICAgICAgICB0cnlDYWNoZUdldEJ5SUQgb25jZSB0aGUgbGF0dGVyIGRldGVybWluZXMgdGhhdCBz
b21lIGZvcm0gb2YgcHJvdG90eXBlCisgICAgICAgIGFjY2VzcyBjYWNoaW5nIGlzIG5lY2Vzc2Fy
eSAoaS5lLiB0aGUgc2xvdCBiZWluZyBhY2Nlc3NlZCBpcyBub3Qgb24gdGhlCisgICAgICAgIGJh
c2UgdmFsdWUgYnV0IG9uIHNvbWUgb3RoZXIgb2JqZWN0KS4KKyAgICAgICAgCisgICAgICAgIERp
cmVjdCBwcm90b3R5cGUgbGlzdCwgYW5kIHByb3RvdHlwZSBjaGFpbiBsaXN0LCBjYWNoaW5nIGlz
IGltcGxlbWVudGVkIGJ5CisgICAgICAgIGxpbmtpbmcgdGhlIHNsb3cgcGF0aCB0byBvcGVyYXRp
b25HZXRCeUlkUHJvdG9CdWlsZExpc3QoKSwgd2hpY2ggdXNlcyB0aGUKKyAgICAgICAgc2FtZSBo
ZWxwZXIgZnVuY3Rpb24gKGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoKSkgYXMgdHJ5Q2Fj
aGVHZXRCeUlELgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgcmVxdWlyZWQgZW5zdXJp
bmcgdGhhdCB0aGUgdmFsdWUgaW4gdGhlIHNjcmF0Y2hHUFIgZmllbGQgaW4KKyAgICAgICAgU3Ry
dWN0dXJlU3R1YkluZm8gaXMgcHJlc2VydmVkIGV2ZW4gYWZ0ZXIgdGhlIHN0dWIgaW5mbyBpcyBp
biB0aGUKKyAgICAgICAgY2hhaW4sIG9yIHByb3RvX2xpc3QsIHN0YXRlcy4gIEhlbmNlIHNjcmF0
Y2hHUFIgd2FzIG1vdmVkIG91dCBvZiB0aGUgdW5pb24KKyAgICAgICAgYW5kIGludG8gdGhlIHRv
cC1sZXZlbCBvZiBTdHJ1Y3R1cmVTdHViSW5mby4KKyAgICAgICAgCisgICAgICAgICogYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9u
cy5oOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpl
bWl0UmVzdG9yZVNjcmF0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OmxpbmtSZXN0b3JlU2NyYXRj
aCk6CisgICAgICAgIChKU0M6OkRGRzo6Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1Yik6Cisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0
cnlCdWlsZEdldEJ5SURQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpERkc6OmRmZ0J1aWxkR2V0
QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAg
ICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorCiAyMDExLTA3LTA3ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIEpJVCBkb2VzIG5vdCBpbXBsZW1lbnQgb3Bf
Y29uc3RydWN0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDkwNjA4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
Myw2ICsxMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAg
ICAgaW50OF90IGJhc2VHUFI7CiAgICAgICAgIGludDhfdCB2YWx1ZUdQUjsKKyAgICAgICAgaW50
OF90IHNjcmF0Y2hHUFI7CiAgICAgICAgIGludDhfdCBkZWx0YUNhbGxUb0RvbmU7CiAgICAgICAg
IGludDhfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrOwogICAgICAgICBpbnQ4X3QgZGVsdGFDYWxs
VG9TbG93Q2FzZTsKQEAgLTE0Miw3ICsxNDMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgaW50OF90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7
CiAgICAgICAgICAgICAgICAgaW50OF90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7Ci0gICAgICAg
ICAgICAgICAgaW50OF90IHNjcmF0Y2hHUFI7CiAgICAgICAgICAgICB9IHVuc2V0OwogICAgICAg
ICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVy
ZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5MDYwOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsNyAr
Mzk4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgICAg
ICBpbmZvLmRlbHRhQ2FsbFRvRG9uZSA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2Fs
bFRvRG9uZTsKICAgICAgICAgaW5mby5iYXNlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1f
YmFzZUdQUjsKICAgICAgICAgaW5mby52YWx1ZUdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5t
X3ZhbHVlR1BSOwotICAgICAgICBpbmZvLnUudW5zZXQuc2NyYXRjaEdQUiA9IG1fcHJvcGVydHlB
Y2Nlc3Nlc1tpXS5tX3NjcmF0Y2hHUFI7CisgICAgICAgIGluZm8uc2NyYXRjaEdQUiA9IG1fcHJv
cGVydHlBY2Nlc3Nlc1tpXS5tX3NjcmF0Y2hHUFI7CiAgICAgfQogICAgIAogICAgIG1fY29kZUJs
b2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9qc0NhbGxzLnNpemUoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDkw
NjA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1OSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25H
ZXRCeUlkQnVpbGRMaXN0CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQog
CitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3RXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmllciosIFJldHVybkFk
ZHJlc3NQdHIpOworRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FSRzRfUkVUVVJOX0FERFJFU1Mob3Bl
cmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0KTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdl
dEJ5SWRQcm90b0J1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFs
dWUpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCAqcHJvcGVydHlO
YW1lLCBzbG90KTsKKworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBkZmdCdWlsZEdldEJ5
SURQcm90b0xpc3QoZXhlYywgYmFzZVZhbHVlLCAqcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5m
byk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKIEVuY29kZWRK
U1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKiwgUmV0dXJuQWRkcmVzc1B0cik7CiBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfQVJHNF9SRVRVUk5fQUREUkVTUyhvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplV2l0aFJldHVy
bkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRl
bnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24g
OTA2MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0
aE1vZChFbmNvZGVkCiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3Bl
cnR5KTsKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsKIEVuY29kZWRKU1ZhbHVlIG9wZXJh
dGlvbkdldEJ5SWRCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIElkZW50aWZpZXIqKTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1
aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmll
ciopOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKik7CiBFbmNvZGVkSlNWYWx1
ZSBvcGVyYXRpb25HZXRNZXRob2RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uSW5zdGFu
Y2VPZihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwgRW5jb2RlZEpTVmFsdWUgYmFz
ZSwgRW5jb2RlZEpTVmFsdWUgcHJvdG90eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gOTA2MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBA
IHN0YXRpYyB2b2lkIGRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2VzcyhDb2QKICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0
T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIHNpemVvZihK
U1ZhbHVlKSAqIG9mZnNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRjaChN
YWNyb0Fzc2VtYmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BSUmVn
IHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZUNhc2UxLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBmYWlsdXJlQ2FzZTIpCitzdGF0aWMgdm9pZCBlbWl0UmVzdG9yZVNjcmF0
Y2goTWFjcm9Bc3NlbWJsZXImIHN0dWJKaXQsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIEdQ
UlJlZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYgc3VjY2VzcywgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAmIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMp
CiB7CiAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7CiAgICAgICAgIHN0dWJKaXQucG9w
KHNjcmF0Y2hHUFIpOwpAQCAtNjQsOCArNjQsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UmVzdG9yZVNj
cmF0Y2goTWFjcm9Bc3NlCiAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9wIHNj
cmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KLSAgICAgICAgZmFpbHVyZUNhc2UxLmxpbmso
JnN0dWJKaXQpOwotICAgICAgICBmYWlsdXJlQ2FzZTIubGluaygmc3R1YkppdCk7CisgICAgICAg
IGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKICAgICAgICAgCiAgICAgICAgIHN0dWJKaXQu
cG9wKHNjcmF0Y2hHUFIpOwogICAgICAgICAKQEAgLTc2LDI0ICs3NSw3MSBAQCBzdGF0aWMgdm9p
ZCBlbWl0UmVzdG9yZVNjcmF0Y2goTWFjcm9Bc3NlCiAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVt
cCgpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0
Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlQ2FzZTEsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZhaWx1cmVDYXNlMikKK3N0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChM
aW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vz
c0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luKQogewotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmso
c3VjY2Vzcywgc3VjY2Vzc0xhYmVsKTsKICAgICAgICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhz
dWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICAKICAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gp
IHsKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0
bHkgYmFjayB0byBub3JtYWwgcGF0aAotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2Ux
LCBzbG93Q2FzZUJlZ2luKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlMiwgc2xv
d0Nhc2VCZWdpbik7CisgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNl
QmVnaW4pOwogfQotICAgICAgICAgICAgCisKK3N0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRj
aChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVy
ZUNhc2VzKQoreworICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxs
VG9TbG93Q2FzZSkpOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NT
dHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6ZV90IG9mZnNldCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFi
ZWwgc2xvd0Nhc2VMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwmIHN0dWJSb3V0aW5lKQoreworICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICBN
YWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgICAgICAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8uYmFzZUdQUik7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udmFsdWVHUFIpOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5zY3JhdGNoR1BSKTsKKyAg
ICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7CisgICAgCisgICAgaWYgKHNjcmF0
Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBzY3JhdGNoR1BSID0gSklUQ29kZUdl
bmVyYXRvcjo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBz
dHViSml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVD
YXNlczsKKyAgICAKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSkpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsK
KyAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb3VudDsgKytpLCArK2l0KSB7CisgICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qo
Y3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgc3R1Ykpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSwgc2NyYXRj
aEdQUik7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIocHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpKSkpOworICAgICAgICBjdXJyU3RydWN0dXJlID0g
aXQtPmdldCgpOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvdG9PYmplY3QtPnN0cnVjdHVyZSgp
LT5pc1VzaW5nSW5saW5lU3RvcmFnZSgpKQorICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgb2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKKyAgICBlbHNl
CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YWRkcmVzc09mUHJvcGVydHlB
dE9mZnNldChvZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBzdWNjZXNzLCBmYWlsOworICAgIAorICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHVi
Sml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFp
bHVyZUNhc2VzKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRh
LCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCktPmV4ZWN1dGFibGVQb29sKCkpOworICAgIAor
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVs
KTsKKyAgICAKKyAgICBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7Cit9CisKIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAg
IC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3Ig
cmVjdXJzaW9uIGhlcmUganVzdApAQCAtMTA1LDcgKzE1MSw3IEBAIHN0YXRpYyBib29sIHRyeUNh
Y2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBpZiAoaXNKU0FycmF5KGdsb2JhbERhdGEsIGJh
c2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
IHsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LmJhc2VHUFIpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby52YWx1ZUdQUik7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby51LnVuc2V0LnNjcmF0Y2hHUFIpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8uc2NyYXRjaEdQUik7
CiAgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKICAgICAgICAgCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CkBAIC0xMTYsMjYgKzE2MiwyNyBAQCBzdGF0
aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGZhaWx1cmVDYXNlMSA9IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGdsb2JhbERhdGEtPmpzQXJyYXlWUHRyKSk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisgICAgICAgIAorICAg
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGdsb2JhbERhdGEtPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAK
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBzdHViSml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZmFpbHVyZUNhc2UyID0gc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MCkpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDApKSk7CiAgICAgICAgIAogICAgICAgICBzdHViSml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwogICAgICAgICAKLSAgICAgICAgZW1pdFJl
c3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBz
dWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZTEsIGZhaWx1cmVDYXNlMik7CisgICAgICAgIGVtaXRS
ZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwg
c3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAgICAgICAgCiAgICAgICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxvY2stPmV4ZWN1dGFi
bGVQb29sKCkpOwogICAgICAgICAKLSAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVm
ZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1
cmVDYXNlMSwgZmFpbHVyZUNhc2UyKTsKKyAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNo
QnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZh
aWx1cmVDYXNlcyk7CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxh
YmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKICAgICAgICAgc3R1Yklu
Zm8uc3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgaG90UGF0aEJlZ2luID0gc3R1YkluZm8uaG90UGF0aEJlZ2luOwogICAgICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgZW50cnlMYWJlbCk7CiAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0
QnlJZCk7CkBAIC0xNTIsNyArMTk5LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4
ZWNTdGF0ZSogZQogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVy
ZSgpOwogICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKKyAgICBpZiAo
c3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpIHx8IHN0cnVjdHVyZS0+dHlwZUlu
Zm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCkBAIC0xNjgsNzEgKzIxNSwyOCBAQCBzdGF0
aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgaWYgKHN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICAvLyBPcHRp
bWl6ZSBhY2Nlc3NlcyBvbiB0aGUgZGlyZWN0IHByb3RvdHlwZQotICAgIGlmIChzbG90LnNsb3RC
YXNlKCkgPT0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpIHsKLSAgICAgICAg
aWYgKHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgIT0gUHJvcGVydHlTbG90OjpWYWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChzbG90LnNs
b3RCYXNlKCkuaXNPYmplY3QoKSk7Ci0gICAgICAgIAotICAgICAgICBKU09iamVjdCogc2xvdEJh
c2VPYmplY3QgPSBhc09iamVjdChzbG90LnNsb3RCYXNlKCkpOwotICAgICAgICBzaXplX3Qgb2Zm
c2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbG90QmFz
ZU9iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgICAgICBzbG90
QmFzZU9iamVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoKmdsb2JhbERhdGEpOwotICAgICAg
ICAgICAgb2Zmc2V0ID0gc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5nZXQoKmdsb2JhbERh
dGEsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVCgh
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7Ci0gICAgICAgIEFTU0VSVCghc2xvdEJhc2VPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSk7Ci0gICAgICAgIAotICAgICAgICBBU1NF
UlQoYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpID09IHNsb3RC
YXNlT2JqZWN0KTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5iYXNlR1BSKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udS51bnNldC5zY3JhdGNo
R1BSKTsKLSAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwotICAgICAg
ICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKLSAgICAgICAgCi0gICAgICAgIGlm
IChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSBKSVRDb2RlR2VuZXJhdG9yOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7
Ci0gICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmVDYXNlMSA9IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSkpOwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHNsb3RCYXNlT2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmVDYXNlMiA9IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHNs
b3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNVc2luZ0lubGluZVN0b3JhZ2UoKSkKLSAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXQgKiBzaXplb2YoSlNW
YWx1ZSkpLCByZXN1bHRHUFIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoc2xvdEJhc2VPYmplY3QtPmFkZHJlc3NPZlByb3BlcnR5QXRPZmZzZXQob2Zmc2V0KSwg
cmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3MsIGZhaWw7Ci0gICAgICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwg
bmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVD
YXNlMSwgZmFpbHVyZUNhc2UyKTsKLSAgICAgICAgCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkp
OwotICAgICAgICAKLSAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlMSwg
ZmFpbHVyZUNhc2UyKTsKLSAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5
TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgICAgICBzdHVi
SW5mby5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7Ci0gICAgICAgIAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBob3RQYXRoQmVnaW4gPSBzdHViSW5mby5ob3RQYXRoQmVnaW47Ci0gICAgICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0
dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBlbnRyeUxhYmVsKTsKLSAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25H
ZXRCeUlkKTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkUHJvdG8oKmds
b2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgc2xvdEJh
c2VPYmplY3QtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gRklY
TUU6IG9wdGltaXplIGdldHRlcnMgYW5kIHNldHRlcnMKKyAgICBpZiAoc2xvdC5jYWNoZWRQcm9w
ZXJ0eVR5cGUoKSAhPSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgc2l6ZV90IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgc2l6
ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZVZhbHVlLCBzbG90
LnNsb3RCYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKKyAgICBpZiAoIWNvdW50KSB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90
eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgIAotICAgIC8v
IEZJWE1FOiBzaG91bGQgc3VwcG9ydCBjaGFpbiBhY2Nlc3NlcyEKLSAgICByZXR1cm4gZmFsc2U7
CisgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09iamVjdCgpKTsKKyAgICAKKyAgICBnZW5l
cmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwg
Y291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1
YkluZm8uc3R1YlJvdXRpbmUpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayks
IHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1aWxkTGlzdCk7Cisg
ICAgCisgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbik7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIHZvaWQgZGZnUmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKQEAgLTM3Nyw2
ICszODEsNzMgQEAgdm9pZCBkZmdCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYwogICAg
ICAgICBkZmdSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKIH0KIAorc3RhdGljIGJvb2wgdHJ5QnVpbGRH
ZXRCeUlEUHJvdG9MaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkK
KyAgICAgICAgfHwgIXNsb3QuaXNDYWNoZWFibGUoKQorICAgICAgICB8fCBiYXNlVmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKQorICAgICAgICB8fCBiYXNlVmFsdWUu
YXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZygpCisgICAgICAgIHx8IHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKKyAgICAgICAgfHwg
c2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSAhPSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09iamVj
dCgpKTsKKyAgICAKKyAgICBzaXplX3Qgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAg
ICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlVmFsdWUs
IHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOworICAgIGlmICghY291bnQp
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICBTdHJ1Y3R1cmVDaGFp
biogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKKyAgICBp
bnQgbGlzdEluZGV4ID0gMTsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfZ2V0X2J5X2lkX2NoYWluKSB7CisgICAgICAgIEFTU0VSVCghIXN0dWJJbmZvLnN0dWJS
b3V0aW5lKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdl
dCgpKTsKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25MYWJlbCgp
OworICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFByb3RvTGlzdChwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QsIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChzdHViSW5mby5hY2Nl
c3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0KTsKKyAgICAgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxp
c3Q7CisgICAgICAgIGxpc3RJbmRleCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0
U2l6ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSkgeworICAgICAgICBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNp
emUrKzsKKyAgICAgICAgCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2lu
ID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0
aW5lOworICAgICAgICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CisKKyAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgZW50cnlMYWJlbDsKKyAgICAgICAgCisgICAgICAgIGdlbmVyYXRlUHJvdG9D
aGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSksIGxhc3RQcm90b0JlZ2luLCBlbnRyeUxhYmVsKTsK
KyAgICAgICAgCisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5k
ZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlM
YWJlbCwgc3RydWN0dXJlKTsKKyAgICAgICAgCisgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVt
cExvY2F0aW9uID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKKyAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgICAgIAorICAgICAgICBpZiAobGlzdEluZGV4IDwg
KFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBkZmdCdWlsZEdl
dEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBib29sIGRvbnRDaGFuZ2VDYWxsID0gdHJ5
QnVpbGRHZXRCeUlEUHJvdG9MaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbyk7CisgICAgaWYgKCFkb250Q2hhbmdlQ2FsbCkKKyAgICAgICAgZGZnUmVwYXRj
aENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uR2V0QnlJZCk7Cit9CisKIHN0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkpJIGFwcHJvcHJp
YXRlUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBw
dXRLaW5kKQogewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7CkBAIC00MzIsNyArNTAz
LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8uYmFzZUdQUik7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnZhbHVlR1BSKTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby51LnVuc2V0LnNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9
IGZhbHNlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUiAhPSBi
YXNlR1BSKTsKQEAgLTQ4OSw3ICs1NjAsNiBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQo
RXhlY1N0YXRlKiBlCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0g
cGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKICAgICAgICAgICAgIHN0dWJJbmZv
LnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luID0gc3R1YkluZm8uaG90UGF0aEJlZ2luOwogICAg
ICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVt
cEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBlbnRyeUxhYmVsKTsK
ICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgYXBwcm9wcmlhdGVQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHJldmlzaW9uIDkwNjA4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogdm9pZCBkZmdS
ZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZnUmVwYXRjaEdl
dE1ldGhvZChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiwgTWV0aG9kQ2FsbExpbmtJbmZvJik7CiB2b2lkIGRmZ0J1aWxkR2V0QnlJRExp
c3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIGRmZ0J1aWxkR2V0QnlJRFByb3RvTGlz
dChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZnUmVwYXRjaFB1dEJ5SUQoRXhlY1N0
YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYs
IFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7CiB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRl
KiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100079</attachid>
            <date>2011-07-07 23:29:14 -0700</date>
            <delta_ts>2011-07-13 11:29:19 -0700</delta_ts>
            <desc>the patch (fix style)</desc>
            <filename>protochainlist_patch_2.diff</filename>
            <type>text/plain</type>
            <size>25114</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA2MTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAK
KzIwMTEtMDctMDcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGltcGxlbWVudCBwcm90b3R5cGUgY2hhaW4gb3IgbGlzdCBjYWNoaW5n
IGZvciBnZXRfYnlfaWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NDE0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIHVuaWZpZWQgc3VwcG9ydCBmb3IgcHJvdG90
eXBlIGNhY2hpbmcsIHByb3RvdHlwZSBjaGFpbgorICAgICAgICBjYWNoaW5nLCBhbmQgcG9seW1v
cnBoaWMgKGkuZS4gbGlzdCkgcHJvdG90eXBlIGFuZCBwcm90b3R5cGUgY2hhaW4KKyAgICAgICAg
Y2FjaGluZy4gIFRoaXMgaXMgZG9uZSBieSBmYWN0b3Jpbmcgb3V0IHRoZSBjb2RlIGZvciBlbWl0
dGluZyBhIHByb3RvdHlwZQorICAgICAgICBhY2Nlc3Mgc3R1YiBpbnRvIGdlbmVyYXRlUHJvdG9D
aGFpbkFjY2Vzc1N0dWIoKSwgYW5kIGV4dGVuZGluZyBpdCB0bworICAgICAgICBzdXBwb3J0IGJv
dGggZGlyZWN0IHByb3RvdHlwZSBjYWNoaW5nIGFuZCBwcm90b3R5cGUgY2hhaW4gY2FjaGluZyAo
d2hlcmUKKyAgICAgICAgYW4gYWNjZXNzIHRvIHRoZSBkaXJlY3QgcHJvdG90eXBlIG9mIGFuIG9i
amVjdCBpcyBzaW1wbHkgYW4gYWNjZXNzIHRocm91Z2gKKyAgICAgICAgYSBjaGFpbiB0aGF0IG9u
bHkgY29udGFpbnMgb25lIHByb3RvdHlwZSkuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieQor
ICAgICAgICB0cnlDYWNoZUdldEJ5SUQgb25jZSB0aGUgbGF0dGVyIGRldGVybWluZXMgdGhhdCBz
b21lIGZvcm0gb2YgcHJvdG90eXBlCisgICAgICAgIGFjY2VzcyBjYWNoaW5nIGlzIG5lY2Vzc2Fy
eSAoaS5lLiB0aGUgc2xvdCBiZWluZyBhY2Nlc3NlZCBpcyBub3Qgb24gdGhlCisgICAgICAgIGJh
c2UgdmFsdWUgYnV0IG9uIHNvbWUgb3RoZXIgb2JqZWN0KS4KKyAgICAgICAgCisgICAgICAgIERp
cmVjdCBwcm90b3R5cGUgbGlzdCwgYW5kIHByb3RvdHlwZSBjaGFpbiBsaXN0LCBjYWNoaW5nIGlz
IGltcGxlbWVudGVkIGJ5CisgICAgICAgIGxpbmtpbmcgdGhlIHNsb3cgcGF0aCB0byBvcGVyYXRp
b25HZXRCeUlkUHJvdG9CdWlsZExpc3QoKSwgd2hpY2ggdXNlcyB0aGUKKyAgICAgICAgc2FtZSBo
ZWxwZXIgZnVuY3Rpb24gKGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoKSkgYXMgdHJ5Q2Fj
aGVHZXRCeUlELgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgcmVxdWlyZWQgZW5zdXJp
bmcgdGhhdCB0aGUgdmFsdWUgaW4gdGhlIHNjcmF0Y2hHUFIgZmllbGQgaW4KKyAgICAgICAgU3Ry
dWN0dXJlU3R1YkluZm8gaXMgcHJlc2VydmVkIGV2ZW4gYWZ0ZXIgdGhlIHN0dWIgaW5mbyBpcyBp
biB0aGUKKyAgICAgICAgY2hhaW4sIG9yIHByb3RvX2xpc3QsIHN0YXRlcy4gIEhlbmNlIHNjcmF0
Y2hHUFIgd2FzIG1vdmVkIG91dCBvZiB0aGUgdW5pb24KKyAgICAgICAgYW5kIGludG8gdGhlIHRv
cC1sZXZlbCBvZiBTdHJ1Y3R1cmVTdHViSW5mby4KKyAgICAgICAgCisgICAgICAgICogYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9u
cy5oOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpl
bWl0UmVzdG9yZVNjcmF0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OmxpbmtSZXN0b3JlU2NyYXRj
aCk6CisgICAgICAgIChKU0M6OkRGRzo6Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1Yik6Cisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0
cnlCdWlsZEdldEJ5SURQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpERkc6OmRmZ0J1aWxkR2V0
QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAg
ICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorCiAyMDExLTA3LTA3ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIEpJVCBkb2VzIG5vdCBpbXBsZW1lbnQgb3Bf
Y29uc3RydWN0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDkwNjA4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
Myw2ICsxMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAg
ICAgaW50OF90IGJhc2VHUFI7CiAgICAgICAgIGludDhfdCB2YWx1ZUdQUjsKKyAgICAgICAgaW50
OF90IHNjcmF0Y2hHUFI7CiAgICAgICAgIGludDhfdCBkZWx0YUNhbGxUb0RvbmU7CiAgICAgICAg
IGludDhfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrOwogICAgICAgICBpbnQ4X3QgZGVsdGFDYWxs
VG9TbG93Q2FzZTsKQEAgLTE0Miw3ICsxNDMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgaW50OF90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7
CiAgICAgICAgICAgICAgICAgaW50OF90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7Ci0gICAgICAg
ICAgICAgICAgaW50OF90IHNjcmF0Y2hHUFI7CiAgICAgICAgICAgICB9IHVuc2V0OwogICAgICAg
ICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVy
ZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5MDYwOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsNyAr
Mzk4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgICAg
ICBpbmZvLmRlbHRhQ2FsbFRvRG9uZSA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2Fs
bFRvRG9uZTsKICAgICAgICAgaW5mby5iYXNlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1f
YmFzZUdQUjsKICAgICAgICAgaW5mby52YWx1ZUdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5t
X3ZhbHVlR1BSOwotICAgICAgICBpbmZvLnUudW5zZXQuc2NyYXRjaEdQUiA9IG1fcHJvcGVydHlB
Y2Nlc3Nlc1tpXS5tX3NjcmF0Y2hHUFI7CisgICAgICAgIGluZm8uc2NyYXRjaEdQUiA9IG1fcHJv
cGVydHlBY2Nlc3Nlc1tpXS5tX3NjcmF0Y2hHUFI7CiAgICAgfQogICAgIAogICAgIG1fY29kZUJs
b2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9qc0NhbGxzLnNpemUoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDkw
NjA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1OSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25H
ZXRCeUlkQnVpbGRMaXN0CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQog
CitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3RXaXRoUmV0dXJu
QWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmllciosIFJldHVybkFk
ZHJlc3NQdHIpOworRlVOQ1RJT05fV1JBUFBFUl9XSVRIX0FSRzRfUkVUVVJOX0FERFJFU1Mob3Bl
cmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0KTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdl
dEJ5SWRQcm90b0J1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFs
dWUpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCAqcHJvcGVydHlO
YW1lLCBzbG90KTsKKworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBkZmdCdWlsZEdldEJ5
SURQcm90b0xpc3QoZXhlYywgYmFzZVZhbHVlLCAqcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5m
byk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKIEVuY29kZWRK
U1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKiwgUmV0dXJuQWRkcmVzc1B0cik7CiBGVU5D
VElPTl9XUkFQUEVSX1dJVEhfQVJHNF9SRVRVUk5fQUREUkVTUyhvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplV2l0aFJldHVy
bkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRl
bnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24g
OTA2MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0
aE1vZChFbmNvZGVkCiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3Bl
cnR5KTsKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsKIEVuY29kZWRKU1ZhbHVlIG9wZXJh
dGlvbkdldEJ5SWRCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIElkZW50aWZpZXIqKTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1
aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmll
ciopOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKik7CiBFbmNvZGVkSlNWYWx1
ZSBvcGVyYXRpb25HZXRNZXRob2RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uSW5zdGFu
Y2VPZihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwgRW5jb2RlZEpTVmFsdWUgYmFz
ZSwgRW5jb2RlZEpTVmFsdWUgcHJvdG90eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gOTA2MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBA
IHN0YXRpYyB2b2lkIGRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2VzcyhDb2QKICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWwzMkF0
T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSksIHNpemVvZihK
U1ZhbHVlKSAqIG9mZnNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlU2NyYXRjaChN
YWNyb0Fzc2VtYmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgR1BSUmVn
IHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZUNhc2UxLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBmYWlsdXJlQ2FzZTIpCitzdGF0aWMgdm9pZCBlbWl0UmVzdG9yZVNjcmF0
Y2goTWFjcm9Bc3NlbWJsZXImIHN0dWJKaXQsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIEdQ
UlJlZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYgc3VjY2VzcywgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAmIGZhaWwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMp
CiB7CiAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7CiAgICAgICAgIHN0dWJKaXQucG9w
KHNjcmF0Y2hHUFIpOwpAQCAtNjQsOCArNjQsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UmVzdG9yZVNj
cmF0Y2goTWFjcm9Bc3NlCiAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIGxpbmsgZmFpbHVyZSBjYXNlcyBoZXJlLCBzbyB3ZSBjYW4gcG9wIHNj
cmF0Y2hHUFIsIGFuZCB0aGVuIGp1bXAgYmFjay4KLSAgICAgICAgZmFpbHVyZUNhc2UxLmxpbmso
JnN0dWJKaXQpOwotICAgICAgICBmYWlsdXJlQ2FzZTIubGluaygmc3R1YkppdCk7CisgICAgICAg
IGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKICAgICAgICAgCiAgICAgICAgIHN0dWJKaXQu
cG9wKHNjcmF0Y2hHUFIpOwogICAgICAgICAKQEAgLTc2LDI0ICs3NSw3MSBAQCBzdGF0aWMgdm9p
ZCBlbWl0UmVzdG9yZVNjcmF0Y2goTWFjcm9Bc3NlCiAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVt
cCgpOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlciYgcGF0
Y2hCdWZmZXIsIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlQ2FzZTEsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZhaWx1cmVDYXNlMikKK3N0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChM
aW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vz
c0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luKQogewotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKLSAgICAKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmso
c3VjY2Vzcywgc3VjY2Vzc0xhYmVsKTsKICAgICAgICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhz
dWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICAKICAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gp
IHsKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0
bHkgYmFjayB0byBub3JtYWwgcGF0aAotICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2Ux
LCBzbG93Q2FzZUJlZ2luKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlMiwgc2xv
d0Nhc2VCZWdpbik7CisgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHNsb3dDYXNl
QmVnaW4pOwogfQotICAgICAgICAgICAgCisKK3N0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRj
aChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVy
ZUNhc2VzKQoreworICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxs
VG9TbG93Q2FzZSkpOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NT
dHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6ZV90IG9mZnNldCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFi
ZWwgc2xvd0Nhc2VMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwmIHN0dWJSb3V0aW5lKQoreworICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICBN
YWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgICAgICAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8uYmFzZUdQUik7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udmFsdWVHUFIpOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5zY3JhdGNoR1BSKTsKKyAg
ICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7CisgICAgCisgICAgaWYgKHNjcmF0
Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBzY3JhdGNoR1BSID0gSklUQ29kZUdl
bmVyYXRvcjo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBz
dHViSml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVD
YXNlczsKKyAgICAKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSkpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsK
KyAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb3VudDsgKytpLCArK2l0KSB7CisgICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qo
Y3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpKTsKKyAgICAgICAgc3R1Ykpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSwgc2NyYXRj
aEdQUik7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIocHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpKSkpOworICAgICAgICBjdXJyU3RydWN0dXJlID0g
aXQtPmdldCgpOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvdG9PYmplY3QtPnN0cnVjdHVyZSgp
LT5pc1VzaW5nSW5saW5lU3RvcmFnZSgpKQorICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgb2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKKyAgICBlbHNl
CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YWRkcmVzc09mUHJvcGVydHlB
dE9mZnNldChvZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBzdWNjZXNzLCBmYWlsOworICAgIAorICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHVi
Sml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFp
bHVyZUNhc2VzKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRh
LCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCktPmV4ZWN1dGFibGVQb29sKCkpOworICAgIAor
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVs
KTsKKyAgICAKKyAgICBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7Cit9CisKIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAg
IC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3Ig
cmVjdXJzaW9uIGhlcmUganVzdApAQCAtMTA1LDcgKzE1MSw3IEBAIHN0YXRpYyBib29sIHRyeUNh
Y2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBpZiAoaXNKU0FycmF5KGdsb2JhbERhdGEsIGJh
c2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
IHsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LmJhc2VHUFIpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby52YWx1ZUdQUik7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby51LnVuc2V0LnNjcmF0Y2hHUFIpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8uc2NyYXRjaEdQUik7
CiAgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKICAgICAgICAgCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CkBAIC0xMTYsMjYgKzE2MiwyNyBAQCBzdGF0
aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGZhaWx1cmVDYXNlMSA9IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGdsb2JhbERhdGEtPmpzQXJyYXlWUHRyKSk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisgICAgICAgIAorICAg
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGdsb2JhbERhdGEtPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAK
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBzdHViSml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZmFpbHVyZUNhc2UyID0gc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MCkpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDApKSk7CiAgICAgICAgIAogICAgICAgICBzdHViSml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwogICAgICAgICAKLSAgICAgICAgZW1pdFJl
c3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBz
dWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZTEsIGZhaWx1cmVDYXNlMik7CisgICAgICAgIGVtaXRS
ZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwg
c3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAgICAgICAgCiAgICAgICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxvY2stPmV4ZWN1dGFi
bGVQb29sKCkpOwogICAgICAgICAKLSAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVm
ZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1
cmVDYXNlMSwgZmFpbHVyZUNhc2UyKTsKKyAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNo
QnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZh
aWx1cmVDYXNlcyk7CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxh
YmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKICAgICAgICAgc3R1Yklu
Zm8uc3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgaG90UGF0aEJlZ2luID0gc3R1YkluZm8uaG90UGF0aEJlZ2luOwogICAgICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgZW50cnlMYWJlbCk7CiAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0
QnlJZCk7CkBAIC0xNTIsNyArMTk5LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4
ZWNTdGF0ZSogZQogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVy
ZSgpOwogICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKKyAgICBpZiAo
c3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpIHx8IHN0cnVjdHVyZS0+dHlwZUlu
Zm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCkBAIC0xNjgsNzEgKzIxNSwyOCBAQCBzdGF0
aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgaWYgKHN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICAvLyBPcHRp
bWl6ZSBhY2Nlc3NlcyBvbiB0aGUgZGlyZWN0IHByb3RvdHlwZQotICAgIGlmIChzbG90LnNsb3RC
YXNlKCkgPT0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpIHsKLSAgICAgICAg
aWYgKHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgIT0gUHJvcGVydHlTbG90OjpWYWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChzbG90LnNs
b3RCYXNlKCkuaXNPYmplY3QoKSk7Ci0gICAgICAgIAotICAgICAgICBKU09iamVjdCogc2xvdEJh
c2VPYmplY3QgPSBhc09iamVjdChzbG90LnNsb3RCYXNlKCkpOwotICAgICAgICBzaXplX3Qgb2Zm
c2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbG90QmFz
ZU9iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgICAgICBzbG90
QmFzZU9iamVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoKmdsb2JhbERhdGEpOwotICAgICAg
ICAgICAgb2Zmc2V0ID0gc2xvdEJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5nZXQoKmdsb2JhbERh
dGEsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVCgh
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7Ci0gICAgICAgIEFTU0VSVCghc2xvdEJhc2VPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSk7Ci0gICAgICAgIAotICAgICAgICBBU1NF
UlQoYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykpID09IHNsb3RC
YXNlT2JqZWN0KTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5iYXNlR1BSKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udmFsdWVHUFIpOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udS51bnNldC5zY3JhdGNo
R1BSKTsKLSAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwotICAgICAg
ICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKLSAgICAgICAgCi0gICAgICAgIGlm
IChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIg
PSBKSVRDb2RlR2VuZXJhdG9yOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7
Ci0gICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmVDYXNlMSA9IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSkpOwotICAgICAgICAKLSAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHNsb3RCYXNlT2JqZWN0KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmVDYXNlMiA9IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHNsb3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHNs
b3RCYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNVc2luZ0lubGluZVN0b3JhZ2UoKSkKLSAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXQgKiBzaXplb2YoSlNW
YWx1ZSkpLCByZXN1bHRHUFIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoc2xvdEJhc2VPYmplY3QtPmFkZHJlc3NPZlByb3BlcnR5QXRPZmZzZXQob2Zmc2V0KSwg
cmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nl
c3MsIGZhaWw7Ci0gICAgICAgIAotICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwg
bmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVD
YXNlMSwgZmFpbHVyZUNhc2UyKTsKLSAgICAgICAgCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkp
OwotICAgICAgICAKLSAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlMSwg
ZmFpbHVyZUNhc2UyKTsKLSAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5
TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgICAgICBzdHVi
SW5mby5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7Ci0gICAgICAgIAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBob3RQYXRoQmVnaW4gPSBzdHViSW5mby5ob3RQYXRoQmVnaW47Ci0gICAgICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0
dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBlbnRyeUxhYmVsKTsKLSAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25H
ZXRCeUlkKTsKLSAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkUHJvdG8oKmds
b2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgc2xvdEJh
c2VPYmplY3QtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gRklY
TUU6IG9wdGltaXplIGdldHRlcnMgYW5kIHNldHRlcnMKKyAgICBpZiAoc2xvdC5jYWNoZWRQcm9w
ZXJ0eVR5cGUoKSAhPSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgc2l6ZV90IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgc2l6
ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZVZhbHVlLCBzbG90
LnNsb3RCYXNlKCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKKyAgICBpZiAoIWNvdW50KSB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90
eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgIAotICAgIC8v
IEZJWE1FOiBzaG91bGQgc3VwcG9ydCBjaGFpbiBhY2Nlc3NlcyEKLSAgICByZXR1cm4gZmFsc2U7
CisgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09iamVjdCgpKTsKKyAgICAKKyAgICBnZW5l
cmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwg
Y291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1
YkluZm8uc3R1YlJvdXRpbmUpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayks
IHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1aWxkTGlzdCk7Cisg
ICAgCisgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbik7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIHZvaWQgZGZnUmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKQEAgLTM3Nyw2
ICszODEsNzIgQEAgdm9pZCBkZmdCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYwogICAg
ICAgICBkZmdSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKIH0KIAorc3RhdGljIGJvb2wgdHJ5QnVpbGRH
ZXRCeUlEUHJvdG9MaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkK
KyAgICAgICAgfHwgIXNsb3QuaXNDYWNoZWFibGUoKQorICAgICAgICB8fCBiYXNlVmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKQorICAgICAgICB8fCBiYXNlVmFsdWUu
YXNDZWxsKCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZygpCisgICAgICAgIHx8IHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKKyAgICAgICAgfHwg
c2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSAhPSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09iamVj
dCgpKTsKKyAgICAKKyAgICBzaXplX3Qgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAg
ICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlVmFsdWUs
IHNsb3Quc2xvdEJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOworICAgIGlmICghY291bnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFz
ZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90
eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKKyAgICBpbnQgbGlzdElu
ZGV4ID0gMTsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0
X2J5X2lkX2NoYWluKSB7CisgICAgICAgIEFTU0VSVCghIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsK
KyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpKTsKKyAg
ICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAg
ICBzdHViSW5mby5pbml0R2V0QnlJZFByb3RvTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qs
IDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID0g
YWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0KTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxpc3Q7CisgICAg
ICAgIGxpc3RJbmRleCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSkgeworICAgICAgICBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemUrKzsKKyAg
ICAgICAgCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAg
ICAgICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CisKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgZW50cnlMYWJlbDsKKyAgICAgICAgCisgICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vz
c1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1
Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LmRlbHRhQ2FsbFRvRG9uZSksIGxhc3RQcm90b0JlZ2luLCBlbnRyeUxhYmVsKTsKKyAgICAgICAg
CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgq
Z2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgCisgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9u
ID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0
YUNhbGxUb1N0cnVjdENoZWNrKTsKKyAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KGNvZGVCbG9jayk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwg
ZW50cnlMYWJlbCk7CisgICAgICAgIAorICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBkZmdCdWlsZEdldEJ5SURQcm90
b0xpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKK3sKKyAgICBib29sIGRvbnRDaGFuZ2VDYWxsID0gdHJ5QnVpbGRHZXRC
eUlEUHJvdG9MaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5m
byk7CisgICAgaWYgKCFkb250Q2hhbmdlQ2FsbCkKKyAgICAgICAgZGZnUmVwYXRjaENhbGwoZXhl
Yy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0
QnlJZCk7Cit9CisKIHN0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkpJIGFwcHJvcHJpYXRlUHV0QnlJ
ZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQog
ewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7CkBAIC00MzIsNyArNTAyLDcgQEAgc3Rh
dGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8uYmFz
ZUdQUik7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KHN0dWJJbmZvLnZhbHVlR1BSKTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby51LnVuc2V0LnNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnNjcmF0
Y2hHUFIpOwogICAgICAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUiAhPSBiYXNlR1BSKTsK
QEAgLTQ4OSw3ICs1NTksNiBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRl
KiBlCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZm
ZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKICAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0
aW5lID0gZW50cnlMYWJlbDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgaG90UGF0aEJlZ2luID0gc3R1YkluZm8uaG90UGF0aEJlZ2luOwogICAgICAgICAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBlbnRyeUxhYmVsKTsKICAgICAgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBw
cm9wcmlhdGVQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHJldmlzaW9uIDkwNjA4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogdm9pZCBkZmdSZXBhdGNoR2V0
QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZnUmVwYXRjaEdldE1ldGhvZChF
eGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiwgTWV0aG9kQ2FsbExpbmtJbmZvJik7CiB2b2lkIGRmZ0J1aWxkR2V0QnlJRExpc3QoRXhlY1N0
YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0
cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIGRmZ0J1aWxkR2V0QnlJRFByb3RvTGlzdChFeGVjU3Rh
dGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZnUmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNW
YWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgUHV0S2luZCk7CiB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExp
bmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogCg==
</data>
<flag name="review"
          id="94706"
          type_id="1"
          status="-"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="94707"
          type_id="3"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100692</attachid>
            <date>2011-07-13 11:29:19 -0700</date>
            <delta_ts>2011-07-13 14:44:57 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>protochainlist_patch_3.diff</filename>
            <type>text/plain</type>
            <size>22261</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA4OTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAK
KzIwMTEtMDctMDcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGltcGxlbWVudCBwcm90b3R5cGUgY2hhaW4gb3IgbGlzdCBjYWNoaW5n
IGZvciBnZXRfYnlfaWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NDE0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIHVuaWZpZWQgc3VwcG9ydCBmb3IgcHJvdG90
eXBlIGNhY2hpbmcsIHByb3RvdHlwZSBjaGFpbgorICAgICAgICBjYWNoaW5nLCBhbmQgcG9seW1v
cnBoaWMgKGkuZS4gbGlzdCkgcHJvdG90eXBlIGFuZCBwcm90b3R5cGUgY2hhaW4KKyAgICAgICAg
Y2FjaGluZy4gIFRoaXMgaXMgZG9uZSBieSBjcmVhdGluZyBjb21tb24gY29kZSBmb3IgZW1pdHRp
bmcgcHJvdG90eXBlCisgICAgICAgIG9yIGNoYWluIGFjY2VzcyBzdHVicywgYW5kIGhhdmluZyBp
dCBmYWN0b3JlZCBvdXQgaW50bworICAgICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHVi
KCkuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieQorICAgICAgICB0cnlDYWNoZUdldEJ5SUQg
b25jZSB0aGUgbGF0dGVyIGRldGVybWluZXMgdGhhdCBzb21lIGZvcm0gb2YgcHJvdG90eXBlCisg
ICAgICAgIGFjY2VzcyBjYWNoaW5nIGlzIG5lY2Vzc2FyeSAoaS5lLiB0aGUgc2xvdCBiZWluZyBh
Y2Nlc3NlZCBpcyBub3Qgb24gdGhlCisgICAgICAgIGJhc2UgdmFsdWUgYnV0IG9uIHNvbWUgb3Ro
ZXIgb2JqZWN0KS4KKyAgICAgICAgCisgICAgICAgIERpcmVjdCBwcm90b3R5cGUgbGlzdCwgYW5k
IHByb3RvdHlwZSBjaGFpbiBsaXN0LCBjYWNoaW5nIGlzIGltcGxlbWVudGVkIGJ5CisgICAgICAg
IGxpbmtpbmcgdGhlIHNsb3cgcGF0aCB0byBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3Qo
KSwgd2hpY2ggdXNlcyB0aGUKKyAgICAgICAgc2FtZSBoZWxwZXIgZnVuY3Rpb24gKGdlbmVyYXRl
UHJvdG9DaGFpbkFjY2Vzc1N0dWIoKSkgYXMgdHJ5Q2FjaGVHZXRCeUlELgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgcmVxdWlyZWQgZW5zdXJpbmcgdGhhdCB0aGUgdmFsdWUgaW4gdGhl
IHNjcmF0Y2hHUFIgZmllbGQgaW4KKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8gaXMgcHJlc2Vy
dmVkIGV2ZW4gYWZ0ZXIgdGhlIHN0dWIgaW5mbyBpcyBpbiB0aGUKKyAgICAgICAgY2hhaW4sIG9y
IHByb3RvX2xpc3QsIHN0YXRlcy4gIEhlbmNlIHNjcmF0Y2hHUFIgd2FzIG1vdmVkIG91dCBvZiB0
aGUgdW5pb24KKyAgICAgICAgYW5kIGludG8gdGhlIHRvcC1sZXZlbCBvZiBTdHJ1Y3R1cmVTdHVi
SW5mby4KKyAgICAgICAgCisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoK
KyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdS
ZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UmVzdG9yZVNjcmF0Y2gpOgorICAg
ICAgICAoSlNDOjpERkc6OmxpbmtSZXN0b3JlU2NyYXRjaCk6CisgICAgICAgIChKU0M6OkRGRzo6
Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2Fj
aGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURQcm90b0xpc3Qp
OgorICAgICAgICAoSlNDOjpERkc6OmRmZ0J1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAg
IChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5o
OgorCiAyMDExLTA3LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgREZHIEpJVCBkb2VzIG5vdCBpbXBsZW1lbnQgb3BfY29uc3RydWN0LgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJl
dmlzaW9uIDkwODk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw2ICsxMzMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaW50OF90IGJhc2VHUFI7CiAgICAg
ICAgIGludDhfdCB2YWx1ZUdQUjsKKyAgICAgICAgaW50OF90IHNjcmF0Y2hHUFI7CiAgICAgICAg
IGludDhfdCBkZWx0YUNhbGxUb0RvbmU7CiAgICAgICAgIGludDhfdCBkZWx0YUNhbGxUb1N0cnVj
dENoZWNrOwogICAgICAgICBpbnQ4X3QgZGVsdGFDYWxsVG9TbG93Q2FzZTsKQEAgLTE0Miw3ICsx
NDMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg
ICAgICAgaW50OF90IGRlbHRhQ2hlY2tJbW1Ub0NhbGw7CiAgICAgICAgICAgICAgICAgaW50OF90
IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmU7Ci0gICAgICAgICAgICAgICAgaW50OF90IHNjcmF0Y2hH
UFI7CiAgICAgICAgICAgICB9IHVuc2V0OwogICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAg
ICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gYmFzZU9iamVjdFN0cnVjdHVyZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShy
ZXZpc2lvbiA5MDg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsNyArMzk4LDcgQEAgdm9pZCBKSVRDb21waWxl
cjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvRG9uZSA9
IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvRG9uZTsKICAgICAgICAgaW5mby5i
YXNlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fYmFzZUdQUjsKICAgICAgICAgaW5mby52
YWx1ZUdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3ZhbHVlR1BSOwotICAgICAgICBpbmZv
LnUudW5zZXQuc2NyYXRjaEdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3NjcmF0Y2hHUFI7
CisgICAgICAgIGluZm8uc2NyYXRjaEdQUiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3NjcmF0
Y2hHUFI7CiAgICAgfQogICAgIAogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5r
SW5mb3MobV9qc0NhbGxzLnNpemUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDkwODk1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1
OSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRp
b25HZXRCeUlkUHJvdG9CdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgSWRlbnRpZmllciosIFJldHVybkFkZHJlc3NQdHIpOworRlVOQ1RJT05fV1JB
UFBFUl9XSVRIX0FSRzRfUkVUVVJOX0FERFJFU1Mob3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRM
aXN0KTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1aWxkTGlzdFdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2Us
IElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQoreworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gYmFzZVZhbHVlLmdldChleGVjLCAqcHJvcGVydHlOYW1lLCBzbG90KTsKKworICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5mbyhy
ZXR1cm5BZGRyZXNzKTsKKyAgICBkZmdCdWlsZEdldEJ5SURQcm90b0xpc3QoZXhlYywgYmFzZVZh
bHVlLCAqcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbyk7CisKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVu
dGlmaWVyKiwgUmV0dXJuQWRkcmVzc1B0cik7CiBGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHNF9S
RVRVUk5fQUREUkVTUyhvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogRW5jb2RlZEpTVmFsdWUg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gOTA4OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aE1vZChFbmNvZGVkCiBFbmNvZGVkSlNW
YWx1ZSBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KTsKIEVuY29kZWRKU1ZhbHVlIG9w
ZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElk
ZW50aWZpZXIqKTsKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsKK0VuY29k
ZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwogRW5jb2RlZEpTVmFsdWUgb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBJZGVudGlmaWVyKik7CiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRNZXRob2RPcHRp
bWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciop
OwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uSW5zdGFuY2VPZihFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSB2YWx1ZSwgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgcHJvdG90
eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2
aXNpb24gOTA4OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw5MCBAQCBzdGF0aWMgdm9pZCBkZmdSZXBhdGNo
QnlJZFNlbGZBY2Nlc3MoQ29kCiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsMzJBdE9mZnNldChzdHViSW5mby51LnVuc2V0
LmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUpLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXQpOwogfQog
CitzdGF0aWMgdm9pZCBlbWl0UmVzdG9yZVNjcmF0Y2goTWFjcm9Bc3NlbWJsZXImIHN0dWJKaXQs
IGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIEdQUlJlZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCYgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGZhaWwsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMpCit7CisgICAgaWYgKG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoKSB7CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAgICAKKyAg
ICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgLy8gbGlu
ayBmYWlsdXJlIGNhc2VzIGhlcmUsIHNvIHdlIGNhbiBwb3Agc2NyYXRjaEdQUiwgYW5kIHRoZW4g
anVtcCBiYWNrLgorICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmc3R1YkppdCk7CisgICAgICAg
IAorICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgCisgICAgICAgIGZh
aWwgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBz
dWNjZXNzID0gc3R1YkppdC5qdW1wKCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2Ny
YXRjaChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwg
c3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luKQoreworICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3VjY2Vzc0xhYmVsKTsKKyAgICAgICAgCisgICAgaWYg
KG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbCwg
c2xvd0Nhc2VCZWdpbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gbGlu
ayBmYWlsdXJlIGNhc2VzIGRpcmVjdGx5IGJhY2sgdG8gbm9ybWFsIHBhdGgKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgc2xvd0Nhc2VCZWdpbik7Cit9CisKK3N0YXRpYyB2b2lk
IGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciwgYm9vbCBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBzdWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQoreworICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRj
aEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNl
cywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVs
dGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmF0
ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6ZV90IG9m
ZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJl
bCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwmIHN0
dWJSb3V0aW5lKQoreworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgICAgICAKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8uYmFzZUdQUik7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udmFsdWVH
UFIpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5m
by5zY3JhdGNoR1BSKTsKKyAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Cisg
ICAgCisgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBzY3Jh
dGNoR1BSID0gSklUQ29kZUdlbmVyYXRvcjo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgICAgIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0
dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGN1
cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0
ID0gY2hhaW4tPmhlYWQoKTsKKyAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7CisgICAgICAgIHByb3Rv
T2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMp
KTsKKyAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHBy
b3RvT2JqZWN0KSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1
YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpKSkpOworICAgICAg
ICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvdG9P
YmplY3QtPnN0cnVjdHVyZSgpLT5pc1VzaW5nSW5saW5lU3RvcmFnZSgpKQorICAgICAgICBzdHVi
Sml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVz
dWx0R1BSKTsKKyAgICBlbHNlCisgICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+
YWRkcmVzc09mUHJvcGVydHlBdE9mZnNldChvZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICAK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOworICAgIAorICAgIGVtaXRS
ZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwg
c3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCktPmV4ZWN1dGFi
bGVQb29sKCkpOworICAgIAorICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xh
YmVsLCBzbG93Q2FzZUxhYmVsKTsKKyAgICAKKyAgICBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVy
LmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Cit9CisKIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJ
RChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQogewogICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2Ug
bmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdApAQCAtNjcsNyArMTUxLDcgQEAg
c3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgIGlmIChpc0pTQXJy
YXkoZ2xvYmFsRGF0YSwgYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkgewogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8uYmFzZUdQUik7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnZhbHVlR1BSKTsKLSAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnUudW5zZXQuc2NyYXRjaEdQ
Uik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5zY3JhdGNoR1BSKTsKICAgICAgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZh
bHNlOwogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKQEAgLTc4LDQ5
ICsxNjIsMjcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAg
ICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsdXJlQ2FzZTEgPSBzdHViSml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihnbG9iYWxEYXRhLT5qc0Fy
cmF5VlB0cikpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2Vz
OworICAgICAgICAKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihnbG9iYWxEYXRhLT5qc0FycmF5VlB0
cikpKTsKICAgICAgICAgCiAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc2NyYXRjaEdQUik7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmVDYXNlMiA9IHN0dWJKaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAKICAgICAgICAgc3R1YkppdC5vclB0
cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7
CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKICAgICAgICAg
Ci0gICAgICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgewotICAgICAgICAgICAgc3R1Ykpp
dC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBz
dHViSml0Lmp1bXAoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gbGluayBmYWlsdXJl
IGNhc2VzIGhlcmUsIHNvIHdlIGNhbiBwb3Agc2NyYXRjaEdQUiwgYW5kIHRoZW4ganVtcCBiYWNr
LgotICAgICAgICAgICAgZmFpbHVyZUNhc2UxLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAgICAg
ZmFpbHVyZUNhc2UyLmxpbmsoJnN0dWJKaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
dHViSml0LnBvcChzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmFpbCA9
IHN0dWJKaXQuanVtcCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBz
dHViSml0Lmp1bXAoKTsKKyAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMp
OwogICAgICAgICAKICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwg
JnN0dWJKaXQsIGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CiAgICAgICAgIAotICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSk7Ci0gICAg
ICAgIAotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKQotICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBsaW5rIGZhaWx1cmUgY2FzZXMgZGlyZWN0bHkgYmFjayB0byBub3JtYWwgcGF0
aAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZTEsIHNsb3dDYXNlQmVn
aW4pOwotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZTIsIHNsb3dDYXNl
QmVnaW4pOwotICAgICAgICB9CisgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZl
ciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJl
Q2FzZXMpOwogICAgICAgICAKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9
IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CiAgICAgICAgIHN0dWJJbmZvLnN0
dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKICAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsIGhvdFBhdGhCZWdpbiA9IHN0dWJJbmZvLmhvdFBhdGhCZWdpbjsKICAgICAgICAgUmVwYXRj
aEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8u
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIGVudHJ5TGFiZWwpOwogICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQp
OwpAQCAtMTM3LDcgKzE5OSw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3Rh
dGUqIGUKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsK
ICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCisgICAgaWYgKHN0cnVj
dHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
cHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgpAQCAtMTUwLDggKzIxMiwzMCBAQCBzdGF0aWMgYm9v
bCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAKLSAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgcHJvdG90eXBlICYgY2hhaW4g
YWNjZXNzZXMhCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gRklYTUU6IG9wdGlt
aXplIGdldHRlcnMgYW5kIHNldHRlcnMKKyAgICBpZiAoc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUo
KSAhPSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgc2l6ZV90IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgc2l6ZV90IGNvdW50
ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNl
KCksIHByb3BlcnR5TmFtZSwgb2Zmc2V0KTsKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1
cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgIAorICAgIEFTU0VSVChzbG90LnNsb3RCYXNl
KCkuaXNPYmplY3QoKSk7CisgICAgCisgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1Yihl
eGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFD
YWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAK
KyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0
dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5zdHViUm91dGluZSk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVy
YXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3QpOworICAgIAorICAgIHN0dWJJbmZvLmluaXRHZXRC
eUlkQ2hhaW4oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVj
dHVyZSwgcHJvdG90eXBlQ2hhaW4pOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIGRmZ1Jl
cGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCkBAIC0yOTYsNiArMzgwLDcyIEBAIHZvaWQgZGZnQnVpbGRH
ZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgZGZnUmVwYXRjaENhbGwoZXhlYy0+
Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJ
ZCk7CiB9CiAKK3N0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
eworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpCisgICAgICAgIHx8ICFzbG90LmlzQ2FjaGVh
YmxlKCkKKyAgICAgICAgfHwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0
aW9uYXJ5KCkKKyAgICAgICAgfHwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQorICAgICAgICB8fCBzbG90LnNsb3RC
YXNlKCkgPT0gYmFzZVZhbHVlCisgICAgICAgIHx8IHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkg
IT0gUHJvcGVydHlTbG90OjpWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IEFTU0VSVChzbG90LnNsb3RCYXNlKCkuaXNPYmplY3QoKSk7CisgICAgCisgICAgc2l6ZV90IG9m
ZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXpl
UHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNlKCksIHByb3BlcnR5
TmFtZSwgb2Zmc2V0KTsKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJl
KCk7CisgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90
b3R5cGVDaGFpbihleGVjKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVC
bG9jaygpOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7CisgICAgCisgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3Q7CisgICAgaW50IGxpc3RJbmRleCA9IDE7CisgICAgCisgICAgaWYgKHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgeworICAgICAgICBB
U1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEs
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJSb3V0aW5lLCBzdHVi
SW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51
LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSk7CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5l
ID0gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRQcm90
b0xpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBBU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlz
dCk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJ
ZFByb3RvTGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51
LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemU7CisgICAgfQorICAgIAorICAgIGlmIChsaXN0SW5k
ZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKKyAgICAgICAgc3R1YkluZm8udS5n
ZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CisgICAgICAgIAorICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFts
aXN0SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICAgICAgQVNTRVJUKCEhbGFzdFByb3RvQmVn
aW4pOworCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWw7CisgICAgICAgIAor
ICAgICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90
b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBsYXN0UHJv
dG9CZWdpbiwgZW50cnlMYWJlbCk7CisgICAgICAgIAorICAgICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7CisgICAgICAgIAorICAgICAg
ICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayk7CisgICAg
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOworICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgZGZnQnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgYm9v
bCBkb250Q2hhbmdlQ2FsbCA9IHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdChleGVjLCBiYXNlVmFs
dWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOworICAgIGlmICghZG9udENoYW5nZUNh
bGwpCisgICAgICAgIGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworfQorCiBzdGF0aWMgVl9ERkdP
cGVyYXRpb25fRUpKSSBhcHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0
eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKIHsKICAgICBpZiAoc2xvdC5pc1N0cmljdE1v
ZGUoKSkgewpAQCAtMzUxLDcgKzUwMSw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChF
eGVjU3RhdGUqIGUKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLmJhc2VHUFIpOwogICAgICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby52YWx1ZUdQUik7Ci0gICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8u
dS51bnNldC5zY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5zY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGJvb2wg
bmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
QVNTRVJUKHNjcmF0Y2hHUFIgIT0gYmFzZUdQUik7CkBAIC00MDgsNyArNTU4LDYgQEAgc3RhdGlj
IGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7
CiAgICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbiA9IHN0dWJJ
bmZvLmhvdFBhdGhCZWdpbjsKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVj
dENoZWNrKSwgZW50cnlMYWJlbCk7CiAgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRj
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5o
CShyZXZpc2lvbiA5MDg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRj
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIHZvaWQgZGZnUmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7CiB2b2lkIGRmZ1JlcGF0Y2hHZXRNZXRob2QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIE1ldGhvZENhbGxMaW5rSW5mbyYpOwog
dm9pZCBkZmdCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBk
ZmdCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRm
Z1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogdm9p
ZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVu
Y3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShy
ZXZpc2lvbiA5MDg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw2ICsyMjAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uoc2l6ZV90IG9sZFNpemUsIHNpemVf
dCBuZXdTaXplKTsKICAgICAgICAgYm9vbCBpc1VzaW5nSW5saW5lU3RvcmFnZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihtX3Byb3BlcnR5U3RvcmFnZSkgPT0gc3Rh
dGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KHRoaXMgKyAxKTsgfQogCisgICAgICAgIHZvaWQqIGFkZHJl
c3NPZlByb3BlcnR5QXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPigmbV9wcm9wZXJ0eVN0b3JhZ2Vbb2Zmc2V0XSk7
CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmFzZUV4dGVybmFs
U3RvcmFnZUNhcGFjaXR5ID0gMTY7CiAKICAgICAgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9i
amVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>