<?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>182912</bug_id>
          
          <creation_ts>2018-02-18 14:30:53 -0800</creation_ts>
          <short_desc>Don&apos;t mark an array profile out of bounds for the cases where the DFG will convert the access to SaneChain</short_desc>
          <delta_ts>2018-02-19 18:00:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>182940</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1400238</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-02-18 14:30:53 -0800</bug_when>
    <thetext>Currently, we mark it out of bounds just if we can&apos;t getIndexQuickly. But that&apos;s not always the best thing to do, because, that will always mark it out of bounds if we see a hole. The DFG/FTL are smart enough to know when the array is sane chain vs not sane chain, and we can emit a GetByVal that just knows a hole is undefined when it&apos;s sane chain. So pessimize a GetByVal in that situation is bad from a performance standpoint. Currently, we only do the sane chain optimization for Contiguous/Double arrays. So, we should probably keep that in mind. But it&apos;d be helpful to have another bit inside ArrayProfile that says if you read holes. Then, we can use that as input to Int32 arrays as well. We don&apos;t want a load from a hole from an int32 to always be marked as out of bounds, since when we&apos;re out of bounds, we must claim TOP for the effects we do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400239</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-02-18 14:46:52 -0800</bug_when>
    <thetext>We should probably do this:
https://bugs.webkit.org/show_bug.cgi?id=144668</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400240</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-02-18 14:52:20 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #1)
&gt; We should probably do this:
&gt; https://bugs.webkit.org/show_bug.cgi?id=144668

I think what we really want is a bit in ArrayProfile saying if we&apos;re going to load a hole and that we&apos;re an original array structure (or something like that). If we are, we can lower Int32 array load to SaneChain as well. We probably want to do this with ArrayStorage as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400454</commentid>
    <comment_count>3</comment_count>
      <attachid>334175</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-02-19 12:25:39 -0800</bug_when>
    <thetext>Created attachment 334175
WIP

This makes JetStream&apos;s hash-map test 40-50% faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400455</commentid>
    <comment_count>4</comment_count>
      <attachid>334175</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-02-19 12:27:29 -0800</bug_when>
    <thetext>Comment on attachment 334175
