<?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>121236</bug_id>
          
          <creation_ts>2013-09-12 10:39:49 -0700</creation_ts>
          <short_desc>MarkedBlocks shouldn&apos;t be put in Allocated state if they didn&apos;t produce a FreeList</short_desc>
          <delta_ts>2013-09-16 12:47:47 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</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>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>928373</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-12 10:39:49 -0700</bug_when>
    <thetext>Right now, after a collection all MarkedBlocks are in the Marked block state. When lazy sweeping happens, if a block returns an empty free list after being swept, we call didConsumeFreeList(), which moves the block into the Allocated block state. This happens to both the block that was just being allocated out of (i.e. m_currentBlock) as well as any blocks who are completely full. We should distinguish between these two cases: m_currentBlock should transition to Allocated (because we were just allocating out of it) and any subsequent block that returns an empty free list should transition back to the Marked state. This will make the block state more consistent with the actual state the block is in, and it will also allow us to speed up moving all blocks the the Marked state during generational collection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928374</commentid>
    <comment_count>1</comment_count>
      <attachid>211442</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-12 10:42:10 -0700</bug_when>
    <thetext>Created attachment 211442
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928387</commentid>
    <comment_count>2</comment_count>
      <attachid>211442</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-12 11:04:43 -0700</bug_when>
    <thetext>Comment on attachment 211442
Patch

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

r=me

&gt; Source/JavaScriptCore/heap/MarkedAllocator.cpp:42
&gt; +                block-&gt;didSweepButToNoAvail();

How about &quot;didConsumeEmptyFreeList&quot;? (&quot;No avail&quot; doesn&apos;t specify what you were trying to avail yourself of.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928390</commentid>
    <comment_count>3</comment_count>
      <attachid>211442</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-12 11:05:43 -0700</bug_when>
    <thetext>Comment on attachment 211442
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        all blocks the the Marked state during generational collection.

s/the the/to the/

&gt;&gt; Source/JavaScriptCore/heap/MarkedAllocator.cpp:42
&gt;&gt; +                block-&gt;didSweepButToNoAvail();
&gt; 
&gt; How about &quot;didConsumeEmptyFreeList&quot;? (&quot;No avail&quot; doesn&apos;t specify what you were trying to avail yourself of.)

Sounds good to me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928395</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-12 11:12:27 -0700</bug_when>
    <thetext>Committed r155632: &lt;http://trac.webkit.org/changeset/155632&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928532</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-12 15:39:03 -0700</bug_when>
    <thetext>Reopening because the patch was rolled out. Need to figure out what went wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928892</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-13 10:11:10 -0700</bug_when>
    <thetext>I think the issue was that there are other clients of canonicalize other than garbage collection that were screwing up the block state when they canonicalized prematurely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929025</commentid>
    <comment_count>7</comment_count>
      <attachid>211592</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-13 14:40:35 -0700</bug_when>
    <thetext>Created attachment 211592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929813</commentid>
    <comment_count>8</comment_count>
      <attachid>211592</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-16 10:59:21 -0700</bug_when>
    <thetext>Comment on attachment 211592
Patch

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

r=me

&gt; Source/JavaScriptCore/heap/MarkedAllocator.h:135
&gt; +inline void MarkedAllocator::uncanonicalizeCellLivenessData()
&gt; +{
&gt; +    if (!m_canonicalizedBlock)
&gt; +        return;
&gt; +
&gt; +    m_freeList = m_canonicalizedBlock-&gt;uncanonicalizeCellLivenessData();
&gt; +    m_currentBlock = m_canonicalizedBlock;
&gt; +    m_canonicalizedBlock = 0;
&gt; +}

Let&apos;s call these functions &quot;stopAllocating&quot; and &quot;resumeAllocating&quot;. That way, we&apos;re a little clearer about what&apos;s prohibited in this state. Otherwise, &quot;canonical&quot; doesn&apos;t sound like such a bad thing.

&gt; Source/JavaScriptCore/heap/MarkedSpace.h:86
&gt; +    bool iterationInProgress() { return m_currentlyIterating; }

Let&apos;s call this &quot;isIterating()&quot; and &quot;m_isIterating&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929879</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-16 12:47:47 -0700</bug_when>
    <thetext>Committed r155891: &lt;http://trac.webkit.org/changeset/155891&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211442</attachid>
            <date>2013-09-12 10:42:10 -0700</date>
            <delta_ts>2013-09-13 14:40:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121236-20130912104207.patch</filename>
            <type>text/plain</type>
            <size>3733</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1NjI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBA
CisyMDEzLTA5LTEyICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgTWFya2VkQmxvY2tzIHNob3VsZG4ndCBiZSBwdXQgaW4gQWxsb2NhdGVkIHN0YXRl
IGlmIHRoZXkgZGlkbid0IHByb2R1Y2UgYSBGcmVlTGlzdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMjM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmlnaHQgbm93LCBhZnRlciBhIGNvbGxlY3Rpb24g
YWxsIE1hcmtlZEJsb2NrcyBhcmUgaW4gdGhlIE1hcmtlZCBibG9jayBzdGF0ZS4gV2hlbiBsYXp5
IHN3ZWVwaW5nIAorICAgICAgICBoYXBwZW5zLCBpZiBhIGJsb2NrIHJldHVybnMgYW4gZW1wdHkg
ZnJlZSBsaXN0IGFmdGVyIGJlaW5nIHN3ZXB0LCB3ZSBjYWxsIGRpZENvbnN1bWVGcmVlTGlzdCgp
LCAKKyAgICAgICAgd2hpY2ggbW92ZXMgdGhlIGJsb2NrIGludG8gdGhlIEFsbG9jYXRlZCBibG9j
ayBzdGF0ZS4gVGhpcyBoYXBwZW5zIHRvIGJvdGggdGhlIGJsb2NrIHRoYXQgd2FzIAorICAgICAg
ICBqdXN0IGJlaW5nIGFsbG9jYXRlZCBvdXQgb2YgKGkuZS4gbV9jdXJyZW50QmxvY2spIGFzIHdl
bGwgYXMgYW55IGJsb2NrcyB3aG8gYXJlIGNvbXBsZXRlbHkgZnVsbC4gCisgICAgICAgIFdlIHNo
b3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZXNlIHR3byBjYXNlczogbV9jdXJyZW50QmxvY2sg
c2hvdWxkIHRyYW5zaXRpb24gdG8gCisgICAgICAgIEFsbG9jYXRlZCAoYmVjYXVzZSB3ZSB3ZXJl
IGp1c3QgYWxsb2NhdGluZyBvdXQgb2YgaXQpIGFuZCBhbnkgc3Vic2VxdWVudCBibG9jayB0aGF0
IHJldHVybnMgYW4gCisgICAgICAgIGVtcHR5IGZyZWUgbGlzdCBzaG91bGQgdHJhbnNpdGlvbiBi
YWNrIHRvIHRoZSBNYXJrZWQgc3RhdGUuIFRoaXMgd2lsbCBtYWtlIHRoZSBibG9jayBzdGF0ZSBt
b3JlIAorICAgICAgICBjb25zaXN0ZW50IHdpdGggdGhlIGFjdHVhbCBzdGF0ZSB0aGUgYmxvY2sg
aXMgaW4sIGFuZCBpdCB3aWxsIGFsc28gYWxsb3cgdXMgdG8gc3BlZWQgdXAgbW92aW5nIAorICAg
ICAgICBhbGwgYmxvY2tzIHRoZSB0aGUgTWFya2VkIHN0YXRlIGR1cmluZyBnZW5lcmF0aW9uYWwg
Y29sbGVjdGlvbi4KKworICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcik6CisgICAgICAgICog
aGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6ZGlkU3dlZXBC
dXRUb05vQXZhaWwpOgorCiAyMDEzLTA5LTEyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KIAogICAgICAgICBDaGFuZ2UgZGVidWcgaG9va3MgdG8gcGFzcyBzb3VyY2VJRCBhbmQgcG9z
aXRpb24gaW5mbyB2aWEgdGhlIERlYnVnZ2VyQ2FsbEZyYW1lLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxNTU0ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMTYgQEAgYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzUGFn
ZWRPdXQoZG91YmxlIAogaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVI
ZWxwZXIoc2l6ZV90IGJ5dGVzKQogewogICAgIGlmICghbV9mcmVlTGlzdC5oZWFkKSB7CisgICAg
ICAgIGlmIChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJs
b2NrID09IG1fYmxvY2tzVG9Td2VlcCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlk
Q29uc3VtZUZyZWVMaXN0KCk7CisgICAgICAgICAgICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2N1cnJl
bnRCbG9jay0+bmV4dCgpOworICAgICAgICB9CisKICAgICAgICAgZm9yIChNYXJrZWRCbG9jayom
IGJsb2NrID0gbV9ibG9ja3NUb1N3ZWVwOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKSB7
CiAgICAgICAgICAgICBNYXJrZWRCbG9jazo6RnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dl
ZXAoTWFya2VkQmxvY2s6OlN3ZWVwVG9GcmVlTGlzdCk7CiAgICAgICAgICAgICBpZiAoIWZyZWVM
aXN0LmhlYWQpIHsKLSAgICAgICAgICAgICAgICBibG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7
CisgICAgICAgICAgICAgICAgYmxvY2stPmRpZFN3ZWVwQnV0VG9Ob0F2YWlsKCk7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMTU1NDgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDYg
KzEzMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBvZiB0aGVzZSBmdW5jdGlvbnM6
CiAgICAgICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7IC8vIENhbGwgdGhpcyBvbmNlIHlv
dSd2ZSBhbGxvY2F0ZWQgYWxsIHRoZSBpdGVtcyBpbiB0aGUgZnJlZSBsaXN0LgogICAgICAgICB2
b2lkIGNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoY29uc3QgRnJlZUxpc3QmKTsKKyAgICAg
ICAgdm9pZCBkaWRTd2VlcEJ1dFRvTm9BdmFpbCgpOyAvLyBDYWxsIHRoaXMgaWYgeW91IHN3ZWVw
IGEgYmxvY2ssIGJ1dCB0aGUgcmV0dXJuZWQgRnJlZUxpc3QgaXMgZW1wdHkuCiAKICAgICAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSAibmV3bHkgYWxsb2NhdGVkIiBiaXRtYXAgd2FzIG5vbi1u
dWxsIAogICAgICAgICAvLyBhbmQgd2FzIHN1Y2Nlc3NmdWxseSBjbGVhcmVkIGFuZCBmYWxzZSBv
dGhlcndpc2UuCkBAIC0yNzcsNiArMjc4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBt
X3N0YXRlID0gQWxsb2NhdGVkOwogICAgIH0KIAorICAgIGlubGluZSB2b2lkIE1hcmtlZEJsb2Nr
OjpkaWRTd2VlcEJ1dFRvTm9BdmFpbCgpCisgICAgeworICAgICAgICBIRUFQX0xPR19CTE9DS19T
VEFURV9UUkFOU0lUSU9OKHRoaXMpOworCisgICAgICAgIEFTU0VSVChtX3N0YXRlID09IEZyZWVM
aXN0ZWQpOworICAgICAgICBtX3N0YXRlID0gTWFya2VkOworICAgIH0KKwogICAgIGlubGluZSB2
b2lkIE1hcmtlZEJsb2NrOjpjbGVhck1hcmtzKCkKICAgICB7CiAgICAgICAgIEhFQVBfTE9HX0JM
T0NLX1NUQVRFX1RSQU5TSVRJT04odGhpcyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211592</attachid>
            <date>2013-09-13 14:40:35 -0700</date>
            <delta_ts>2013-09-16 10:59:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121236-20130913143944.patch</filename>
            <type>text/plain</type>
            <size>32382</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1NzIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBA
CisyMDEzLTA5LTEzICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgTWFya2VkQmxvY2tzIHNob3VsZG4ndCBiZSBwdXQgaW4gQWxsb2NhdGVkIHN0YXRl
IGlmIHRoZXkgZGlkbid0IHByb2R1Y2UgYSBGcmVlTGlzdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMjM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmlnaHQgbm93LCBhZnRlciBhIGNvbGxlY3Rpb24g
YWxsIE1hcmtlZEJsb2NrcyBhcmUgaW4gdGhlIE1hcmtlZCBibG9jayBzdGF0ZS4gV2hlbiBsYXp5
IHN3ZWVwaW5nIAorICAgICAgICBoYXBwZW5zLCBpZiBhIGJsb2NrIHJldHVybnMgYW4gZW1wdHkg
ZnJlZSBsaXN0IGFmdGVyIGJlaW5nIHN3ZXB0LCB3ZSBjYWxsIGRpZENvbnN1bWVGcmVlTGlzdCgp
LCAKKyAgICAgICAgd2hpY2ggbW92ZXMgdGhlIGJsb2NrIGludG8gdGhlIEFsbG9jYXRlZCBibG9j
ayBzdGF0ZS4gVGhpcyBoYXBwZW5zIHRvIGJvdGggdGhlIGJsb2NrIHRoYXQgd2FzIAorICAgICAg
ICBqdXN0IGJlaW5nIGFsbG9jYXRlZCBvdXQgb2YgKGkuZS4gbV9jdXJyZW50QmxvY2spIGFzIHdl
bGwgYXMgYW55IGJsb2NrcyB3aG8gYXJlIGNvbXBsZXRlbHkgZnVsbC4gCisgICAgICAgIFdlIHNo
b3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZXNlIHR3byBjYXNlczogbV9jdXJyZW50QmxvY2sg
c2hvdWxkIHRyYW5zaXRpb24gdG8gCisgICAgICAgIEFsbG9jYXRlZCAoYmVjYXVzZSB3ZSB3ZXJl
IGp1c3QgYWxsb2NhdGluZyBvdXQgb2YgaXQpIGFuZCBhbnkgc3Vic2VxdWVudCBibG9jayB0aGF0
IHJldHVybnMgYW4gCisgICAgICAgIGVtcHR5IGZyZWUgbGlzdCBzaG91bGQgdHJhbnNpdGlvbiBi
YWNrIHRvIHRoZSBNYXJrZWQgc3RhdGUuIFRoaXMgd2lsbCBtYWtlIHRoZSBibG9jayBzdGF0ZSBt
b3JlIAorICAgICAgICBjb25zaXN0ZW50IHdpdGggdGhlIGFjdHVhbCBzdGF0ZSB0aGUgYmxvY2sg
aXMgaW4sIGFuZCBpdCB3aWxsIGFsc28gYWxsb3cgdXMgdG8gc3BlZWQgdXAgbW92aW5nIAorICAg
ICAgICBhbGwgYmxvY2tzIHRoZSB0aGUgTWFya2VkIHN0YXRlIGR1cmluZyBnZW5lcmF0aW9uYWwg
Y29sbGVjdGlvbi4KKworICAgICAgICBBZGRlZCBuZXcgUkFJSS1zdHlsZSBIZWFwSXRlcmF0aW9u
U2NvcGUgY2xhc3MgdGhhdCBub3RpZmllcyB0aGUgSGVhcCB3aGVuIGl0IGlzIGFib3V0IHRvIGJl
IAorICAgICAgICBpdGVyYXRlZCBhbmQgd2hlbiBpdGVyYXRpb24gaGFzIGZpbmlzaGVkLiBBbnkg
Y2xpZW50cyB0aGF0IG5lZWQgYWNjdXJhdGUgbGl2ZW5lc3MgZGF0YSB3aGVuIAorICAgICAgICBp
dGVyYXRpbmcgb3ZlciB0aGUgSGVhcCBub3cgbmVlZCB0byB1c2UgYSBIZWFwSXRlcmF0aW9uU2Nv
cGUgc28gdGhhdCB0aGUgc3RhdGUgb2YgSGVhcCBjYW4gCisgICAgICAgIGJlIHByb3Blcmx5IHJl
c3RvcmVkIGFmdGVyIHRoZXkgYXJlIGRvbmUgaXRlcmF0aW5nLiBObyBuZXcgR0MtYWxsb2NhdGVk
IG9iamVjdHMgY2FuIGJlIGNyZWF0ZWQgCisgICAgICAgIHVudGlsIHRoaXMgb2JqZWN0IGdvZXMg
b3V0IG9mIHNjb3BlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6IAorICAgICAgICAo
SlNDOjpEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMpOiBBZGRlZCBIZWFwSXRlcmF0
aW9uU2NvcGUgZm9yIHRoZSBSZWNvbXBpbGVyIGl0ZXJhdGlvbi4KKyAgICAgICAgKiBoZWFwL0hl
YXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmcpOiBDYWxsYmFj
ayB1c2VkIGJ5IEhlYXBJdGVyYXRpb25TY29wZSB0byBpbmRpY2F0ZSB0aGF0IGl0ZXJhdGlvbiBv
ZiAKKyAgICAgICAgdGhlIEhlYXAgaXMgYWJvdXQgdG8gYmVnaW4uIFRoaXMgd2lsbCBjYXVzZSBj
ZWxsIGxpdmVuZXNzIGRhdGEgdG8gYmUgY2Fub25pY2FsaXplZC4KKyAgICAgICAgKEpTQzo6SGVh
cDo6ZGlkRmluaXNoSXRlcmF0aW5nKTogU2FtZSwgYnV0IGluZGljYXRlcyB0aGF0IGl0ZXJhdGlv
biBoYXMgZmluaXNoZWQuCisgICAgICAgIChKU0M6OkhlYXA6Omdsb2JhbE9iamVjdENvdW50KTog
VXNlZCBIZWFwSXRlcmF0aW9uU2NvcGUuCisgICAgICAgIChKU0M6OkhlYXA6Om9iamVjdFR5cGVD
b3VudHMpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya0RlYWRPYmplY3RzKTogRGl0
dG8uCisgICAgICAgIChKU0M6OkhlYXA6OnpvbWJpZnlEZWFkT2JqZWN0cyk6IERpdHRvLgorICAg
ICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAvSGVhcEl0ZXJhdGlvblNjb3BlLmg6
IEFkZGVkLiBOZXcgUkFJSS1zdHlsZSBvYmplY3QgZm9yIGluZGljYXRpbmcgdG8gdGhlIEhlYXAg
dGhhdCBpdCdzIGFib3V0CisgICAgICAgIHRvIGJlIGl0ZXJhdGVkIG9yIHRoYXQgaXRlcmF0aW9u
IGhhcyBmaW5pc2hlZC4KKyAgICAgICAgKEpTQzo6SGVhcEl0ZXJhdGlvblNjb3BlOjpIZWFwSXRl
cmF0aW9uU2NvcGUpOgorICAgICAgICAoSlNDOjpIZWFwSXRlcmF0aW9uU2NvcGU6On5IZWFwSXRl
cmF0aW9uU2NvcGUpOgorICAgICAgICAqIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3BwOgorICAgICAg
ICAoSlNDOjpIZWFwU3RhdGlzdGljczo6c2hvd09iamVjdFN0YXRpc3RpY3MpOiBVc2VkIG5ldyBI
ZWFwSXRlcmF0aW9uU2NvcGUuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSGVscGVyKTogV2Ugbm93
IHRyZWF0IHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUganVzdCBmaW5pc2hlZCAKKyAgICAgICAgYWxs
b2NhdGluZyBvdXQgb2YgdGhlIGN1cnJlbnQgYmxvY2sgZGlmZmVyZW50bHkgZnJvbSB0aGUgY2Fz
ZSB3aGVyZSB3ZSBzd2VlcCBhIGJsb2NrIGFuZCBpdCAKKyAgICAgICAgcmV0dXJucyBhbiBlbXB0
eSBmcmVlIGxpc3QuIFRoaXMgd2FzIHRoZSBwcmltYXJ5IHBvaW50IG9mIHRoaXMgcGF0Y2guCisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6IEFTU0VSVCB0
aGF0IG5vYm9keSBpcyBjdXJyZW50bHkgaXRlcmF0aW5nIHRoZSBIZWFwIAorICAgICAgICB3aGVu
IGFsbG9jYXRpbmcuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAg
KEpTQzo6TWFya2VkQWxsb2NhdG9yOjpyZXNldCk6IEFsbCBhbGxvY2F0b3JzIGFyZSByZXNldCBh
ZnRlciBldmVyeSBjb2xsZWN0aW9uLiBXZSBuZWVkIHRvIG1ha2UgCisgICAgICAgIHN1cmUgdGhh
dCB0aGUgbV9jYW5vbmljYWxpemVkQmxvY2sgZ2V0cyBjbGVhcmVkLCB3aGljaCBpdCBtaWdodCBu
b3QgYWx3YXlzIGJlY2F1c2Ugd2UgZG9uJ3QgY2FsbCAKKyAgICAgICAgdGFrZUNhbm9uaWNhbGl6
ZWRCbG9jayBvbiBibG9ja3MgaW4gdGhlIGxhcmdlIGFsbG9jYXRvcnMuCisgICAgICAgIChKU0M6
Ok1hcmtlZEFsbG9jYXRvcjo6Y2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSk6IFdlIHNob3Vs
ZG4ndCBhbHJlYWR5IGhhdmUgYSBjYW5vbmljYWxpemVkIGJsb2NrLAorICAgICAgICBzbyBBU1NF
UlQgYXMgbXVjaC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp1bmNhbm9uaWNhbGl6
ZUNlbGxMaXZlbmVzc0RhdGEpOiBEbyB0aGUgb3Bwb3NpdGUgb2Ygd2hhdCBjYW5vbmljYWxpemVD
ZWxsTGl2ZW5lc3NEYXRhCisgICAgICAgIGRvZXMuIFNvLCBpZiB3ZSBkb24ndCBoYXZlIGEgbV9j
YW5vbmljYWxpemVkQmxvY2sgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHVuZG9p
bmcgYW55CisgICAgICAgIGNhbm9uaWNhbGl6YXRpb24uIElmIHdlIGRvLCB0aGVuIHdlIGNhbGwg
dW5jYW5vbmljYWxpemUqIG9uIHRoZSBibG9jaywgd2hpY2ggcmV0dXJucyB0aGUgRnJlZUxpc3QK
KyAgICAgICAgYXMgaXQgd2FzIHByaW9yIHRvIGNhbm9uaWNhbGl6YXRpb24uIFdlIHRoZW4gc2V0
IHRoZSBjdXJyZW50IGJsb2NrIHRvIHRoZSBjYW5vbmljYWxpemVkIGJsb2NrIGFuZCAKKyAgICAg
ICAgY2xlYXIgdGhlIGNhbm9uaWNhbGl6ZWQgYmxvY2suIAorICAgICAgICAqIGhlYXAvTWFya2Vk
QmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6dW5jYW5vbmljYWxpemVDZWxs
TGl2ZW5lc3NEYXRhKTogQW55IGJsb2NrIGJlaW5nIHVuY2Fub25pY2FsaXplZCBzaG91bGQgYmUg
aW4gCisgICAgICAgIHRoZSBNYXJrZWQgc3RhdGUsIHNvIEFTU0VSVCBhcyBtdWNoLiBXZSBhbHdh
eXMgYWxsb2NhdGUgYSBtX25ld2x5QWxsb2NhdGVkIEJpdG1hcCBpZiB3ZSdyZQorICAgICAgICBG
cmVlTGlzdGVkLCBzbyBpZiB3ZSBkaWRuJ3QgYWxsb2NhdGUgb25lIHRoZW4gd2Uga25vdyB3ZSB3
ZXJlIE1hcmtlZCB3aGVuIHdlIHdlcmUgbGFzdCBjYW5vbmljYWxpemVkLAorICAgICAgICBzbyBq
dXN0IHJldHVybiBlYXJseSB3aXRoIGFuIGVtcHR5IEZyZWVMaXN0LiBJZiB3ZSBkbyBoYXZlIGEg
bm9uLW51bGwgbV9uZXdseUFsbG9jYXRlZCBCaXRtYXAKKyAgICAgICAgdGhlbiB3ZSBuZWVkIHRv
IGJlIHN3ZXB0IGluIG9yZGVyIHRvIHJlYnVpbGQgb3VyIEZyZWVMaXN0LgorICAgICAgICAqIGhl
YXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmRpZENvbnN1bWVF
bXB0eUZyZWVMaXN0KTogVGhpcyBpcyBjYWxsZWQgaWYgd2UgZXZlciBzd2VlcCBhIGJsb2NrIGFu
ZCBnZXQgYmFjaworICAgICAgICBhbiBlbXB0eSBmcmVlIGxpc3QuIEluc3RlYWQgb2YgdHJhbnNp
dGlvbmluZyB0byB0aGUgQWxsb2NhdGVkIHN0YXRlLCB3ZSBub3cgZ28gc3RyYWlnaHQgYmFjayB0
byB0aGUgCisgICAgICAgIE1hcmtlZCBzdGF0ZS4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIHdl
IHdlcmVuJ3QgYWN0dWFsbHkgYWxsb2NhdGVkIG91dCBvZiwgc28gd2Ugc2hvdWxkbid0IGJlIGlu
IAorICAgICAgICB0aGUgYWxsb2NhdGVkIHN0YXRlLiBBbHNvIGFkZGVkIHNvbWUgQVNTRVJUcyB0
byBtYWtlIHN1cmUgdGhhdCB3ZSdyZSBpbiB0aGUgc3RhdGUgdGhhdCB3ZSBleHBlY3Q6IGFsbCBv
ZgorICAgICAgICBvdXIgbWFyayBiaXRzIHNob3VsZCBiZSBzZXQgYW5kIHdlIHNob3VsZCBub3Qg
aGF2ZSBhIG1fbmV3bHlBbGxvY2F0ZWQgQml0bWFwLgorICAgICAgICAqIGhlYXAvTWFya2VkU3Bh
Y2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRTcGFjZTo6Zm9yRWFjaEFsbG9jYXRvcik6IEFkZGVkIGEgbmV3IGZ1bmN0
b3Itc3R5bGUgaXRlcmF0aW9uIG1ldGhvZCBzbyB0aGF0IHdlIGNhbiAKKyAgICAgICAgZWFzaWx5
IGl0ZXJhdGUgb3ZlciBlYWNoIGFsbG9jYXRvciBmb3IsIGUuZy4sIGNhbm9uaWNhbGl6aW5nIGFu
ZCB1bmNhbm9uaWNhbGl6aW5nIGFsbG9jYXRvcnMgd2l0aG91dAorICAgICAgICBkdXBsaWNhdGlu
ZyBjb2RlLiAKKyAgICAgICAgKEpTQzo6Q2Fub25pY2FsaXplRnVuY3Rvcjo6b3BlcmF0b3IoKSk6
IE5ldyBmdW5jdG9ycyBmb3IgdXNlIHdpdGggZm9yRWFjaEFsbG9jYXRvci4KKyAgICAgICAgKEpT
Qzo6TWFya2VkU3BhY2U6OmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEpOiBEaXR0by4KKyAg
ICAgICAgKEpTQzo6VW5jYW5vbmljYWxpemVGdW5jdG9yOjpvcGVyYXRvcigpKTogRGl0dG8uCisg
ICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjp1bmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEp
OiBEaXR0by4KKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OndpbGxTdGFydEl0ZXJhdGluZyk6
IENhbGxiYWNrIHRoYXQgbm90aWZpZXMgTWFya2VkU3BhY2UgdGhhdCBpdCBpcyBiZWluZyBpdGVy
YXRlZC4KKyAgICAgICAgRG9lcyBzb21lIEFTU0VSVHMsIHNldHMgYSBmbGFnLCBjYW5vbmljYWxp
emVzIGNlbGwgbGl2ZW5lc3MgZGF0YS4KKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmRpZEZp
bmlzaEl0ZXJhdGluZyk6IERpdHRvLCBidXQgdG8gc2lnbmFsIHRoYXQgaXRlcmF0aW9uIGhhcyBj
b21wbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5oOgorICAgICAgICAoSlNDOjpN
YXJrZWRTcGFjZTo6aXRlcmF0aW9uSW5Qcm9ncmVzcyk6IFJldHVybnMgdHJ1ZSBpZiBhIEhlYXBJ
dGVyYXRpb25TY29wZSBpcyBjdXJyZW50bHkgYWN0aXZlLgorICAgICAgICAoSlNDOjpNYXJrZWRT
cGFjZTo6Zm9yRWFjaExpdmVDZWxsKTogQWNjZXB0cyBhIEhlYXBJdGVyYXRpb25TY29wZSB0byBl
bmZvcmNlIHRoZSBydWxlIHRoYXQgeW91IGhhdmUgdG8gCisgICAgICAgIGNyZWF0ZSBvbmUgcHJp
b3IgdG8gaXRlcmF0aW5nIG92ZXIgdGhlIEhlYXAuCisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
Ojpmb3JFYWNoRGVhZENlbGwpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6IENo
YW5nZWQgdG8gdXNlIG5ldyBIZWFwSXRlcmF0aW9uU2NvcGUuCisgICAgICAgICogcnVudGltZS9W
TS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSk6IERpdHRv
LgorCiAyMDEzLTA5LTEyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAg
ICAgICAgIGZvdXJ0aFRpZXI6IENoYW5nZSBKU1N0YWNrIHRvIGdyb3cgZnJvbSBoaWdoIHRvIGxv
dyBhZGRyZXNzZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
NTU2NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjQ5LDYgKzY0OSw3IEBACiAJCTI2
MDBCNUE2MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjAwQjVBNDE1MkJBQUE3MDA5MUVF
NUYgLyogSlNTdHJpbmdKb2luZXIuY3BwICovOyB9OwogCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVF
NUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5o
ICovOyB9OwogCQkyQTQ4RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5jdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMUI1
NzQxNzZBMjI0RDAwMEUyQTIzIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCAqLzsgfTsKKwkJMkFE
ODkzMkIxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFEODkzMjkxN0UzODY4RjAwNjY4
Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovOyB9OwogCQkzNzFEODQyRDE3Qzk4QjZFMDBF
Q0Y5OTQgLyogbGliei5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5NCAvKiBsaWJ6LmR5bGliICovOyB9
OwogCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyMTIwMjI5MEFENDMxMEMw
MEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9OwogCQk0NDQzQUUzMzE2RTE4OEQ5MDA3
NkYxMTAgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRh
dGlvbi5mcmFtZXdvcmsgKi87IH07CkBAIC0xODEyLDYgKzE4MTMsNyBAQAogCQkxQ0FBOEI0QjBE
MzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdENvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSmF2YVNjcmlwdENvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3Ry
aW5nSm9pbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSm9p
bmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBRDg5MzI5MTdFMzg2OEYwMDY2
ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGVhcEl0ZXJhdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5NCAvKiBsaWJ6LmR5bGliICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7
IG5hbWUgPSBsaWJ6LmR5bGliOyBwYXRoID0gdXNyL2xpYi9saWJ6LmR5bGliOyBzb3VyY2VUcmVl
ID0gU0RLUk9PVDsgfTsKIAkJNDQ5MDk3RUUwRjhGODFCNTAwNzZBMzI3IC8qIEZlYXR1cmVEZWZp
bmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVEZWZp
bmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTE1MzlCODEyREM5
OTQ1MDBFRjdBQzQgLyogWWFyci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZ
YXJyLmg7IHBhdGggPSB5YXJyL1lhcnIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI4NTAsNiArMjg1Miw3IEBACiAJCQkJMTQxNTAxMzIxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtT
ZXRJbmxpbmVzLmggKi8sCiAJCQkJMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFy
cmllclN1cHBvcnQuY3BwICovLAogCQkJCTBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0
ZUJhcnJpZXJTdXBwb3J0LmggKi8sCisJCQkJMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhl
YXBJdGVyYXRpb25TY29wZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBoZWFwOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQwMjgsNiArNDAzMSw3IEBACiAJCQkJODZFQzlERDExMzI4
REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
NjZENDQxNUIyQTNDMDAwOEYzNjNFIC8qIERGR1JlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkJCMDlDMTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMkFEODkzMkIxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVU
b0V4ZWN1dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAv
KiBERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFQ0EzRkExMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
Y3BwCShyZXZpc2lvbiAxNTU2NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAi
RGVidWdnZXIuaCIKIAogI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSGVhcEl0ZXJhdGlv
blNjb3BlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9u
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKQEAgLTEyMiw3ICsxMjMsOCBAQCB2b2lk
IERlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhWCiAgICAgdm0tPnByZXBhcmVUb0Rp
c2NhcmRDb2RlKCk7CiAKICAgICBSZWNvbXBpbGVyIHJlY29tcGlsZXIodGhpcyk7Ci0gICAgdm0t
PmhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNoTGl2ZUNlbGwocmVjb21waWxlcik7CisgICAgSGVh
cEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKHZtLT5oZWFwKTsKKyAgICB2bS0+aGVhcC5v
YmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgcmVjb21waWxlcik7
CiB9CiAKIEpTVmFsdWUgZXZhbHVhdGVJbkdsb2JhbENhbGxGcmFtZShjb25zdCBTdHJpbmcmIHNj
cmlwdCwgSlNWYWx1ZSYgZXhjZXB0aW9uLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1NTY1MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJHQ0FjdGl2
aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMu
aCIKKyNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJIZWFwUm9vdFZp
c2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkluY3JlbWVu
dGFsU3dlZXBlci5oIgpAQCAtNDE1LDkgKzQxNiwxNCBAQCBpbmxpbmUgSlNTdGFjayYgSGVhcDo6
c3RhY2soKQogICAgIHJldHVybiBtX3ZtLT5pbnRlcnByZXRlci0+c3RhY2soKTsKIH0KIAotdm9p
ZCBIZWFwOjpjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCkKK3ZvaWQgSGVhcDo6d2lsbFN0
YXJ0SXRlcmF0aW5nKCkKIHsKLSAgICBtX29iamVjdFNwYWNlLmNhbm9uaWNhbGl6ZUNlbGxMaXZl
bmVzc0RhdGEoKTsKKyAgICBtX29iamVjdFNwYWNlLndpbGxTdGFydEl0ZXJhdGluZygpOworfQor
Cit2b2lkIEhlYXA6OmRpZEZpbmlzaEl0ZXJhdGluZygpCit7CisgICAgbV9vYmplY3RTcGFjZS5k
aWRGaW5pc2hJdGVyYXRpbmcoKTsKIH0KIAogdm9pZCBIZWFwOjpnZXRDb25zZXJ2YXRpdmVSZWdp
c3RlclJvb3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3RzKQpAQCAtNjYyLDcgKzY2OCw4IEBAIHNp
emVfdCBIZWFwOjpwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgKIAogc2l6ZV90IEhlYXA6Omds
b2JhbE9iamVjdENvdW50KCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5mb3JFYWNoTGl2
ZUNlbGw8Q291bnRJZkdsb2JhbE9iamVjdD4oKTsKKyAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaXRl
cmF0aW9uU2NvcGUoKnRoaXMpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmZvckVhY2hMaXZl
Q2VsbDxDb3VudElmR2xvYmFsT2JqZWN0PihpdGVyYXRpb25TY29wZSk7CiB9CiAKIHNpemVfdCBI
ZWFwOjpwcm90ZWN0ZWRPYmplY3RDb3VudCgpCkBAIC02NzcsNyArNjg0LDggQEAgUGFzc093blB0
cjxUeXBlQ291bnRTZXQ+IEhlYXA6OnByb3RlY3RlZAogCiBQYXNzT3duUHRyPFR5cGVDb3VudFNl
dD4gSGVhcDo6b2JqZWN0VHlwZUNvdW50cygpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uu
Zm9yRWFjaExpdmVDZWxsPFJlY29yZFR5cGU+KCk7CisgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0
ZXJhdGlvblNjb3BlKCp0aGlzKTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5mb3JFYWNoTGl2
ZUNlbGw8UmVjb3JkVHlwZT4oaXRlcmF0aW9uU2NvcGUpOwogfQogCiB2b2lkIEhlYXA6OmRlbGV0
ZUFsbENvbXBpbGVkQ29kZSgpCkBAIC04NzUsNyArODgzLDggQEAgYm9vbCBIZWFwOjpjb2xsZWN0
SWZOZWNlc3NhcnlPckRlZmVyKCkKIAogdm9pZCBIZWFwOjptYXJrRGVhZE9iamVjdHMoKQogewot
ICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaERlYWRDZWxsPE1hcmtPYmplY3Q+KCk7CisgICAgSGVh
cEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKCp0aGlzKTsKKyAgICBtX29iamVjdFNwYWNl
LmZvckVhY2hEZWFkQ2VsbDxNYXJrT2JqZWN0PihpdGVyYXRpb25TY29wZSk7CiB9CiAKIHZvaWQg
SGVhcDo6c2V0QWN0aXZpdHlDYWxsYmFjayhQYXNzT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4g
YWN0aXZpdHlDYWxsYmFjaykKQEAgLTk1NCw3ICs5NjMsOCBAQCB2b2lkIEhlYXA6OnpvbWJpZnlE
ZWFkT2JqZWN0cygpCiB7CiAgICAgLy8gU3dlZXAgbm93IGJlY2F1c2UgZGVzdHJ1Y3RvcnMgd2ls
bCBjcmFzaCBvbmNlIHdlJ3JlIHpvbWJpZmllZC4KICAgICBtX29iamVjdFNwYWNlLnN3ZWVwKCk7
Ci0gICAgbV9vYmplY3RTcGFjZS5mb3JFYWNoRGVhZENlbGw8Wm9tYmlmeT4oKTsKKyAgICBIZWFw
SXRlcmF0aW9uU2NvcGUgaXRlcmF0aW9uU2NvcGUoKnRoaXMpOworICAgIG1fb2JqZWN0U3BhY2Uu
Zm9yRWFjaERlYWRDZWxsPFpvbWJpZnk+KGl0ZXJhdGlvblNjb3BlKTsKIH0KIAogdm9pZCBIZWFw
OjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHJldmlzaW9uIDE1NTY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBIYW5kbGVTZXQqIGhhbmRsZVNldCgpIHsgcmV0dXJuICZtX2hhbmRsZVNldDsgfQogICAg
ICAgICBIYW5kbGVTdGFjayogaGFuZGxlU3RhY2soKSB7IHJldHVybiAmbV9oYW5kbGVTdGFjazsg
fQogCi0gICAgICAgIHZvaWQgY2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpOworICAgICAg
ICB2b2lkIHdpbGxTdGFydEl0ZXJhdGluZygpOworICAgICAgICB2b2lkIGRpZEZpbmlzaEl0ZXJh
dGluZygpOwogICAgICAgICB2b2lkIGdldENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMoSGFzaFNl
dDxKU0NlbGwqPiYgcm9vdHMpOwogCiAgICAgICAgIGRvdWJsZSBsYXN0R0NMZW5ndGgoKSB7IHJl
dHVybiBtX2xhc3RHQ0xlbmd0aDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcEl0ZXJhdGlvblNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcEl0ZXJhdGlvblNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwSXRlcmF0aW9uU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBIZWFwSXRlcmF0aW9uU2NvcGVfaAorI2Rl
ZmluZSBIZWFwSXRlcmF0aW9uU2NvcGVfaAorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcEl0ZXJh
dGlvblNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIZWFwSXRlcmF0aW9uU2NvcGUp
OworcHVibGljOgorICAgIEhlYXBJdGVyYXRpb25TY29wZShIZWFwJik7CisgICAgfkhlYXBJdGVy
YXRpb25TY29wZSgpOworCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKK2lubGlu
ZSBIZWFwSXRlcmF0aW9uU2NvcGU6OkhlYXBJdGVyYXRpb25TY29wZShIZWFwJiBoZWFwKQorICAg
IDogbV9oZWFwKGhlYXApCit7CisgICAgbV9oZWFwLndpbGxTdGFydEl0ZXJhdGluZygpOworfQor
CitpbmxpbmUgSGVhcEl0ZXJhdGlvblNjb3BlOjp+SGVhcEl0ZXJhdGlvblNjb3BlKCkKK3sKKyAg
ICBtX2hlYXAuZGlkRmluaXNoSXRlcmF0aW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisKKyNlbmRpZiAvLyBIZWFwSXRlcmF0aW9uU2NvcGVfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMTU1NjUxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKIAogI2lu
Y2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2NvcGUuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJPcHRpb25z
LmgiCkBAIC0yMzUsNyArMjM2LDEwIEBAIHZvaWQgSGVhcFN0YXRpc3RpY3M6OnNob3dPYmplY3RT
dGF0aXN0aWMKICAgICBkYXRhTG9nRigicGF1c2UgdGltZTogJWxmbXNcblxuIiwgaGVhcC0+bV9s
YXN0R0NMZW5ndGgpOwogCiAgICAgU3RvcmFnZVN0YXRpc3RpY3Mgc3RvcmFnZVN0YXRpc3RpY3M7
Ci0gICAgaGVhcC0+bV9vYmplY3RTcGFjZS5mb3JFYWNoTGl2ZUNlbGwoc3RvcmFnZVN0YXRpc3Rp
Y3MpOworICAgIHsKKyAgICAgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKCpo
ZWFwKTsKKyAgICAgICAgaGVhcC0+bV9vYmplY3RTcGFjZS5mb3JFYWNoTGl2ZUNlbGwoaXRlcmF0
aW9uU2NvcGUsIHN0b3JhZ2VTdGF0aXN0aWNzKTsKKyAgICB9CiAgICAgZGF0YUxvZ0YoIndhc3Rl
ZCAucHJvcGVydHkgc3RvcmFnZTogJWxka0IgKCVsZCUlKVxuIiwKICAgICAgICAgc3RhdGljX2Nh
c3Q8bG9uZz4oCiAgICAgICAgICAgICAoc3RvcmFnZVN0YXRpc3RpY3Muc3RvcmFnZUNhcGFjaXR5
KCkgLSBzdG9yYWdlU3RhdGlzdGljcy5zdG9yYWdlU2l6ZSgpKSAvIEtCKSwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MTU1NjUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDE2IEBAIGJvb2wgTWFya2VkQWxsb2NhdG9y
Ojppc1BhZ2VkT3V0KGRvdWJsZSAKIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFs
bG9jYXRlSGVscGVyKHNpemVfdCBieXRlcykKIHsKICAgICBpZiAoIW1fZnJlZUxpc3QuaGVhZCkg
eworICAgICAgICBpZiAobV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2N1
cnJlbnRCbG9jayA9PSBtX2Jsb2Nrc1RvU3dlZXApOworICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmRpZENvbnN1bWVGcmVlTGlzdCgpOworICAgICAgICAgICAgbV9ibG9ja3NUb1N3ZWVwID0g
bV9jdXJyZW50QmxvY2stPm5leHQoKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAoTWFya2Vk
QmxvY2sqJiBibG9jayA9IG1fYmxvY2tzVG9Td2VlcDsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5l
eHQoKSkgewogICAgICAgICAgICAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IGZyZWVMaXN0ID0gYmxv
Y2stPnN3ZWVwKE1hcmtlZEJsb2NrOjpTd2VlcFRvRnJlZUxpc3QpOwogICAgICAgICAgICAgaWYg
KCFmcmVlTGlzdC5oZWFkKSB7Ci0gICAgICAgICAgICAgICAgYmxvY2stPmRpZENvbnN1bWVGcmVl
TGlzdCgpOworICAgICAgICAgICAgICAgIGJsb2NrLT5kaWRDb25zdW1lRW1wdHlGcmVlTGlzdCgp
OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC03Niw2ICs4
Miw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSgKICAgICBBU1NF
UlQobV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwogI2VuZGlm
CiAgICAgCisgICAgQVNTRVJUKCFtX21hcmtlZFNwYWNlLT5pdGVyYXRpb25JblByb2dyZXNzKCkp
OwogICAgIEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICBtX2hlYXAtPmRpZEFsbG9jYXRl
KG1fZnJlZUxpc3QuYnl0ZXMpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE1NTY1MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2
ICsyMyw3IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3IoKTsKICAgICB2b2lkIHJlc2V0
KCk7CiAgICAgdm9pZCBjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CisgICAgdm9pZCB1
bmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoKTsKICAgICBzaXplX3QgY2VsbFNpemUoKSB7
IHJldHVybiBtX2NlbGxTaXplOyB9CiAgICAgTWFya2VkQmxvY2s6OkRlc3RydWN0b3JUeXBlIGRl
c3RydWN0b3JUeXBlKCkgeyByZXR1cm4gbV9kZXN0cnVjdG9yVHlwZTsgfQogICAgIHZvaWQqIGFs
bG9jYXRlKHNpemVfdCk7CkBAIC0xMDMsNiArMTA0LDcgQEAgaW5saW5lIHZvaWQqIE1hcmtlZEFs
bG9jYXRvcjo6YWxsb2NhdGUocwogCiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc2V0
KCkKIHsKKyAgICBtX2Nhbm9uaWNhbGl6ZWRCbG9jayA9IDA7CiAgICAgbV9jdXJyZW50QmxvY2sg
PSAwOwogICAgIG1fZnJlZUxpc3QgPSBNYXJrZWRCbG9jazo6RnJlZUxpc3QoKTsKICAgICBtX2Js
b2Nrc1RvU3dlZXAgPSBtX2Jsb2NrTGlzdC5oZWFkKCk7CkBAIC0xMTAsNiArMTEyLDcgQEAgaW5s
aW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXNldCgpCiAKIGlubGluZSB2b2lkIE1hcmtlZEFs
bG9jYXRvcjo6Y2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpCiB7CisgICAgQVNTRVJUKCFt
X2Nhbm9uaWNhbGl6ZWRCbG9jayk7CiAgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewogICAgICAg
ICBBU1NFUlQoIW1fZnJlZUxpc3QuaGVhZCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEyMSw2ICsx
MjQsMTYgQEAgaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpjYW5vbmljYWxpegogICAgIG1f
ZnJlZUxpc3QgPSBNYXJrZWRCbG9jazo6RnJlZUxpc3QoKTsKIH0KIAoraW5saW5lIHZvaWQgTWFy
a2VkQWxsb2NhdG9yOjp1bmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoKQoreworICAgIGlm
ICghbV9jYW5vbmljYWxpemVkQmxvY2spCisgICAgICAgIHJldHVybjsKKworICAgIG1fZnJlZUxp
c3QgPSBtX2Nhbm9uaWNhbGl6ZWRCbG9jay0+dW5jYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRh
KCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX2Nhbm9uaWNhbGl6ZWRCbG9jazsKKyAgICBtX2Nh
bm9uaWNhbGl6ZWRCbG9jayA9IDA7Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBp
bmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmZvckVhY2hCbG9jayhGdW5jdG9yJiBmdW5jdG9y
KQogewogICAgIE1hcmtlZEJsb2NrKiBuZXh0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMTU1NjUxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNCAr
MTk5LDIwIEBAIHZvaWQgTWFya2VkQmxvY2s6OmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmUKICAgICBt
X3N0YXRlID0gTWFya2VkOwogfQogCitNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6
OnVuY2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpCit7CisgICAgSEVBUF9MT0dfQkxPQ0tf
U1RBVEVfVFJBTlNJVElPTih0aGlzKTsKKworICAgIEFTU0VSVChtX3N0YXRlID09IE1hcmtlZCk7
CisKKyAgICBpZiAoIW1fbmV3bHlBbGxvY2F0ZWQpIHsKKyAgICAgICAgLy8gV2UgZGlkbid0IGhh
dmUgdG8gY3JlYXRlIGEgIm5ld2x5IGFsbG9jYXRlZCIgYml0bWFwLiBUaGF0IG1lYW5zIHdlIHdl
cmUgYWxyZWFkeSBNYXJrZWQKKyAgICAgICAgLy8gd2hlbiB3ZSBsYXN0IGNhbm9uaWNhbGl6ZWQs
IHNvIHJldHVybiBhbiBlbXB0eSBmcmVlIGxpc3QgYW5kIHN0YXkgaW4gdGhlIE1hcmtlZCBzdGF0
ZS4KKyAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CisgICAgfQorCisgICAgLy8gUmUtY3JlYXRl
IG91ciBmcmVlIGxpc3QgZnJvbSBiZWZvcmUgY2Fub25pY2FsaXphdGlvbi4gCisgICAgcmV0dXJu
IHN3ZWVwKFN3ZWVwVG9GcmVlTGlzdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAxNTU2NTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzMsNiArMTMzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIG9mIHRo
ZXNlIGZ1bmN0aW9uczoKICAgICAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsgLy8gQ2Fs
bCB0aGlzIG9uY2UgeW91J3ZlIGFsbG9jYXRlZCBhbGwgdGhlIGl0ZW1zIGluIHRoZSBmcmVlIGxp
c3QuCiAgICAgICAgIHZvaWQgY2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YShjb25zdCBGcmVl
TGlzdCYpOworICAgICAgICBGcmVlTGlzdCB1bmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEo
KTsgLy8gQ2FsbCB0aGlzIGlmIHlvdSBjYW5vbmljYWxpemVkIGEgYmxvY2sgZm9yIHNvbWUgbm9u
LWNvbGxlY3Rpb24gcmVsYXRlZCBwdXJwb3NlLgorICAgICAgICB2b2lkIGRpZENvbnN1bWVFbXB0
eUZyZWVMaXN0KCk7IC8vIENhbGwgdGhpcyBpZiB5b3Ugc3dlZXAgYSBibG9jaywgYnV0IHRoZSBy
ZXR1cm5lZCBGcmVlTGlzdCBpcyBlbXB0eS4KIAogICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlICJuZXdseSBhbGxvY2F0ZWQiIGJpdG1hcCB3YXMgbm9uLW51bGwgCiAgICAgICAgIC8vIGFu
ZCB3YXMgc3VjY2Vzc2Z1bGx5IGNsZWFyZWQgYW5kIGZhbHNlIG90aGVyd2lzZS4KQEAgLTI3Nyw2
ICsyNzksMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIG1fc3RhdGUgPSBBbGxvY2F0ZWQ7
CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OmRpZENvbnN1bWVFbXB0eUZy
ZWVMaXN0KCkKKyAgICB7CisgICAgICAgIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT04o
dGhpcyk7CisKKyAgICAgICAgQVNTRVJUKCFtX25ld2x5QWxsb2NhdGVkKTsKKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsg
aSArPSBtX2F0b21zUGVyQ2VsbCkKKyAgICAgICAgICAgIEFTU0VSVChtX21hcmtzLmdldChpKSk7
CisjZW5kaWYKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gRnJlZUxpc3RlZCk7CisgICAgICAg
IG1fc3RhdGUgPSBNYXJrZWQ7CisgICAgfQorCiAgICAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6
OmNsZWFyTWFya3MoKQogICAgIHsKICAgICAgICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJ
VElPTih0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5jcHAJKHJldmlzaW9uIDE1NTY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQCBzdHJ1Y3QgUmVh
cFdlYWtTZXQgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1CiBNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2Uo
SGVhcCogaGVhcCkKICAgICA6IG1faGVhcChoZWFwKQogICAgICwgbV9jYXBhY2l0eSgwKQorICAg
ICwgbV9jdXJyZW50bHlJdGVyYXRpbmcoZmFsc2UpCiB7CiAgICAgZm9yIChzaXplX3QgY2VsbFNp
emUgPSBwcmVjaXNlU3RlcDsgY2VsbFNpemUgPD0gcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0g
cHJlY2lzZVN0ZXApIHsKICAgICAgICAgYWxsb2NhdG9yRm9yKGNlbGxTaXplKS5pbml0KGhlYXAs
IHRoaXMsIGNlbGxTaXplLCBNYXJrZWRCbG9jazo6Tm9uZSk7CkBAIC0xNTAsMjMgKzE1MSw1MSBA
QCB2b2lkIE1hcmtlZFNwYWNlOjpyZWFwV2Vha1NldHMoKQogICAgIGZvckVhY2hCbG9jazxSZWFw
V2Vha1NldD4oKTsKIH0KIAotdm9pZCBNYXJrZWRTcGFjZTo6Y2Fub25pY2FsaXplQ2VsbExpdmVu
ZXNzRGF0YSgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgTWFya2VkU3BhY2U6
OmZvckVhY2hBbGxvY2F0b3IoKQoreworICAgIEZ1bmN0b3IgZnVuY3RvcjsKKyAgICBmb3JFYWNo
QWxsb2NhdG9yKGZ1bmN0b3IpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KK3Zv
aWQgTWFya2VkU3BhY2U6OmZvckVhY2hBbGxvY2F0b3IoRnVuY3RvciYgZnVuY3RvcikKIHsKICAg
ICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNl
Q3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewotICAgICAgICBhbGxvY2F0b3JGb3Io
Y2VsbFNpemUpLmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoKTsKLSAgICAgICAgbm9ybWFs
RGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkuY2Fub25pY2FsaXplQ2VsbExpdmVuZXNz
RGF0YSgpOwotICAgICAgICBpbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3JBbGxvY2F0b3JGb3Io
Y2VsbFNpemUpLmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoKTsKKyAgICAgICAgZnVuY3Rv
cihhbGxvY2F0b3JGb3IoY2VsbFNpemUpKTsKKyAgICAgICAgZnVuY3Rvcihub3JtYWxEZXN0cnVj
dG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKSk7CisgICAgICAgIGZ1bmN0b3IoaW1tb3J0YWxTdHJ1
Y3R1cmVEZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKSk7CiAgICAgfQogCiAgICAgZm9y
IChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBpbXByZWNpc2VD
dXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApIHsKLSAgICAgICAgYWxsb2NhdG9yRm9y
KGNlbGxTaXplKS5jYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7Ci0gICAgICAgIG5vcm1h
bERlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVz
c0RhdGEoKTsKLSAgICAgICAgaW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yQWxsb2NhdG9yRm9y
KGNlbGxTaXplKS5jYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CisgICAgICAgIGZ1bmN0
b3IoYWxsb2NhdG9yRm9yKGNlbGxTaXplKSk7CisgICAgICAgIGZ1bmN0b3Iobm9ybWFsRGVzdHJ1
Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkpOworICAgICAgICBmdW5jdG9yKGltbW9ydGFsU3Ry
dWN0dXJlRGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkpOwogICAgIH0KIAotICAgIG1f
bm9ybWFsU3BhY2UubGFyZ2VBbGxvY2F0b3IuY2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgp
OwotICAgIG1fbm9ybWFsRGVzdHJ1Y3RvclNwYWNlLmxhcmdlQWxsb2NhdG9yLmNhbm9uaWNhbGl6
ZUNlbGxMaXZlbmVzc0RhdGEoKTsKLSAgICBtX2ltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3RvclNw
YWNlLmxhcmdlQWxsb2NhdG9yLmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoKTsKKyAgICBm
dW5jdG9yKG1fbm9ybWFsU3BhY2UubGFyZ2VBbGxvY2F0b3IpOworICAgIGZ1bmN0b3IobV9ub3Jt
YWxEZXN0cnVjdG9yU3BhY2UubGFyZ2VBbGxvY2F0b3IpOworICAgIGZ1bmN0b3IobV9pbW1vcnRh
bFN0cnVjdHVyZURlc3RydWN0b3JTcGFjZS5sYXJnZUFsbG9jYXRvcik7Cit9CisKK3N0cnVjdCBD
YW5vbmljYWxpemVGdW5jdG9yIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQWxsb2NhdG9y
JiBhbGxvY2F0b3IpIHsgYWxsb2NhdG9yLmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoKTsg
fQorfTsKKwordm9pZCBNYXJrZWRTcGFjZTo6Y2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgp
Cit7CisgICAgQVNTRVJUKCFpdGVyYXRpb25JblByb2dyZXNzKCkpOworICAgIGZvckVhY2hBbGxv
Y2F0b3I8Q2Fub25pY2FsaXplRnVuY3Rvcj4oKTsKK30KKworc3RydWN0IFVuY2Fub25pY2FsaXpl
RnVuY3RvciB7CisgICAgdm9pZCBvcGVyYXRvcigpKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9y
KSB7IGFsbG9jYXRvci51bmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoKTsgfQorfTsKKwor
dm9pZCBNYXJrZWRTcGFjZTo6dW5jYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCkKK3sKKyAg
ICBBU1NFUlQoaXRlcmF0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICBmb3JFYWNoQWxsb2NhdG9yPFVu
Y2Fub25pY2FsaXplRnVuY3Rvcj4oKTsKIH0KIAogYm9vbCBNYXJrZWRTcGFjZTo6aXNQYWdlZE91
dChkb3VibGUgZGVhZGxpbmUpCkBAIC0yNzAsNCArMjk5LDE4IEBAIHZvaWQgTWFya2VkU3BhY2U6
OmNsZWFyTmV3bHlBbGxvY2F0ZWQoKQogI2VuZGlmCiB9CiAKK3ZvaWQgTWFya2VkU3BhY2U6Ondp
bGxTdGFydEl0ZXJhdGluZygpCit7CisgICAgQVNTRVJUKCFpdGVyYXRpb25JblByb2dyZXNzKCkp
OworICAgIGNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoKTsKKyAgICBtX2N1cnJlbnRseUl0
ZXJhdGluZyA9IHRydWU7Cit9CisKK3ZvaWQgTWFya2VkU3BhY2U6OmRpZEZpbmlzaEl0ZXJhdGlu
ZygpCit7CisgICAgQVNTRVJUKGl0ZXJhdGlvbkluUHJvZ3Jlc3MoKSk7CisgICAgdW5jYW5vbmlj
YWxpemVDZWxsTGl2ZW5lc3NEYXRhKCk7CisgICAgbV9jdXJyZW50bHlJdGVyYXRpbmcgPSBmYWxz
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDE1NTY1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIZWFwOworY2xhc3MgSGVhcEl0ZXJhdGlvblNjb3Bl
OwogY2xhc3MgSlNDZWxsOwogY2xhc3MgTGl2ZU9iamVjdEl0ZXJhdG9yOwogY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwpAQCAtODAsMTUgKzgxLDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
YXBXZWFrU2V0cygpOwogCiAgICAgTWFya2VkQmxvY2tTZXQmIGJsb2NrcygpIHsgcmV0dXJuIG1f
YmxvY2tzOyB9Ci0gICAgCisKKyAgICB2b2lkIHdpbGxTdGFydEl0ZXJhdGluZygpOworICAgIGJv
b2wgaXRlcmF0aW9uSW5Qcm9ncmVzcygpIHsgcmV0dXJuIG1fY3VycmVudGx5SXRlcmF0aW5nOyB9
CisgICAgdm9pZCBkaWRGaW5pc2hJdGVyYXRpbmcoKTsKKwogICAgIHZvaWQgY2Fub25pY2FsaXpl
Q2VsbExpdmVuZXNzRGF0YSgpOworICAgIHZvaWQgdW5jYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NE
YXRhKCk7IC8vIElmIHdlIGp1c3QgY2Fub25pY2FsaXplZCBidXQgd2UgZGlkbid0IGRvIGEgY29s
bGVjdGlvbiwgd2UgbmVlZCB0byB1bmNhbm9uaWNhbGl6ZS4KIAogICAgIHR5cGVkZWYgSGFzaFNl
dDxNYXJrZWRCbG9jayo+OjppdGVyYXRvciBCbG9ja0l0ZXJhdG9yOwogICAgIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFj
aExpdmVDZWxsKEZ1bmN0b3ImKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0eXBl
bmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIGZvckVhY2hMaXZlQ2VsbCgpOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaERl
YWRDZWxsKEZ1bmN0b3ImKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0eXBlbmFt
ZSBGdW5jdG9yOjpSZXR1cm5UeXBlIGZvckVhY2hEZWFkQ2VsbCgpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaExpdmVD
ZWxsKEhlYXBJdGVyYXRpb25TY29wZSYsIEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIGZvckVhY2hMaXZlQ2VsbChI
ZWFwSXRlcmF0aW9uU2NvcGUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0eXBl
bmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIGZvckVhY2hEZWFkQ2VsbChIZWFwSXRlcmF0aW9uU2Nv
cGUmLCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUg
RnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNoRGVhZENlbGwoSGVhcEl0ZXJhdGlvblNjb3BlJik7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJu
VHlwZSBmb3JFYWNoQmxvY2soRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaEJsb2NrKCk7CiAgICAgCkBA
IC0xMTEsNiArMTE3LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9p
ZCBmb3JFYWNoQWxsb2NhdG9yKEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hBbGxvY2F0b3IoKTsKKwogICAgIC8vIFsgMzIuLi4gMTI4IF0KICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHByZWNpc2VTdGVwID0gTWFya2VkQmxvY2s6OmF0b21TaXpl
OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcHJlY2lzZUN1dG9mZiA9IDEyODsKQEAgLTEzMywz
OSArMTQyLDM4IEBAIHByaXZhdGU6CiAKICAgICBIZWFwKiBtX2hlYXA7CiAgICAgc2l6ZV90IG1f
Y2FwYWNpdHk7CisgICAgYm9vbCBtX2N1cnJlbnRseUl0ZXJhdGluZzsKICAgICBNYXJrZWRCbG9j
a1NldCBtX2Jsb2NrczsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0
eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIE1hcmtlZFNwYWNlOjpmb3JFYWNoTGl2ZUNlbGwo
RnVuY3RvciYgZnVuY3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0eXBl
bmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIE1hcmtlZFNwYWNlOjpmb3JFYWNoTGl2ZUNlbGwoSGVh
cEl0ZXJhdGlvblNjb3BlJiwgRnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBjYW5vbmljYWxpemVD
ZWxsTGl2ZW5lc3NEYXRhKCk7Ci0KKyAgICBBU1NFUlQoaXRlcmF0aW9uSW5Qcm9ncmVzcygpKTsK
ICAgICBCbG9ja0l0ZXJhdG9yIGVuZCA9IG1fYmxvY2tzLnNldCgpLmVuZCgpOwogICAgIGZvciAo
QmxvY2tJdGVyYXRvciBpdCA9IG1fYmxvY2tzLnNldCgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKICAgICAgICAgKCppdCktPmZvckVhY2hMaXZlQ2VsbChmdW5jdG9yKTsKICAgICByZXR1cm4g
ZnVuY3Rvci5yZXR1cm5WYWx1ZSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBp
bmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBNYXJrZWRTcGFjZTo6Zm9yRWFjaExp
dmVDZWxsKCkKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0eXBlbmFtZSBGdW5j
dG9yOjpSZXR1cm5UeXBlIE1hcmtlZFNwYWNlOjpmb3JFYWNoTGl2ZUNlbGwoSGVhcEl0ZXJhdGlv
blNjb3BlJiBzY29wZSkKIHsKICAgICBGdW5jdG9yIGZ1bmN0b3I7Ci0gICAgcmV0dXJuIGZvckVh
Y2hMaXZlQ2VsbChmdW5jdG9yKTsKKyAgICByZXR1cm4gZm9yRWFjaExpdmVDZWxsKHNjb3BlLCBm
dW5jdG9yKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1l
IEZ1bmN0b3I6OlJldHVyblR5cGUgTWFya2VkU3BhY2U6OmZvckVhY2hEZWFkQ2VsbChGdW5jdG9y
JiBmdW5jdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1
bmN0b3I6OlJldHVyblR5cGUgTWFya2VkU3BhY2U6OmZvckVhY2hEZWFkQ2VsbChIZWFwSXRlcmF0
aW9uU2NvcGUmLCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIGNhbm9uaWNhbGl6ZUNlbGxMaXZl
bmVzc0RhdGEoKTsKLQorICAgIEFTU0VSVChpdGVyYXRpb25JblByb2dyZXNzKCkpOwogICAgIEJs
b2NrSXRlcmF0b3IgZW5kID0gbV9ibG9ja3Muc2V0KCkuZW5kKCk7CiAgICAgZm9yIChCbG9ja0l0
ZXJhdG9yIGl0ID0gbV9ibG9ja3Muc2V0KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAg
ICAgICAoKml0KS0+Zm9yRWFjaERlYWRDZWxsKGZ1bmN0b3IpOwogICAgIHJldHVybiBmdW5jdG9y
LnJldHVyblZhbHVlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0
eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIE1hcmtlZFNwYWNlOjpmb3JFYWNoRGVhZENlbGwo
KQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJl
dHVyblR5cGUgTWFya2VkU3BhY2U6OmZvckVhY2hEZWFkQ2VsbChIZWFwSXRlcmF0aW9uU2NvcGUm
IHNjb3BlKQogewogICAgIEZ1bmN0b3IgZnVuY3RvcjsKLSAgICByZXR1cm4gZm9yRWFjaERlYWRD
ZWxsKGZ1bmN0b3IpOworICAgIHJldHVybiBmb3JFYWNoRGVhZENlbGwoc2NvcGUsIGZ1bmN0b3Ip
OwogfQogCiBpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6YWxsb2NhdG9yRm9y
KHNpemVfdCBieXRlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE1NTY1MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NiArNDYsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJG
dW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUg
IkhlYXBJdGVyYXRpb25TY29wZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVk
ZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCkBAIC01
MTQsNyArNTE1LDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZShWTSYgdm0K
ICAgICAvLyBpbmRleGVkIHN0b3JhZ2UuCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgZm91bmRP
YmplY3RzOyAvLyBVc2UgTWFya2VkQXJndW1lbnRCdWZmZXIgYmVjYXVzZSBzd2l0Y2hUb1Nsb3dQ
dXRBcnJheVN0b3JhZ2UoKSBtYXkgR0MuCiAgICAgT2JqZWN0c1dpdGhCcm9rZW5JbmRleGluZ0Zp
bmRlciBmaW5kZXIoZm91bmRPYmplY3RzLCB0aGlzKTsKLSAgICB2bS5oZWFwLm9iamVjdFNwYWNl
KCkuZm9yRWFjaExpdmVDZWxsKGZpbmRlcik7CisgICAgeworICAgICAgICBIZWFwSXRlcmF0aW9u
U2NvcGUgaXRlcmF0aW9uU2NvcGUodm0uaGVhcCk7CisgICAgICAgIHZtLmhlYXAub2JqZWN0U3Bh
Y2UoKS5mb3JFYWNoTGl2ZUNlbGwoaXRlcmF0aW9uU2NvcGUsIGZpbmRlcik7CisgICAgfQogICAg
IHdoaWxlICghZm91bmRPYmplY3RzLmlzRW1wdHkoKSkgewogICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3QoZm91bmRPYmplY3RzLmxhc3QoKSk7CiAgICAgICAgIGZvdW5kT2JqZWN0
cy5yZW1vdmVMYXN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShy
ZXZpc2lvbiAxNTU2NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJIZWFwLmgiCisj
aW5jbHVkZSAiSGVhcEl0ZXJhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiSG9zdENhbGxSZXR1cm5W
YWx1ZS5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3
ZWVwZXIuaCIKQEAgLTUyMSw4ICs1MjIsOCBAQCB2b2lkIFZNOjpyZWxlYXNlRXhlY3V0YWJsZU1l
bW9yeSgpCiAgICAgCiAgICAgaWYgKGR5bmFtaWNHbG9iYWxPYmplY3QpIHsKICAgICAgICAgU3Rh
Y2tQcmVzZXJ2aW5nUmVjb21waWxlciByZWNvbXBpbGVyOworICAgICAgICBIZWFwSXRlcmF0aW9u
U2NvcGUgaXRlcmF0aW9uU2NvcGUoaGVhcCk7CiAgICAgICAgIEhhc2hTZXQ8SlNDZWxsKj4gcm9v
dHM7Ci0gICAgICAgIGhlYXAuY2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpOwogICAgICAg
ICBoZWFwLmdldENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMocm9vdHMpOwogICAgICAgICBIYXNo
U2V0PEpTQ2VsbCo+OjppdGVyYXRvciBlbmQgPSByb290cy5lbmQoKTsKICAgICAgICAgZm9yIChI
YXNoU2V0PEpTQ2VsbCo+OjppdGVyYXRvciBwdHIgPSByb290cy5iZWdpbigpOyBwdHIgIT0gZW5k
OyArK3B0cikgewpAQCAtNTQzLDcgKzU0NCw3IEBAIHZvaWQgVk06OnJlbGVhc2VFeGVjdXRhYmxl
TWVtb3J5KCkKICAgICAgICAgICAgICAgICByZWNvbXBpbGVyLmN1cnJlbnRseUV4ZWN1dGluZ0Z1
bmN0aW9ucy5hZGQoc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSkp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICB9Ci0gICAgICAgIGhlYXAub2JqZWN0U3BhY2Uo
KS5mb3JFYWNoTGl2ZUNlbGw8U3RhY2tQcmVzZXJ2aW5nUmVjb21waWxlcj4ocmVjb21waWxlcik7
CisgICAgICAgIGhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNoTGl2ZUNlbGw8U3RhY2tQcmVzZXJ2
aW5nUmVjb21waWxlcj4oaXRlcmF0aW9uU2NvcGUsIHJlY29tcGlsZXIpOwogICAgIH0KICAgICBt
X3JlZ0V4cENhY2hlLT5pbnZhbGlkYXRlQ29kZSgpOwogICAgIGhlYXAuY29sbGVjdEFsbEdhcmJh
Z2UoKTsK
</data>
<flag name="review"
          id="233718"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>