WIP

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

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1765
&gt; +            if ((object-&gt;indexingType() == ArrayWithDouble || object-&gt;indexingType() == ArrayWithContiguous)

checking double here could theoretically lead to an infinite recompile loop. If the DFG doesn&apos;t convert this to sane chain, it&apos;ll exit on loading NaN. It only converts to sane chain when the result isn&apos;t used as other. We could probably optimistically leave this code as is, but have FixupPhase check exit state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400497</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-02-19 14:10:52 -0800</bug_when>
    <thetext>&lt;rdar://problem/37685083&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400507</commentid>
    <comment_count>6</comment_count>
      <attachid>334188</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-02-19 14:50:04 -0800</bug_when>
    <thetext>Created attachment 334188
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400511</commentid>
    <comment_count>7</comment_count>
      <attachid>334188</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-02-19 14:54:40 -0800</bug_when>
    <thetext>Comment on attachment 334188
patch

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

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:771
&gt; +                    if (canDoSaneChain) {
&gt; +                        JSGlobalObject* globalObject = m_graph.globalObjectFor(node-&gt;origin.semantic);
&gt; +                        Structure* arrayPrototypeStructure = globalObject-&gt;arrayPrototype()-&gt;structure();
&gt; +                        Structure* objectPrototypeStructure = globalObject-&gt;objectPrototype()-&gt;structure();
&gt; +                        if (arrayPrototypeStructure-&gt;transitionWatchpointSetIsStillValid()

The only change in this code here is moving to this. The old code theoretically could hoist the load of arrayPrototypeChainIsSane() above  the loads of the Structures. In which case, we&apos;re in a race. This is almost certainly not gonna happen, but I refactored it to be correct. Same with the code in ArrayMode. The alternative would have been to stick in a loadLoadFence between watching the structure&apos;s and checking arrayProtoytpeChainIsSain(), but I went with this route since other code in the DFG uses this method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400551</commentid>
    <comment_count>8</comment_count>
      <attachid>334188</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-02-19 16:27:42 -0800</bug_when>
    <thetext>Comment on attachment 334188
patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400595</commentid>
    <comment_count>9</comment_count>
      <attachid>334188</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-19 18:00:43 -0800</bug_when>
    <thetext>Comment on attachment 334188
patch

Clearing flags on attachment: 334188

Committed r228720: &lt;https://trac.webkit.org/changeset/228720&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400596</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-19 18:00:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334175</attachid>
            <date>2018-02-19 12:25:39 -0800</date>
            <delta_ts>2018-02-19 14:50:04 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>13194</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlz
aW9uIDIyODYwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDYgKzIxNiw3IEBAIEFycmF5TW9kZSBBcnJheU1vZGU6
OnJlZmluZSgKICAgICAgICAgICAgICYmICFncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4u
c2VtYW50aWMsIE91dE9mQm91bmRzKSkgewogICAgICAgICAgICAgZ3JhcGgucmVnaXN0ZXJBbmRX
YXRjaFN0cnVjdHVyZVRyYW5zaXRpb24oZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZSgpLT5z
dHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICBncmFwaC5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJl
VHJhbnNpdGlvbihnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKICAgICAgICAgICAgIGlmIChnbG9i
YWxPYmplY3QtPmFycmF5UHJvdG90eXBlQ2hhaW5Jc1NhbmUoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gd2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9u
IDIyODYwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc2OSw2ICs3NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNhbkRvU2FuZUNoYWluKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihnbG9iYWxP
YmplY3QtPmFycmF5UHJvdG90eXBlKCktPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKGds
b2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCktPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJh
eU1vZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMjI4NjA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyNCwyNyArMTcyNCw2IEBAIGlu
dDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU8KIAogfQogCi1zdGF0aWMgYm9v
bCBjYW5BY2Nlc3NBcmd1bWVudEluZGV4UXVpY2tseShKU09iamVjdCYgb2JqZWN0LCB1aW50MzJf
dCBpbmRleCkKLXsKLSAgICBzd2l0Y2ggKG9iamVjdC5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50
eXBlKCkpIHsKLSAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1R5cGU6IHsKLSAgICAgICAgRGlyZWN0
QXJndW1lbnRzKiBkaXJlY3RBcmd1bWVudHMgPSBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oJm9i
amVjdCk7Ci0gICAgICAgIGlmIChkaXJlY3RBcmd1bWVudHMtPmlzTWFwcGVkQXJndW1lbnRJbkRG
RyhpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlwZTogewotICAgICAgICBTY29wZWRBcmd1bWVu
dHMqIHNjb3BlZEFyZ3VtZW50cyA9IGpzQ2FzdDxTY29wZWRBcmd1bWVudHMqPigmb2JqZWN0KTsK
LSAgICAgICAgaWYgKHNjb3BlZEFyZ3VtZW50cy0+aXNNYXBwZWRBcmd1bWVudEluREZHKGluZGV4
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQog
c3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTE3ODEs
NyArMTc2MCwxNSBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAg
ICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpOwogCi0gICAgICAgICAgICBp
ZiAoIWNhbkFjY2Vzc0FyZ3VtZW50SW5kZXhRdWlja2x5KCpvYmplY3QsIGkpKSB7CisgICAgICAg
ICAgICBib29sIHNraXBNYXJraW5nT3V0T2ZCb3VuZHMgPSBmYWxzZTsKKworICAgICAgICAgICAg
aWYgKChvYmplY3QtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSB8fCBvYmplY3Qt
PmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aENvbnRpZ3VvdXMpCisgICAgICAgICAgICAgICAg
JiYgaSA8IG9iamVjdC0+YnV0dGVyZmx5KCktPnB1YmxpY0xlbmd0aCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gb2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAg
ICAgICAgICAgICBza2lwTWFya2luZ091dE9mQm91bmRzID0gZ2xvYmFsT2JqZWN0LT5pc09yaWdp
bmFsQXJyYXlTdHJ1Y3R1cmUob2JqZWN0LT5zdHJ1Y3R1cmUoKSkgJiYgZ2xvYmFsT2JqZWN0LT5h
cnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghc2tpcE1hcmtpbmdPdXRPZkJvdW5kcyAmJiAhQ29tbW9uU2xvd1BhdGhzOjpjYW5BY2Nl
c3NBcmd1bWVudEluZGV4UXVpY2tseSgqb2JqZWN0LCBpKSkgewogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHdpbGwgbWFrZSB1cyB0aGluayB0aGF0IGluLWJvdW5kcyB0eXBlZCBhcnJh
eSBhY2Nlc3NlcyBhcmUgYWN0dWFsbHkKICAgICAgICAgICAgICAgICAvLyBvdXQtb2YtYm91bmRz
LgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDk4ODYKQEAgLTE5NTAsNyArMTkzNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uSGEKICAgICBpZiAob2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5k
ZXgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6SlNU
cnVlKSk7CiAKLSAgICBpZiAoIWNhbkFjY2Vzc0FyZ3VtZW50SW5kZXhRdWlja2x5KCpvYmplY3Qs
IGluZGV4KSkgeworICAgIGlmICghQ29tbW9uU2xvd1BhdGhzOjpjYW5BY2Nlc3NBcmd1bWVudElu
ZGV4UXVpY2tseSgqb2JqZWN0LCBpbmRleCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgd2ls
bCBtYWtlIHVzIHRoaW5rIHRoYXQgaW4tYm91bmRzIHR5cGVkIGFycmF5IGFjY2Vzc2VzIGFyZSBh
Y3R1YWxseQogICAgICAgICAvLyBvdXQtb2YtYm91bmRzLgogICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5ODg2CkBAIC0xOTc0LDcgKzE5NjEsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhCiAgICAgaWYgKG9iamVj
dC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKEpTVmFsdWU6OkpTVHJ1ZSkpOwogCi0gICAgaWYgKCFjYW5BY2Nlc3NBcmd1
bWVudEluZGV4UXVpY2tseSgqb2JqZWN0LCBpbmRleCkpIHsKKyAgICBpZiAoIUNvbW1vblNsb3dQ
YXRoczo6Y2FuQWNjZXNzQXJndW1lbnRJbmRleFF1aWNrbHkoKm9iamVjdCwgaW5kZXgpKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgbWFrZSB1cyB0aGluayB0aGF0IGluLWJvdW5kcyB0
eXBlZCBhcnJheSBhY2Nlc3NlcyBhcmUgYWN0dWFsbHkKICAgICAgICAgLy8gb3V0LW9mLWJvdW5k
cy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
OTg4NgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAyMjg2MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzYsNyArODM2LDcgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlbF9ieV9pZAogICAgIExMSU5UX1JFVFVSTihq
c0Jvb2xlYW4oY291bGREZWxldGUpKTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBnZXRCeVZhbChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpT
VmFsdWUgc3Vic2NyaXB0KQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRCeVZhbChW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHBjLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgSlNWYWx1ZSBzdWJzY3JpcHQpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCkBAIC04NTIsMTAgKzg1MiwzMSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGdldEJ5VmFsKFZNCiAgICAgCiAgICAgaWYgKHN1YnNjcmlwdC5pc1VJbnQzMigpKSB7
CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYg
KGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRl
eChpKSkgewotICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJu
IGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGV4ZWMsIGkpOworICAgICAgICBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSA9IHBjWzRdLnUuYXJyYXlQcm9maWxlOworCisgICAgICAgIGlm
IChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKKyAgICAgICAgICAgIGlmIChhc1N0cmluZyhiYXNl
VmFsdWUpLT5jYW5HZXRJbmRleChpKSkgeworICAgICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgo
ZXhlYywgaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91
dE9mQm91bmRzKCk7CisgICAgICAgIH0gZWxzZSBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAg
ICAgICAgICAgaWYgKG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBvYmplY3QtPmdldEluZGV4UXVpY2tseShpKTsKKworICAgICAgICAgICAgYm9v
bCBza2lwTWFya2luZ091dE9mQm91bmRzID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICgob2Jq
ZWN0LT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUgfHwgb2JqZWN0LT5pbmRleGlu
Z1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKQorICAgICAgICAgICAgICAgICYmIGkgPCBv
YmplY3QtPmJ1dHRlcmZseSgpLT5wdWJsaWNMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8qIGdsb2JhbE9iamVjdCA9IG9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICAg
ICAgc2tpcE1hcmtpbmdPdXRPZkJvdW5kcyA9IGdsb2JhbE9iamVjdC0+aXNPcmlnaW5hbEFycmF5
U3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKCkpICYmIGdsb2JhbE9iamVjdC0+YXJyYXlQcm90
b3R5cGVDaGFpbklzU2FuZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXNr
aXBNYXJraW5nT3V0T2ZCb3VuZHMgJiYgIUNvbW1vblNsb3dQYXRoczo6Y2FuQWNjZXNzQXJndW1l
bnRJbmRleFF1aWNrbHkoKm9iamVjdCwgaSkpCisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxl
LT5zZXRPdXRPZkJvdW5kcygpOwogICAgICAgICB9CisKICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmdldChleGVjLCBpKTsKICAgICB9CkBAIC04NzEs
NyArODkyLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRCeVZhbChWTQogTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV92YWwpCiB7CiAgICAgTExJTlRfQkVH
SU4oKTsKLSAgICBMTElOVF9SRVRVUk5fUFJPRklMRUQob3BfZ2V0X2J5X3ZhbCwgZ2V0QnlWYWwo
dm0sIGV4ZWMsIExMSU5UX09QX0MoMikuanNWYWx1ZSgpLCBMTElOVF9PUF9DKDMpLmpzVmFsdWUo
KSkpOworICAgIExMSU5UX1JFVFVSTl9QUk9GSUxFRChvcF9nZXRfYnlfdmFsLCBnZXRCeVZhbCh2
bSwgZXhlYywgcGMsIExMSU5UX09QX0MoMikuanNWYWx1ZSgpLCBMTElOVF9PUF9DKDMpLmpzVmFs
dWUoKSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhbCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyMjg2MDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTU4Myw3ICsxNTgzLDcgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgYmluZXEg
dDIsIENvbnRpZ3VvdXNTaGFwZSwgLm9wR2V0QnlWYWxOb3RDb250aWd1b3VzCiAKIC5vcEdldEJ5
VmFsSXNDb250aWd1b3VzOgotICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbE91
dE9mQm91bmRzCisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAg
IGFuZGkgSlNPYmplY3Q6Om1fYnV0dGVyZmx5SW5kZXhpbmdNYXNrW3QwXSwgdDEKICAgICBsb2Fk
aSBUYWdPZmZzZXRbdDMsIHQxLCA4XSwgdDIKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W3QzLCB0
MSwgOF0sIHQxCkBAIC0xNTkxLDcgKzE1OTEsNyBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKIAog
Lm9wR2V0QnlWYWxOb3RDb250aWd1b3VzOgogICAgIGJpbmVxIHQyLCBEb3VibGVTaGFwZSwgLm9w
R2V0QnlWYWxOb3REb3VibGUKLSAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciAr
IEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxP
dXRPZkJvdW5kcworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhp
bmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKICAg
ICBhbmRpIEpTT2JqZWN0OjptX2J1dHRlcmZseUluZGV4aW5nTWFza1t0MF0sIHQxCiAgICAgbG9h
ZGQgW3QzLCB0MSwgOF0sIGZ0MAogICAgIGJkbmVxdW4gZnQwLCBmdDAsIC5vcEdldEJ5VmFsU2xv
dwpAQCAtMTYwMywyMyArMTYwMywyMCBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKIC5vcEdldEJ5
VmFsTm90RG91YmxlOgogICAgIHN1YmkgQXJyYXlTdG9yYWdlU2hhcGUsIHQyCiAgICAgYmlhIHQy
LCBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgLSBBcnJheVN0b3JhZ2VTaGFwZSwgLm9wR2V0QnlW
YWxTbG93Ci0gICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6dS5sZW5ndGhzLnZlY3Rvckxlbmd0aFt0M10sIC5vcEdldEJ5VmFsT3V0T2ZCb3VuZHMK
KyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1
Lmxlbmd0aHMudmVjdG9yTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CiAgICAgYW5kaSBKU09i
amVjdDo6bV9idXR0ZXJmbHlJbmRleGluZ01hc2tbdDBdLCB0MQogICAgIGxvYWRpIEFycmF5U3Rv
cmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRbdDMsIHQxLCA4XSwgdDIKICAgICBsb2FkaSBBcnJh
eVN0b3JhZ2U6Om1fdmVjdG9yICsgUGF5bG9hZE9mZnNldFt0MywgdDEsIDhdLCB0MQogCiAub3BH
ZXRCeVZhbERvbmU6CiAgICAgbG9hZGkgNFtQQ10sIHQwCi0gICAgYmllcSB0MiwgRW1wdHlWYWx1
ZVRhZywgLm9wR2V0QnlWYWxPdXRPZkJvdW5kcworICAgIGJpZXEgdDIsIEVtcHR5VmFsdWVUYWcs
IC5vcEdldEJ5VmFsU2xvdwogLm9wR2V0QnlWYWxOb3RFbXB0eToKICAgICBzdG9yZWkgdDIsIFRh
Z09mZnNldFtjZnIsIHQwLCA4XQogICAgIHN0b3JlaSB0MSwgUGF5bG9hZE9mZnNldFtjZnIsIHQw
LCA4XQogICAgIHZhbHVlUHJvZmlsZSh0MiwgdDEsIDIwLCB0MCkKICAgICBkaXNwYXRjaChjb25z
dGV4cHIgb3BfZ2V0X2J5X3ZhbF9sZW5ndGgpCiAKLS5vcEdldEJ5VmFsT3V0T2ZCb3VuZHM6Ci0g
ICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNCwgdDApCi0gICAgc3RvcmViIDEsIEFycmF5UHJvZmls
ZTo6bV9vdXRPZkJvdW5kc1t0MF0KIC5vcEdldEJ5VmFsU2xvdzoKICAgICBjYWxsT3Bjb2RlU2xv
d1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9nZXRfYnlfdmFsKQogICAgIGRpc3BhdGNoKGNvbnN0ZXhw
ciBvcF9nZXRfYnlfdmFsX2xlbmd0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyMjg2MDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMTUxNCwyMCArMTUxNCwyMCBAQCBfbGxpbnRfb3BfZ2V0X2J5
X3ZhbDoKICAgICBiaW5lcSB0MiwgQ29udGlndW91c1NoYXBlLCAub3BHZXRCeVZhbE5vdENvbnRp
Z3VvdXMKIAogLm9wR2V0QnlWYWxJc0NvbnRpZ3VvdXM6Ci0gICAgYmlhZXEgdDEsIC1zaXplb2Yg
SW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0
M10sIC5vcEdldEJ5VmFsT3V0T2ZCb3VuZHMKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGlu
Z0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QzXSwgLm9w
R2V0QnlWYWxTbG93CiAgICAgYW5kaSBKU09iamVjdDo6bV9idXR0ZXJmbHlJbmRleGluZ01hc2tb
dDBdLCB0MQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MCkKICAgICBsb2FkcSBbdDMs
IHQxLCA4XSwgdDIKLSAgICBidHF6IHQyLCAub3BHZXRCeVZhbE91dE9mQm91bmRzCisgICAgYnRx
eiB0MiwgLm9wR2V0QnlWYWxTbG93CiAgICAgam1wIC5vcEdldEJ5VmFsRG9uZQogCiAub3BHZXRC
eVZhbE5vdENvbnRpZ3VvdXM6CiAgICAgYmluZXEgdDIsIERvdWJsZVNoYXBlLCAub3BHZXRCeVZh
bE5vdERvdWJsZQotICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhp
bmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbE91dE9mQm91
bmRzCisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGFuZGkg
SlNPYmplY3Q6Om1fYnV0dGVyZmx5SW5kZXhpbmdNYXNrW3QwXSwgdDEKICAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oMSAsdDApCiAgICAgbG9hZGQgW3QzLCB0MSwgOF0sIGZ0MAotICAgIGJkbmVx
dW4gZnQwLCBmdDAsIC5vcEdldEJ5VmFsT3V0T2ZCb3VuZHMKKyAgICBiZG5lcXVuIGZ0MCwgZnQw
LCAub3BHZXRCeVZhbFNsb3cKICAgICBmZDJxIGZ0MCwgdDIKICAgICBzdWJxIHRhZ1R5cGVOdW1i
ZXIsIHQyCiAgICAgam1wIC5vcEdldEJ5VmFsRG9uZQpAQCAtMTUzNSwyMiArMTUzNSwxNyBAQCBf
bGxpbnRfb3BfZ2V0X2J5X3ZhbDoKIC5vcEdldEJ5VmFsTm90RG91YmxlOgogICAgIHN1YmkgQXJy
YXlTdG9yYWdlU2hhcGUsIHQyCiAgICAgYmlhIHQyLCBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUg
LSBBcnJheVN0b3JhZ2VTaGFwZSwgLm9wR2V0QnlWYWxOb3RJbmRleGVkU3RvcmFnZQotICAgIGJp
YWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Ro
cy52ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbE91dE9mQm91bmRzCisgICAgYmlhZXEgdDEs
IC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnZlY3Rv
ckxlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGFuZGkgSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5SW5kZXhpbmdNYXNrW3QwXSwgdDEKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDAp
CiAgICAgbG9hZHEgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0MgotICAgIGJ0
cXogdDIsIC5vcEdldEJ5VmFsT3V0T2ZCb3VuZHMKKyAgICBidHF6IHQyLCAub3BHZXRCeVZhbFNs
b3cKIAogLm9wR2V0QnlWYWxEb25lOgogICAgIHN0b3JlcSB0MiwgW2NmciwgdDAsIDhdCiAgICAg
dmFsdWVQcm9maWxlKHQyLCA1LCB0MCkKICAgICBkaXNwYXRjaChjb25zdGV4cHIgb3BfZ2V0X2J5
X3ZhbF9sZW5ndGgpCiAKLS5vcEdldEJ5VmFsT3V0T2ZCb3VuZHM6Ci0gICAgbG9hZHBGcm9tSW5z
dHJ1Y3Rpb24oNCwgdDApCi0gICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9vdXRPZkJvdW5k
c1t0MF0KLSAgICBqbXAgLm9wR2V0QnlWYWxTbG93Ci0KIC5vcEdldEJ5VmFsTm90SW5kZXhlZFN0
b3JhZ2U6CiAgICAgIyBGaXJzdCBsZXRzIGNoZWNrIGlmIHdlIGV2ZW4gaGF2ZSBhIHR5cGVkIGFy
cmF5LiBUaGlzIGxldHMgdXMgZG8gc29tZSBib2lsZXJwbGF0ZSB1cCBmcm9udC4KICAgICBsb2Fk
YiBKU0NlbGw6Om1fdHlwZVt0MF0sIHQyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMjI4NjA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDggKzI3LDEwIEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhSZXR1
cm5UeXBlLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKICNpbmNsdWRlICJWTUlubGlu
ZXMuaCIKQEAgLTIwMiw2ICsyMDQsMjcgQEAgaW5saW5lIHZvaWQgdHJ5Q2FjaGVHZXRGcm9tU2Nv
cGVHbG9iYWwoCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBjYW5BY2Nlc3NBcmd1bWVudEluZGV4
UXVpY2tseShKU09iamVjdCYgb2JqZWN0LCB1aW50MzJfdCBpbmRleCkKK3sKKyAgICBzd2l0Y2gg
KG9iamVjdC5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpIHsKKyAgICBjYXNlIERpcmVj
dEFyZ3VtZW50c1R5cGU6IHsKKyAgICAgICAgRGlyZWN0QXJndW1lbnRzKiBkaXJlY3RBcmd1bWVu
dHMgPSBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oJm9iamVjdCk7CisgICAgICAgIGlmIChkaXJl
Y3RBcmd1bWVudHMtPmlzTWFwcGVkQXJndW1lbnRJbkRGRyhpbmRleCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgU2NvcGVkQXJndW1l
bnRzVHlwZTogeworICAgICAgICBTY29wZWRBcmd1bWVudHMqIHNjb3BlZEFyZ3VtZW50cyA9IGpz
Q2FzdDxTY29wZWRBcmd1bWVudHMqPigmb2JqZWN0KTsKKyAgICAgICAgaWYgKHNjb3BlZEFyZ3Vt
ZW50cy0+aXNNYXBwZWRBcmd1bWVudEluREZHKGluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgQ29tbW9uU2xv
d1BhdGhzCiAKIGNsYXNzIEV4ZWNTdGF0ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334188</attachid>
            <date>2018-02-19 14:50:04 -0800</date>
            <delta_ts>2018-02-19 18:00:43 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>23179</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI4NzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDE4LTAyLTE5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IERvbid0IG1hcmsgYW4gYXJyYXkgcHJvZmlsZSBvdXQgb2YgYm91bmRzIGZvciB0aGUgY2FzZXMg
d2hlcmUgdGhlIERGRyB3aWxsIGNvbnZlcnQgdGhlIGFjY2VzcyB0byBTYW5lQ2hhaW4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjkxMgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzc2ODUwODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW4gdGhlIGJhc2VsaW5lIEpJVCBhbmQgTExJbnQsIHdoZW4g
d2UgbG9hZGluZyBhIGhvbGUgZnJvbSBhbiBvcmlnaW5hbCBhcnJheSwKKyAgICAgICAgd2l0aCB0
aGUgYXJyYXkgcHJvdG90eXBlIGNoYWluIGJlaW5nIG5vcm1hbCwgd2UgZW5kIHVwIG1hcmtpbmcg
dGhlIEFycmF5UHJvZmlsZQorICAgICAgICBmb3IgdGhhdCBHZXRCeVZhbCBhcyBvdXQgb2YgYm91
bmRzLiBIb3dldmVyLCB0aGUgREZHIGtub3dzIGV4YWN0bHkgaG93IHRvCisgICAgICAgIG9wdGlt
aXplIHRoaXMgY2FzZSBieSByZXR1cm5pbmcgdW5kZWZpbmVkIHdoZW4gbG9hZGluZyBmcm9tIGEg
aG9sZS4gQ3VycmVudGx5LAorICAgICAgICBpdCBvbmx5IGRvZXMgdGhpcyBmb3IgQ29udGlndW91
cyBhcnJheXMgKGFuZCBzb21ldGltZXMgRG91YmxlIGFycmF5cykuCisgICAgICAgIFRoaXMgcGF0
Y2gganVzdCBtYWtlcyBzdXJlIHRvIG5vdCBtYXJrIHRoZSBBcnJheVByb2ZpbGUgYXMgb3V0IG9m
IGJvdW5kcworICAgICAgICBpbiB0aGlzIHNjZW5hcmlvIGZvciBDb250aWd1b3VzIGFycmF5cywg
c2luY2UgdGhlIERGRyB3aWxsIGFsd2F5cyBvcHRpbWl6ZQorICAgICAgICB0aGlzIGNhc2UuCisg
ICAgICAgIAorICAgICAgICBIb3dldmVyLCB3ZSBzaG91bGQgZXh0ZW5kIHRoaXMgYnkgcHJvZmls
aW5nIHdoZW4gYSBHZXRCeVZhbCBsb2FkcyBhIGhvbGUuIEJ5CisgICAgICAgIGRvaW5nIHNvLCB3
ZSBjYW4gb3B0aW1pemUgdGhpcyBmb3IgSW50MzIsIEFycmF5U3RvcmFnZSwgYW5kIG1heWJlIGV2
ZW4gRG91YmxlCisgICAgICAgIGFycmF5cy4gVGhhdCB3b3JrIHdpbGwgaGFwcGVuIGluOgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyOTQwCisgICAg
ICAgIAorICAgICAgICBUaGlzIHBhdGNoIGlzIGEgMzAtNTAlICBzcGVlZHVwIG9uIEpldFN0cmVh
bSdzIGhhc2gtbWFwIHRlc3QuIFRoaXMgcGF0Y2gKKyAgICAgICAgc3BlZWRzIHVwIEpldFN0cmVh
bSBieSAxJSB3aGVuIHRlc3Rpbmcgb24gbXkgaU1hYy4KKworICAgICAgICAqIGRmZy9ERkdBcnJh
eU1vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6cmVmaW5lIGNvbnN0KToK
KyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Y2FuQWNjZXNzQXJndW1lbnRJ
bmRleFF1aWNrbHkpOiBEZWxldGVkLgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206
CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKEpTQzo6Q29t
bW9uU2xvd1BhdGhzOjpjYW5BY2Nlc3NBcmd1bWVudEluZGV4UXVpY2tseSk6CisKIDIwMTgtMDIt
MTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBHZXRBcnJheU1h
c2sgc2hvdWxkIHN1cHBvcnQgY29uc3RhbnQgZm9sZGluZwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMjI4NjA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTAsMTIgKzIxMCwxNiBAQCBBcnJheU1vZGUgQXJyYXlNb2RlOjpyZWZpbmUoCiAgICAgICAgIC8v
IElmIHdlIGhhdmUgYW4gT3JpZ2luYWxBcnJheSBhbmQgdGhlIEpTQXJyYXkgcHJvdG90eXBlIGNo
YWluIGlzIHNhbmUsCiAgICAgICAgIC8vIGFueSBpbmRleGVkIGFjY2VzcyBhbHdheXMgcmV0dXJu
IHVuZGVmaW5lZC4gV2UgaGF2ZSBhIGZhc3QgcGF0aCBmb3IgdGhhdC4KICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpOworICAgICAgICBTdHJ1Y3R1cmUqIGFycmF5UHJvdG90eXBlU3RydWN0dXJl
ID0gZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAg
U3RydWN0dXJlKiBvYmplY3RQcm90b3R5cGVTdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPm9iamVj
dFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgaWYgKChub2RlLT5vcCgpID09IEdl
dEJ5VmFsIHx8IGNhbkJlY29tZUdldEFycmF5TGVuZ3RoKGdyYXBoLCBub2RlKSkKICAgICAgICAg
ICAgICYmIGFycmF5Q2xhc3MoKSA9PSBBcnJheTo6T3JpZ2luYWxBcnJheQotICAgICAgICAgICAg
JiYgZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkKLSAgICAgICAgICAg
ICYmICFncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE91dE9mQm91bmRz
KSkgewotICAgICAgICAgICAgZ3JhcGgucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5zaXRp
b24oZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAg
ICAgICBncmFwaC5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihnbG9iYWxPYmpl
Y3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAmJiAhZ3Jh
cGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBPdXRPZkJvdW5kcykKKyAgICAg
ICAgICAgICYmIGFycmF5UHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dElzU3RpbGxWYWxpZCgpCisgICAgICAgICAgICAmJiBvYmplY3RQcm90b3R5cGVTdHJ1Y3R1cmUt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkKKyAgICAgICAgICAgICYmIGds
b2JhbE9iamVjdC0+YXJyYXlQcm90b3R5cGVDaGFpbklzU2FuZSgpKSB7CisgICAgICAgICAgICBn
cmFwaC5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihhcnJheVByb3RvdHlwZVN0
cnVjdHVyZSk7CisgICAgICAgICAgICBncmFwaC5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJh
bnNpdGlvbihvYmplY3RQcm90b3R5cGVTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaWYgKGdsb2Jh
bE9iamVjdC0+YXJyYXlQcm90b3R5cGVDaGFpbklzU2FuZSgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB3aXRoU3BlY3VsYXRpb24oQXJyYXk6OlNhbmVDaGFpbik7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24g
MjI4NjA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzIyLDU1ICs3MjIsNTggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmFycmF5
Q2xhc3MoKSA9PSBBcnJheTo6T3JpZ2luYWxBcnJheQogICAgICAgICAgICAgICAgICAgICAmJiBh
cnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKLSAgICAgICAgICAg
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChn
bG9iYWxPYmplY3QtPmFycmF5UHJvdG90eXBlQ2hhaW5Jc1NhbmUoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgU2FuZUNoYWluIHdpbGwgd29yayBvbiBhIHBlci10eXBl
IGJhc2lzLiBOb3RlIHRoYXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gMSkgV2UgZG9uJ3Qgd2FudCBkb3VibGUgYXJyYXlzIHRvIHNvbWV0
aW1lcyByZXR1cm4gdW5kZWZpbmVkLCBzaW5jZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGhhdCB3b3VsZCByZXF1aXJlIGEgY2hhbmdlIHRvIHRoZSByZXR1cm4gdHlwZSBhbmQgaXQgd291
bGQgcGVzc2ltaXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGluZ3MgYSBsb3QuIFNv
LCB3ZSdkIG9ubHkgd2FudCB0byBkbyB0aGF0IGlmIHdlIGFjdHVhbGx5IGhhZAotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZXZpZGVuY2UgdGhhdCB3ZSBjb3VsZCByZWFkIGZyb20gYSBob2xl
LiBUaGF0J3MgcHJldHR5IGFubm95aW5nLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGlr
ZWx5IHRoZSBiZXN0IHdheSB0byBoYW5kbGUgdGhhdCBjYXNlIGlzIHdpdGggYW4gZXF1aXZhbGVu
dCBvZgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2FuZUNoYWluIGZvciBPdXRPZkJvdW5k
cy4gRm9yIG5vdyB3ZSBqdXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE5hTiBhcmUgaW5kaXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJh
Y2t3YXJkcyBwcm9wYWdhdGlvbiwgYW5kIGp1c3QKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHVzZSBTYW5lQ2hhaW4gaW4gdGhhdCBjYXNlLiBUaGlzIGhhcHBlbnMgdG8gY2F0Y2ggYSBsb3Qg
b2YgY2FzZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gMikgV2UgZG9uJ3Qgd2FudCBpbnQzMiBhcnJheSBsb2FkcyB0byBoYXZlIHRvIGRv
IGEgaG9sZSBjaGVjayBqdXN0IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2VyY2Ug
dG8gVW5kZWZpbmVkLCBzaW5jZSB0aGF0IHdvdWxkIG1lYW4gdHdpY2UgdGhlIGNoZWNrcy4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGhhcyB0d28gaW1wbGljYXRpb25zLiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0
aGFuIHdlJ2QKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5h
dGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoZSBob2xlIGNoZWNrLiBTZWNvbmQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9sZSB3aWxsIG5vdyBu
ZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91
dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDQ2NjgKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgU2FuZUNoYWluIHdpbGwgd29y
ayBvbiBhIHBlci10eXBlIGJhc2lzLiBOb3RlIHRoYXQ6CisgICAgICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgICAgIC8vIDEpIFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0
byBzb21ldGltZXMgcmV0dXJuIHVuZGVmaW5lZCwgc2luY2UKKyAgICAgICAgICAgICAgICAgICAg
Ly8gdGhhdCB3b3VsZCByZXF1aXJlIGEgY2hhbmdlIHRvIHRoZSByZXR1cm4gdHlwZSBhbmQgaXQg
d291bGQgcGVzc2ltaXNlCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaW5ncyBhIGxvdC4gU28s
IHdlJ2Qgb25seSB3YW50IHRvIGRvIHRoYXQgaWYgd2UgYWN0dWFsbHkgaGFkCisgICAgICAgICAg
ICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBmcm9tIGEgaG9sZS4gVGhh
dCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgICAgICAgICAgLy8gTGlrZWx5IHRoZSBi
ZXN0IHdheSB0byBoYW5kbGUgdGhhdCBjYXNlIGlzIHdpdGggYW4gZXF1aXZhbGVudCBvZgorICAg
ICAgICAgICAgICAgICAgICAvLyBTYW5lQ2hhaW4gZm9yIE91dE9mQm91bmRzLiBGb3Igbm93IHdl
IGp1c3QgZGV0ZWN0IHdoZW4gVW5kZWZpbmVkIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyBO
YU4gYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGFjY29yZGluZyB0byBiYWNrd2FyZHMgcHJvcGFnYXRp
b24sIGFuZCBqdXN0CisgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBTYW5lQ2hhaW4gaW4gdGhh
dCBjYXNlLiBUaGlzIGhhcHBlbnMgdG8gY2F0Y2ggYSBsb3Qgb2YgY2FzZXMuCisgICAgICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIDIpIFdlIGRvbid0IHdhbnQgaW50
MzIgYXJyYXkgbG9hZHMgdG8gaGF2ZSB0byBkbyBhIGhvbGUgY2hlY2sganVzdCB0bworICAgICAg
ICAgICAgICAgICAgICAvLyBjb2VyY2UgdG8gVW5kZWZpbmVkLCBzaW5jZSB0aGF0IHdvdWxkIG1l
YW4gdHdpY2UgdGhlIGNoZWNrcy4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBoYXMgdHdvIGltcGxpY2F0aW9ucy4gRmlyc3QsIHdlIGhhdmUgdG8g
ZG8gbW9yZSBjaGVja3MgdGhhbiB3ZSdkCisgICAgICAgICAgICAgICAgICAgIC8vIGxpa2UuIEl0
J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoZSBob2xlIGNoZWNrLiBTZWNvbmQs
CisgICAgICAgICAgICAgICAgICAgIC8vIHNvbWUgYWNjZXNzZXMgdGhhdCBoaXQgYSBob2xlIHdp
bGwgbm93IG5lZWQgdG8gdGFrZSB0aGUgZnVsbC1ibG93bgorICAgICAgICAgICAgICAgICAgICAv
LyBvdXQtb2YtYm91bmRzIHNsb3cgcGF0aC4gV2UgY2FuIGZpeCB0aGF0IHdpdGg6CisgICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDQ2NjgKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGJvb2wgY2Fu
RG9TYW5lQ2hhaW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcnJheU1v
ZGUudHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGhhcHBlbnMgdG8gYmUgZW50aXJl
bHkgbmF0dXJhbC4gV2UgYWxyZWFkeSB3b3VsZCBoYXZlCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyByZXR1cm5lZCBhbnkgSlNWYWx1ZSwgYW5kIG5vdyB3ZSdsbCByZXR1cm4gVW5kZWZpbmVk
LiBXZSBzdGlsbCBkbworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBp
dCBkb2Vzbid0IHJlcXVpcmUgdGFraW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbkRvU2FuZUNoYWluID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNhbkRvU2FuZUNoYWluID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVudGlyZWx5IG5hdHVyYWwuIFdlIGFscmVhZHkgd291bGQg
aGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybmVkIGFueSBKU1ZhbHVl
LCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdlIHN0aWxsIGRvCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJlcXVpcmUgdGFr
aW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEhvbGVzIGxvb2sgbGlrZSBOYU4gYWxyZWFkeSwgc28gaWYgdGhlIHVzZXIgZG9lc24ndCBj
YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZlcmVuY2Ug
YmV0d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGRvIHRoaXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuRG9T
YW5lQ2hhaW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5vZGUtPmZs
YWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcikpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNl
ciBkb2Vzbid0IGNhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQg
dGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyB0aGlzLgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYW5Eb1NhbmVDaGFpbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuRG9TYW5lQ2hhaW4pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1
cmVUcmFuc2l0aW9uKGdsb2JhbE9iamVjdC0+YXJyYXlQcm90b3R5cGUoKS0+c3RydWN0dXJlKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJBbmRXYXRjaFN0
cnVjdHVyZVRyYW5zaXRpb24oZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKS0+c3RydWN0
dXJlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxPYmplY3QtPmFy
cmF5UHJvdG90eXBlQ2hhaW5Jc1NhbmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZS53aXRoU3BlY3VsYXRpb24oQXJyYXk6OlNh
bmVDaGFpbikpOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5Eb1NhbmVDaGFpbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIGFycmF5UHJvdG90eXBlU3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5h
cnJheVByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0
cnVjdHVyZSogb2JqZWN0UHJvdG90eXBlU3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKS0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJy
YXlQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlk
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvYmplY3RQcm90b3R5cGVTdHJ1Y3R1
cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90eXBlQ2hhaW5Jc1NhbmUo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJBbmRXYXRj
aFN0cnVjdHVyZVRyYW5zaXRpb24oYXJyYXlQcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5z
aXRpb24ob2JqZWN0UHJvdG90eXBlU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndpdGhTcGVjdWxhdGlvbihBcnJheTo6
U2FuZUNoYWluKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIyODYwNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjQsMjcg
KzE3MjQsNiBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPCiAKIH0K
IAotc3RhdGljIGJvb2wgY2FuQWNjZXNzQXJndW1lbnRJbmRleFF1aWNrbHkoSlNPYmplY3QmIG9i
amVjdCwgdWludDMyX3QgaW5kZXgpCi17Ci0gICAgc3dpdGNoIChvYmplY3Quc3RydWN0dXJlKCkt
PnR5cGVJbmZvKCkudHlwZSgpKSB7Ci0gICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOiB7Ci0g
ICAgICAgIERpcmVjdEFyZ3VtZW50cyogZGlyZWN0QXJndW1lbnRzID0ganNDYXN0PERpcmVjdEFy
Z3VtZW50cyo+KCZvYmplY3QpOwotICAgICAgICBpZiAoZGlyZWN0QXJndW1lbnRzLT5pc01hcHBl
ZEFyZ3VtZW50SW5ERkcoaW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6IHsKLSAgICAgICAg
U2NvcGVkQXJndW1lbnRzKiBzY29wZWRBcmd1bWVudHMgPSBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRz
Kj4oJm9iamVjdCk7Ci0gICAgICAgIGlmIChzY29wZWRBcmd1bWVudHMtPmlzTWFwcGVkQXJndW1l
bnRJbkRGRyhpbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KIHN0YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CkBAIC0xNzgxLDcgKzE3NjAsMTYgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0
YXRlKiBleGVjLAogICAgICAgICAgICAgaWYgKG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QtPmdldEluZGV4UXVpY2tseShpKTsKIAot
ICAgICAgICAgICAgaWYgKCFjYW5BY2Nlc3NBcmd1bWVudEluZGV4UXVpY2tseSgqb2JqZWN0LCBp
KSkgeworICAgICAgICAgICAgYm9vbCBza2lwTWFya2luZ091dE9mQm91bmRzID0gZmFsc2U7CisK
KyAgICAgICAgICAgIGlmIChvYmplY3QtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aENvbnRp
Z3VvdXMgJiYgaSA8IG9iamVjdC0+YnV0dGVyZmx5KCktPnB1YmxpY0xlbmd0aCgpKSB7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IGV4cGFuZCB0aGlzIHRvIEFycmF5U3RvcmFnZSwgSW50MzIs
IGFuZCBtYXliZSBEb3VibGU6CisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mjk0MAorICAgICAgICAgICAgICAgIGF1dG8qIGdsb2Jh
bE9iamVjdCA9IG9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgc2tpcE1h
cmtpbmdPdXRPZkJvdW5kcyA9IGdsb2JhbE9iamVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJl
KG9iamVjdC0+c3RydWN0dXJlKCkpICYmIGdsb2JhbE9iamVjdC0+YXJyYXlQcm90b3R5cGVDaGFp
bklzU2FuZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXNraXBNYXJraW5n
T3V0T2ZCb3VuZHMgJiYgIUNvbW1vblNsb3dQYXRoczo6Y2FuQWNjZXNzQXJndW1lbnRJbmRleFF1
aWNrbHkoKm9iamVjdCwgaSkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB3aWxs
IG1ha2UgdXMgdGhpbmsgdGhhdCBpbi1ib3VuZHMgdHlwZWQgYXJyYXkgYWNjZXNzZXMgYXJlIGFj
dHVhbGx5CiAgICAgICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcy4KICAgICAgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5ODg2CkBAIC0x
OTUwLDcgKzE5MzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhh
CiAgICAgaWYgKG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6OkpTVHJ1ZSkpOwogCi0gICAgaWYg
KCFjYW5BY2Nlc3NBcmd1bWVudEluZGV4UXVpY2tseSgqb2JqZWN0LCBpbmRleCkpIHsKKyAgICBp
ZiAoIUNvbW1vblNsb3dQYXRoczo6Y2FuQWNjZXNzQXJndW1lbnRJbmRleFF1aWNrbHkoKm9iamVj
dCwgaW5kZXgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgbWFrZSB1cyB0aGluayB0
aGF0IGluLWJvdW5kcyB0eXBlZCBhcnJheSBhY2Nlc3NlcyBhcmUgYWN0dWFsbHkKICAgICAgICAg
Ly8gb3V0LW9mLWJvdW5kcy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0OTg4NgpAQCAtMTk3NCw3ICsxOTYyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25IYQogICAgIGlmIChvYmplY3QtPmNhbkdldEluZGV4UXVp
Y2tseShpbmRleCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1Zh
bHVlOjpKU1RydWUpKTsKIAotICAgIGlmICghY2FuQWNjZXNzQXJndW1lbnRJbmRleFF1aWNrbHko
Km9iamVjdCwgaW5kZXgpKSB7CisgICAgaWYgKCFDb21tb25TbG93UGF0aHM6OmNhbkFjY2Vzc0Fy
Z3VtZW50SW5kZXhRdWlja2x5KCpvYmplY3QsIGluZGV4KSkgewogICAgICAgICAvLyBGSVhNRTog
VGhpcyB3aWxsIG1ha2UgdXMgdGhpbmsgdGhhdCBpbi1ib3VuZHMgdHlwZWQgYXJyYXkgYWNjZXNz
ZXMgYXJlIGFjdHVhbGx5CiAgICAgICAgIC8vIG91dC1vZi1ib3VuZHMuCiAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk4ODYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24g
MjI4NjA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODM2LDcgKzgzNiw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9kZWxfYnlfaWQKICAgICBMTElOVF9SRVRVUk4oanNCb29sZWFuKGNvdWxkRGVs
ZXRlKSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0QnlWYWwoVk0mIHZt
LCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCkK
K3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0QnlWYWwoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIEluc3RydWN0aW9uKiBwYywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2Ny
aXB0KQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApAQCAt
ODUyLDEwICs4NTIsMzIgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRCeVZhbChW
TQogICAgIAogICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgewogICAgICAgICB1aW50MzJf
dCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VW
YWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKLSAgICAgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFs
dWUpLT5nZXRJbmRleChleGVjLCBpKTsKKyAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2Zp
bGUgPSBwY1s0XS51LmFycmF5UHJvZmlsZTsKKworICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNl
VmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5k
ZXgoaSkpIHsKKyAgICAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGV4ZWMsIGkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOworICAg
ICAgICB9IGVsc2UgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIGlmIChvYmpl
Y3QtPmNhbkdldEluZGV4UXVpY2tseShpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0
LT5nZXRJbmRleFF1aWNrbHkoaSk7CisKKyAgICAgICAgICAgIGJvb2wgc2tpcE1hcmtpbmdPdXRP
ZkJvdW5kcyA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAob2JqZWN0LT5pbmRleGluZ1R5cGUo
KSA9PSBBcnJheVdpdGhDb250aWd1b3VzICYmIGkgPCBvYmplY3QtPmJ1dHRlcmZseSgpLT5wdWJs
aWNMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBleHBhbmQgdGhpcyB0byBB
cnJheVN0b3JhZ2UsIEludDMyLCBhbmQgbWF5YmUgRG91YmxlOgorICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI5NDAKKyAgICAgICAg
ICAgICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBvYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAg
ICAgICAgICAgICAgIHNraXBNYXJraW5nT3V0T2ZCb3VuZHMgPSBnbG9iYWxPYmplY3QtPmlzT3Jp
Z2luYWxBcnJheVN0cnVjdHVyZShvYmplY3QtPnN0cnVjdHVyZSgpKSAmJiBnbG9iYWxPYmplY3Qt
PmFycmF5UHJvdG90eXBlQ2hhaW5Jc1NhbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFza2lwTWFya2luZ091dE9mQm91bmRzICYmICFDb21tb25TbG93UGF0aHM6OmNhbkFj
Y2Vzc0FyZ3VtZW50SW5kZXhRdWlja2x5KCpvYmplY3QsIGkpKQorICAgICAgICAgICAgICAgIGFy
cmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgfQorCiAgICAgICAgIHNjb3Bl
LnJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoZXhlYywgaSk7CiAgICAg
fQpAQCAtODcxLDcgKzg5Myw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0QnlW
YWwoVk0KIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfdmFsKQogewogICAg
IExMSU5UX0JFR0lOKCk7Ci0gICAgTExJTlRfUkVUVVJOX1BST0ZJTEVEKG9wX2dldF9ieV92YWws
IGdldEJ5VmFsKHZtLCBleGVjLCBMTElOVF9PUF9DKDIpLmpzVmFsdWUoKSwgTExJTlRfT1BfQygz
KS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9SRVRVUk5fUFJPRklMRUQob3BfZ2V0X2J5X3ZhbCwg
Z2V0QnlWYWwodm0sIGV4ZWMsIHBjLCBMTElOVF9PUF9DKDIpLmpzVmFsdWUoKSwgTExJTlRfT1Bf
QygzKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1
dF9ieV92YWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjI4NjA2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTE1ODMsNyArMTU4Myw3IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgog
ICAgIGJpbmVxIHQyLCBDb250aWd1b3VzU2hhcGUsIC5vcEdldEJ5VmFsTm90Q29udGlndW91cwog
CiAub3BHZXRCeVZhbElzQ29udGlndW91czoKLSAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGlu
Z0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QzXSwgLm9w
R2V0QnlWYWxPdXRPZkJvdW5kcworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZh
bFNsb3cKICAgICBhbmRpIEpTT2JqZWN0OjptX2J1dHRlcmZseUluZGV4aW5nTWFza1t0MF0sIHQx
CiAgICAgbG9hZGkgVGFnT2Zmc2V0W3QzLCB0MSwgOF0sIHQyCiAgICAgbG9hZGkgUGF5bG9hZE9m
ZnNldFt0MywgdDEsIDhdLCB0MQpAQCAtMTU5MSw3ICsxNTkxLDcgQEAgX2xsaW50X29wX2dldF9i
eV92YWw6CiAKIC5vcEdldEJ5VmFsTm90Q29udGlndW91czoKICAgICBiaW5lcSB0MiwgRG91Ymxl
U2hhcGUsIC5vcEdldEJ5VmFsTm90RG91YmxlCi0gICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhp
bmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0M10sIC5v
cEdldEJ5VmFsT3V0T2ZCb3VuZHMKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlW
YWxTbG93CiAgICAgYW5kaSBKU09iamVjdDo6bV9idXR0ZXJmbHlJbmRleGluZ01hc2tbdDBdLCB0
MQogICAgIGxvYWRkIFt0MywgdDEsIDhdLCBmdDAKICAgICBiZG5lcXVuIGZ0MCwgZnQwLCAub3BH
ZXRCeVZhbFNsb3cKQEAgLTE2MDMsMjMgKzE2MDMsMjAgQEAgX2xsaW50X29wX2dldF9ieV92YWw6
CiAub3BHZXRCeVZhbE5vdERvdWJsZToKICAgICBzdWJpIEFycmF5U3RvcmFnZVNoYXBlLCB0Mgog
ICAgIGJpYSB0MiwgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUs
IC5vcEdldEJ5VmFsU2xvdwotICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy52ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbE91
dE9mQm91bmRzCisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6dS5sZW5ndGhzLnZlY3Rvckxlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAg
IGFuZGkgSlNPYmplY3Q6Om1fYnV0dGVyZmx5SW5kZXhpbmdNYXNrW3QwXSwgdDEKICAgICBsb2Fk
aSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QzLCB0MSwgOF0sIHQyCiAgICAg
bG9hZGkgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFBheWxvYWRPZmZzZXRbdDMsIHQxLCA4XSwg
dDEKIAogLm9wR2V0QnlWYWxEb25lOgogICAgIGxvYWRpIDRbUENdLCB0MAotICAgIGJpZXEgdDIs
IEVtcHR5VmFsdWVUYWcsIC5vcEdldEJ5VmFsT3V0T2ZCb3VuZHMKKyAgICBiaWVxIHQyLCBFbXB0
eVZhbHVlVGFnLCAub3BHZXRCeVZhbFNsb3cKIC5vcEdldEJ5VmFsTm90RW1wdHk6CiAgICAgc3Rv
cmVpIHQyLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0KICAgICBzdG9yZWkgdDEsIFBheWxvYWRPZmZz
ZXRbY2ZyLCB0MCwgOF0KICAgICB2YWx1ZVByb2ZpbGUodDIsIHQxLCAyMCwgdDApCiAgICAgZGlz
cGF0Y2goY29uc3RleHByIG9wX2dldF9ieV92YWxfbGVuZ3RoKQogCi0ub3BHZXRCeVZhbE91dE9m
Qm91bmRzOgotICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDQsIHQwKQotICAgIHN0b3JlYiAxLCBB
cnJheVByb2ZpbGU6Om1fb3V0T2ZCb3VuZHNbdDBdCiAub3BHZXRCeVZhbFNsb3c6CiAgICAgY2Fs
bE9wY29kZVNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0X2J5X3ZhbCkKICAgICBkaXNwYXRj
aChjb25zdGV4cHIgb3BfZ2V0X2J5X3ZhbF9sZW5ndGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNp
b24gMjI4NjA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE1MTQsMjAgKzE1MTQsMjAgQEAgX2xsaW50
X29wX2dldF9ieV92YWw6CiAgICAgYmluZXEgdDIsIENvbnRpZ3VvdXNTaGFwZSwgLm9wR2V0QnlW
YWxOb3RDb250aWd1b3VzCiAKIC5vcEdldEJ5VmFsSXNDb250aWd1b3VzOgotICAgIGJpYWVxIHQx
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJs
aWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbE91dE9mQm91bmRzCisgICAgYmlhZXEgdDEsIC1zaXpl
b2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0
aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGFuZGkgSlNPYmplY3Q6Om1fYnV0dGVyZmx5SW5k
ZXhpbmdNYXNrW3QwXSwgdDEKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDApCiAgICAg
bG9hZHEgW3QzLCB0MSwgOF0sIHQyCi0gICAgYnRxeiB0MiwgLm9wR2V0QnlWYWxPdXRPZkJvdW5k
cworICAgIGJ0cXogdDIsIC5vcEdldEJ5VmFsU2xvdwogICAgIGptcCAub3BHZXRCeVZhbERvbmUK
IAogLm9wR2V0QnlWYWxOb3RDb250aWd1b3VzOgogICAgIGJpbmVxIHQyLCBEb3VibGVTaGFwZSwg
Lm9wR2V0QnlWYWxOb3REb3VibGUKLSAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlW
YWxPdXRPZkJvdW5kcworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5k
ZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cK
ICAgICBhbmRpIEpTT2JqZWN0OjptX2J1dHRlcmZseUluZGV4aW5nTWFza1t0MF0sIHQxCiAgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDEgLHQwKQogICAgIGxvYWRkIFt0MywgdDEsIDhdLCBmdDAK
LSAgICBiZG5lcXVuIGZ0MCwgZnQwLCAub3BHZXRCeVZhbE91dE9mQm91bmRzCisgICAgYmRuZXF1
biBmdDAsIGZ0MCwgLm9wR2V0QnlWYWxTbG93CiAgICAgZmQycSBmdDAsIHQyCiAgICAgc3VicSB0
YWdUeXBlTnVtYmVyLCB0MgogICAgIGptcCAub3BHZXRCeVZhbERvbmUKQEAgLTE1MzUsMjIgKzE1
MzUsMTcgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAub3BHZXRCeVZhbE5vdERvdWJsZToKICAg
ICBzdWJpIEFycmF5U3RvcmFnZVNoYXBlLCB0MgogICAgIGJpYSB0MiwgU2xvd1B1dEFycmF5U3Rv
cmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUsIC5vcEdldEJ5VmFsTm90SW5kZXhlZFN0b3Jh
Z2UKLSAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVy
Ojp1Lmxlbmd0aHMudmVjdG9yTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxPdXRPZkJvdW5kcworICAg
IGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVu
Z3Rocy52ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKICAgICBhbmRpIEpTT2JqZWN0
OjptX2J1dHRlcmZseUluZGV4aW5nTWFza1t0MF0sIHQxCiAgICAgbG9hZGlzRnJvbUluc3RydWN0
aW9uKDEsIHQwKQogICAgIGxvYWRxIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDMsIHQxLCA4XSwg
dDIKLSAgICBidHF6IHQyLCAub3BHZXRCeVZhbE91dE9mQm91bmRzCisgICAgYnRxeiB0MiwgLm9w
R2V0QnlWYWxTbG93CiAKIC5vcEdldEJ5VmFsRG9uZToKICAgICBzdG9yZXEgdDIsIFtjZnIsIHQw
LCA4XQogICAgIHZhbHVlUHJvZmlsZSh0MiwgNSwgdDApCiAgICAgZGlzcGF0Y2goY29uc3RleHBy
IG9wX2dldF9ieV92YWxfbGVuZ3RoKQogCi0ub3BHZXRCeVZhbE91dE9mQm91bmRzOgotICAgIGxv
YWRwRnJvbUluc3RydWN0aW9uKDQsIHQwKQotICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1f
b3V0T2ZCb3VuZHNbdDBdCi0gICAgam1wIC5vcEdldEJ5VmFsU2xvdwotCiAub3BHZXRCeVZhbE5v
dEluZGV4ZWRTdG9yYWdlOgogICAgICMgRmlyc3QgbGV0cyBjaGVjayBpZiB3ZSBldmVuIGhhdmUg
YSB0eXBlZCBhcnJheS4gVGhpcyBsZXRzIHVzIGRvIHNvbWUgYm9pbGVycGxhdGUgdXAgZnJvbnQu
CiAgICAgbG9hZGIgSlNDZWxsOjptX3R5cGVbdDBdLCB0MgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDIyODYwNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw4ICsyNywxMCBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1ZGUgIkRpcmVjdEFyZ3Vt
ZW50cy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJGdW5jdGlv
bkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNs
b3dQYXRoUmV0dXJuVHlwZS5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCiAjaW5jbHVk
ZSAiVk1JbmxpbmVzLmgiCkBAIC0yMDIsNiArMjA0LDI3IEBAIGlubGluZSB2b2lkIHRyeUNhY2hl
R2V0RnJvbVNjb3BlR2xvYmFsKAogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgY2FuQWNjZXNzQXJn
dW1lbnRJbmRleFF1aWNrbHkoSlNPYmplY3QmIG9iamVjdCwgdWludDMyX3QgaW5kZXgpCit7Cisg
ICAgc3dpdGNoIChvYmplY3Quc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKSB7CisgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOiB7CisgICAgICAgIERpcmVjdEFyZ3VtZW50cyogZGly
ZWN0QXJndW1lbnRzID0ganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KCZvYmplY3QpOworICAgICAg
ICBpZiAoZGlyZWN0QXJndW1lbnRzLT5pc01hcHBlZEFyZ3VtZW50SW5ERkcoaW5kZXgpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFNj
b3BlZEFyZ3VtZW50c1R5cGU6IHsKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzKiBzY29wZWRBcmd1
bWVudHMgPSBqc0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4oJm9iamVjdCk7CisgICAgICAgIGlmIChz
Y29wZWRBcmd1bWVudHMtPmlzTWFwcGVkQXJndW1lbnRJbkRGRyhpbmRleCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IENvbW1vblNsb3dQYXRocwogCiBjbGFzcyBFeGVjU3RhdGU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>