<?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>81742</bug_id>
          
          <creation_ts>2012-03-20 22:19:40 -0700</creation_ts>
          <short_desc>RegExpMatchesArray should not copy the ovector</short_desc>
          <delta_ts>2012-03-24 12:09:58 -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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>583815</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-20 22:19:40 -0700</bug_when>
    <thetext>Currently, all RegExpMatchesArray object contain Vector&lt;int, 32&gt;, used to hold any sub-pattern results.  This makes allocation/construction/destruction of these objects more expensive.  Instead, just store the main match, and recreate the sub-pattern ranges only if necessary (these are often only used for grouping, and the results never accessed).  If the main match (index 0) of the RegExpMatchesArray is accessed, reify that value alone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583816</commentid>
    <comment_count>1</comment_count>
      <attachid>132972</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-20 22:21:08 -0700</bug_when>
    <thetext>Created attachment 132972
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583819</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 22:23:40 -0700</bug_when>
    <thetext>Attachment 132972 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/runtime/RegExpObject.h:29:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/runtime/RegExpObject.h:120:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584355</commentid>
    <comment_count>3</comment_count>
      <attachid>132972</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-03-21 11:00:04 -0700</bug_when>
    <thetext>Comment on attachment 132972
Fix

r+

Please fix the style issues.

What is the performance implication of this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584613</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-21 14:04:28 -0700</bug_when>
    <thetext>Fixed in r111603.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587159</commentid>
    <comment_count>5</comment_count>
      <attachid>132972</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-03-24 12:09:58 -0700</bug_when>
    <thetext>Comment on attachment 132972
Fix

Clearing review flags as comments imply this has landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132972</attachid>
            <date>2012-03-20 22:21:08 -0700</date>
            <delta_ts>2012-03-24 12:09:57 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>81742.patch</filename>
            <type>text/plain</type>
            <size>36616</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTExNDk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBA
CisyMDEyLTAzLTIwICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkgc2hvdWxkIG5vdCBjb3B5IHRoZSBvdmVjdG9y
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTc0Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRs
eSwgYWxsIFJlZ0V4cE1hdGNoZXNBcnJheSBvYmplY3QgY29udGFpbiBWZWN0b3I8aW50LCAzMj4s
IHVzZWQgdG8gaG9sZCBhbnkgc3ViLXBhdHRlcm4gcmVzdWx0cy4KKyAgICAgICAgVGhpcyBtYWtl
cyBhbGxvY2F0aW9uL2NvbnN0cnVjdGlvbi9kZXN0cnVjdGlvbiBvZiB0aGVzZSBvYmplY3RzIG1v
cmUgZXhwZW5zaXZlLiBJbnN0ZWFkLCBqdXN0IHN0b3JlIHRoZQorICAgICAgICBtYWluIG1hdGNo
LCBhbmQgcmVjcmVhdGUgdGhlIHN1Yi1wYXR0ZXJuIHJhbmdlcyBvbmx5IGlmIG5lY2Vzc2FyeSAo
dGhlc2UgYXJlIG9mdGVuIG9ubHkgdXNlZCBmb3IgZ3JvdXBpbmcsCisgICAgICAgIGFuZCB0aGUg
cmVzdWx0cyBuZXZlciBhY2Nlc3NlZCkuCisgICAgICAgIElmIHRoZSBtYWluIG1hdGNoIChpbmRl
eCAwKSBvZiB0aGUgUmVnRXhwTWF0Y2hlc0FycmF5IGlzIGFjY2Vzc2VkLCByZWlmeSB0aGF0IHZh
bHVlIGFsb25lLgorCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAg
ICAgLSBSZWdFeHBPYmplY3QgbWF0Y2ggcmVuYW1lZCBiYWNrIHRvIHRlc3QgKHRlc3QgcmV0dXJu
cyBhIGJvb2wpLgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgICAgIC0gUmVtb3ZlZCBSZWdFeHBSZXN1bHQsIFJlZ0V4cE1h
dGNoZXNBcnJheSBjb25zdHJ1Y3RvciwgZGVzdHJveSBtZXRob2QuCisgICAgICAgIChKU0M6OlJl
Z0V4cE1hdGNoZXNBcnJheTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAgICAgLSBSZW1vdmVk
IFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0ZSBwYXJhbWV0ZXIuCisgICAgICAgIChKU0M6OlJlZ0V4
cE1hdGNoZXNBcnJheTo6cmVpZnlBbGxQcm9wZXJ0aWVzKToKKyAgICAgICAgICAgIC0gKFdhcyBm
aWxsQXJyYXlJbnN0YW5jZSkgUmVpZnkgYWxsIHByb3BlcnRpZXMgb2YgdGhlIFJlZ0V4cE1hdGNo
ZXNBcnJheS4KKyAgICAgICAgICAgIElmIHRoZXJlIGFyZSBzdWItcGF0dGVybiBwcm9wZXJ0aWVz
LCB0aGUgUmVnRXhwIGlzIHJlLXJ1biB0byBnZW5lcmF0ZSB0aGVpciB2YWx1ZXMuCisgICAgICAg
IChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6cmVpZnlNYXRjaFByb3BlcnR5KToKKyAgICAgICAg
ICAgIC0gUmVpZnkganVzdCB0aGUgbWF0Y2ggKGluZGV4IDApIHByb3BlcnR5IG9mIHRoZSBSZWdF
eHBNYXRjaGVzQXJyYXkuCisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oOgor
ICAgICAgICAoUmVnRXhwQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1
Y3Rvcjo6cGVyZm9ybU1hdGNoKToKKyAgICAgICAgICAgIC0gcGVyZm9ybU1hdGNoIG5vdyByZXR1
cm5zIGEgTWF0Y2hSZXN1bHQsIHJhdGhlciB0aGFuIHVzaW5nIG91dC1wYXJhbWV0ZXJzLgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OlJlZ0V4
cE1hdGNoZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KToKKyAgICAgICAgICAgIC0gTW92ZWQg
ZnJvbSAuY3BwLCBzdG9yZXMgdGhlIGlucHV0L3JlZ0V4cC9yZXN1bHQgdG8gdXNlIHdoZW4gbGF6
aWx5IHJlaWZ5aW5nIHByb3BlcnRpZXMuCisgICAgICAgIChSZWdFeHBNYXRjaGVzQXJyYXkpOgor
ICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgICAgICAt
IE5vdyBwYXNzZWQgdGhlIGlucHV0IHN0cmluZyBtYXRjaGVkIGFnYWluc3QsIHRoZSBSZWdFeHAs
IGFuZCB0aGUgTWF0Y2hSZXN1bHQuCisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6
cmVpZnlBbGxQcm9wZXJ0aWVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRj
aGVzQXJyYXk6OnJlaWZ5TWF0Y2hQcm9wZXJ0eUlmTmVjZXNzYXJ5KToKKyAgICAgICAgICAgIC0g
SGVscGVycyB0byBjb25kaXRpb25hbGx5IHJlaWZ5IHByb3BlcnRpZXMuCisgICAgICAgIChKU0M6
OlJlZ0V4cE1hdGNoZXNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
UmVnRXhwTWF0Y2hlc0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAg
KEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAg
ICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OnB1dCk6CisgICAgICAgIChKU0M6OlJlZ0V4
cE1hdGNoZXNBcnJheTo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNB
cnJheTo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6
OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJh
eTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJh
eTo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAgICAgLSBDaGFuZ2VkIHRvIHVzZSByZWlm
eUFsbFByb3BlcnRpZXNJZk5lY2Vzc2FyeS9yZWlmeU1hdGNoUHJvcGVydHlJZk5lY2Vzc2FyeQor
ICAgICAgICAgICAgKGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXggY2FsbHMgcmVpZnlNYXRjaFBy
b3BlcnR5SWZOZWNlc3NhcnkgaWYgaW5kZXggaXMgMCkuCisgICAgICAgICogcnVudGltZS9SZWdF
eHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmV4ZWMpOgorICAgICAg
ICAoSlNDOjpSZWdFeHBPYmplY3Q6Om1hdGNoKToKKyAgICAgICAgICAgIC0gbWF0Y2ggbm93IHJl
dHVybnMgYSBNYXRjaFJlc3VsdC4KKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgor
ICAgICAgICAoSlNDOjpNYXRjaFJlc3VsdDo6TWF0Y2hSZXN1bHQpOgorICAgICAgICAgICAgLSBB
ZGRlZCB0aGUgcmVzdWx0IG9mIGEgbWF0Y2ggaXMgYSBzdGFydCAmIGVuZCB0dXBsZS4KKyAgICAg
ICAgKEpTQzo6TWF0Y2hSZXN1bHQ6OmZhaWxlZCk6CisgICAgICAgICAgICAtIEEgZmFpbHVyZSBp
cyBpbmRpY2F0ZWQgYnkgKG5vdEZvdW5kLCAwKS4KKyAgICAgICAgKEpTQzo6TWF0Y2hSZXN1bHQ6
Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAgICAgLSBFdmFsdWF0ZXMgdG8gZmFsc2UgaWYgdGhl
IG1hdGNoIGZhaWxlZC4KKyAgICAgICAgKEpTQzo6TWF0Y2hSZXN1bHQ6OmVtcHR5KToKKyAgICAg
ICAgICAgIC0gRXZhbHVhdGVzIHRvIHRydWUgaWYgdGhlIG1hdGNoIHN1Y2NlZWRlZCB3aXRoIGxl
bmd0aCAwLgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OnRlc3QpOgorICAgICAgICAgICAg
LSBOb3cgcmV0dXJucyBhIGJvb2wuCisgICAgICAgICogcnVudGltZS9SZWdFeHBQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNUZXN0KToKKyAgICAgICAgICAgIC0g
UmVnRXhwT2JqZWN0IG1hdGNoIHJlbmFtZWQgYmFjayB0byB0ZXN0ICh0ZXN0IHJldHVybnMgYSBi
b29sKS4KKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OnJlbW92ZVVzaW5nUmVnRXhwU2VhcmNoKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZVVzaW5n
UmVnRXhwU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTWF0Y2gpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTZWFyY2gpOgorICAgICAgICAgICAgLSBwZXJmb3Jt
TWF0Y2ggbm93IHJldHVybnMgYSBNYXRjaFJlc3VsdCwgcmF0aGVyIHRoYW4gdXNpbmcgb3V0LXBh
cmFtZXRlcnMuCisKIDIwMTItMDMtMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBvcF9tb2QgZmFpbHMgb24gbWFueSBpbnRlcmVzdGluZyBjb3JuZXIgY2FzZXMK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTExMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIyLDcgKzUyMiw3IEBAIHNpemVfdCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QKIAogICAgIEFTU0VSVChhcmd1bWVudC0+aXNTdHJpbmco
KSB8fCBhcmd1bWVudC0+aXNPYmplY3QoKSk7CiAgICAgSlNTdHJpbmcqIGlucHV0ID0gYXJndW1l
bnQtPmlzU3RyaW5nKCkgPyBhc1N0cmluZyhhcmd1bWVudCkgOiBhc09iamVjdChhcmd1bWVudCkt
PnRvU3RyaW5nKGV4ZWMpOwotICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdChiYXNlKS0+bWF0Y2go
ZXhlYywgaW5wdXQpOworICAgIHJldHVybiBhc1JlZ0V4cE9iamVjdChiYXNlKS0+dGVzdChleGVj
LCBpbnB1dCk7CiB9CiAgICAgICAgIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25BcnJheVBvcChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMTExMTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NywxNiArOTcsNiBAQCBjb25z
dCBDbGFzc0luZm8gUmVnRXhwTWF0Y2hlc0FycmF5OjpzX2luCiBAZW5kCiAqLwogCi1SZWdFeHBS
ZXN1bHQmIFJlZ0V4cFJlc3VsdDo6b3BlcmF0b3I9KGNvbnN0IFJlZ0V4cENvbnN0cnVjdG9yUHJp
dmF0ZSYgcmhzKQotewotICAgIHRoaXMtPmlucHV0ID0gcmhzLmlucHV0OwotICAgIHRoaXMtPm92
ZWN0b3IgPSByaHMubGFzdE92ZWN0b3IoKTsKLSAgICB0aGlzLT5sYXN0TnVtU3ViUGF0dGVybnMg
PSByaHMubGFzdE51bVN1YlBhdHRlcm5zOwotICAgIAotICAgIHJldHVybiAqdGhpczsgICAgICAg
ICAgICAKLX0KLQotCiBSZWdFeHBDb25zdHJ1Y3Rvcjo6UmVnRXhwQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBJbnRl
cm5hbEZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogewpAQCAtMTI5LDQ1ICsxMTks
NDcgQEAgdm9pZCBSZWdFeHBDb25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0NlbGwqIAogICAgIGpzQ2Fz
dDxSZWdFeHBDb25zdHJ1Y3Rvcio+KGNlbGwpLT5SZWdFeHBDb25zdHJ1Y3Rvcjo6flJlZ0V4cENv
bnN0cnVjdG9yKCk7CiB9CiAKLVJlZ0V4cE1hdGNoZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5
KEV4ZWNTdGF0ZSogZXhlYykKLSAgICA6IEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpKQot
ICAgICwgbV9kaWRGaWxsQXJyYXlJbnN0YW5jZShmYWxzZSkKLXsKLX0KLQotdm9pZCBSZWdFeHBN
YXRjaGVzQXJyYXk6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29u
c3QgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlJiBkYXRhKQotewotICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEsIGRhdGEubGFzdE51bVN1YlBhdHRlcm5zICsgMSk7Ci0gICAgbV9y
ZWdFeHBSZXN1bHQgPSBkYXRhOwotfQotCi12b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCit2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6ZmluaXNoQ3JlYXRpb24o
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIGpzQ2FzdDxSZWdFeHBNYXRjaGVzQXJy
YXkqPihjZWxsKS0+UmVnRXhwTWF0Y2hlc0FycmF5Ojp+UmVnRXhwTWF0Y2hlc0FycmF5KCk7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgbV9yZWdFeHAtPm51bVN1YnBhdHRl
cm5zKCkgKyAxKTsKIH0KIAotdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OmZpbGxBcnJheUluc3Rh
bmNlKEV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5OjpyZWlmeUFsbFBy
b3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHVuc2lnbmVkIGxhc3ROdW1TdWJwYXR0
ZXJucyA9IG1fcmVnRXhwUmVzdWx0Lmxhc3ROdW1TdWJQYXR0ZXJuczsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPD0gbGFzdE51bVN1YnBhdHRlcm5zOyArK2kpIHsKLSAgICAgICAgaW50
IHN0YXJ0ID0gbV9yZWdFeHBSZXN1bHQub3ZlY3RvclsyICogaV07Ci0gICAgICAgIGlmIChzdGFy
dCA+PSAwKQotICAgICAgICAgICAgcHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNTdWJzdHJpbmco
ZXhlYywgbV9yZWdFeHBSZXN1bHQuaW5wdXQsIHN0YXJ0LCBtX3JlZ0V4cFJlc3VsdC5vdmVjdG9y
WzIgKiBpICsgMV0gLSBzdGFydCksIGZhbHNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNVbmRlZmluZWQoKSwgZmFsc2UpOworICAgIEFTU0VS
VChtX3N0YXRlICE9IFJlaWZpZWRBbGwpOworICAgIEFTU0VSVChtX3Jlc3VsdCk7CisgCisgICAg
cmVpZnlNYXRjaFByb3BlcnR5SWZOZWNlc3NhcnkoZXhlYyk7CisKKyAgICBpZiAodW5zaWduZWQg
bnVtU3VicGF0dGVybnMgPSBtX3JlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgeworICAgICAgICBW
ZWN0b3I8aW50LCAzMj4gc3ViUGF0dGVyblJlc3VsdHM7CisgICAgICAgIGludCBwb3NpdGlvbiA9
IG1fcmVnRXhwLT5tYXRjaChleGVjLT5nbG9iYWxEYXRhKCksIG1faW5wdXQtPnZhbHVlKGV4ZWMp
LCBtX3Jlc3VsdC5zdGFydCwgJnN1YlBhdHRlcm5SZXN1bHRzKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChwb3NpdGlvbiwgcG9zaXRpb24gPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHBvc2l0
aW9uKSA9PSBtX3Jlc3VsdC5zdGFydCk7CisgICAgICAgIEFTU0VSVChtX3Jlc3VsdC5zdGFydCA9
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN1YlBhdHRlcm5SZXN1bHRzWzBdKSk7CisgICAgICAgIEFT
U0VSVChtX3Jlc3VsdC5lbmQgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdWJQYXR0ZXJuUmVzdWx0
c1sxXSkpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0dGVy
bnM7ICsraSkgeworICAgICAgICAgICAgaW50IHN0YXJ0ID0gc3ViUGF0dGVyblJlc3VsdHNbMiAq
IGldOworICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApCisgICAgICAgICAgICAgICAgcHV0RGly
ZWN0SW5kZXgoZXhlYywgaSwganNTdWJzdHJpbmcoZXhlYywgbV9pbnB1dC5nZXQoKSwgc3RhcnQs
IHN1YlBhdHRlcm5SZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCksIGZhbHNlKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwdXREaXJlY3RJbmRleChleGVjLCBpLCBqc1VuZGVm
aW5lZCgpLCBmYWxzZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdDsKLSAgICBKU0FycmF5OjpwdXQodGhpcywgZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmluZGV4LCBqc051bWJlcihtX3JlZ0V4cFJlc3VsdC5vdmVjdG9yWzBdKSwgc2xvdCk7Ci0gICAg
SlNBcnJheTo6cHV0KHRoaXMsIGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pbnB1dCwganNT
dHJpbmcoZXhlYywgbV9yZWdFeHBSZXN1bHQuaW5wdXQpLCBzbG90KTsKKyAgICBKU0FycmF5Ojpw
dXQodGhpcywgZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmluZGV4LCBqc051bWJlcihtX3Jl
c3VsdC5zdGFydCksIHNsb3QpOworICAgIEpTQXJyYXk6OnB1dCh0aGlzLCBleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuaW5wdXQsIG1faW5wdXQuZ2V0KCksIHNsb3QpOwogCi0gICAgbV9kaWRG
aWxsQXJyYXlJbnN0YW5jZSA9IHRydWU7CisgICAgbV9zdGF0ZSA9IFJlaWZpZWRBbGw7CiB9CiAK
LUpTT2JqZWN0KiBSZWdFeHBDb25zdHJ1Y3Rvcjo6YXJyYXlPZk1hdGNoZXMoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAordm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OnJlaWZ5TWF0Y2hQcm9wZXJ0eShF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRl
KGV4ZWMsIGQpOworICAgIEFTU0VSVChtX3N0YXRlID09IFJlaWZpZWROb25lKTsKKyAgICBBU1NF
UlQobV9yZXN1bHQpOworICAgIHB1dERpcmVjdEluZGV4KGV4ZWMsIDAsIGpzU3Vic3RyaW5nKGV4
ZWMsIG1faW5wdXQuZ2V0KCksIG1fcmVzdWx0LnN0YXJ0LCBtX3Jlc3VsdC5lbmQgLSBtX3Jlc3Vs
dC5zdGFydCksIGZhbHNlKTsKKyAgICBtX3N0YXRlID0gUmVpZmllZE1hdGNoOwogfQogCiBKU1Zh
bHVlIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRCYWNrcmVmKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaSkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTExMTI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NiArMjMsNyBAQAogCiAjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIlJl
Z0V4cC5oIgorI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC05Myw4ICs5NCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCi0gICAgICAgIHZvaWQg
cGVyZm9ybU1hdGNoKEpTR2xvYmFsRGF0YSYsIFJlZ0V4cCosIGNvbnN0IFVTdHJpbmcmLCBpbnQg
c3RhcnRPZmZzZXQsIGludCYgcG9zaXRpb24sIGludCYgbGVuZ3RoLCBpbnQqKiBvdmVjdG9yID0g
MCk7Ci0gICAgICAgIEpTT2JqZWN0KiBhcnJheU9mTWF0Y2hlcyhFeGVjU3RhdGUqKSBjb25zdDsK
KyAgICAgICAgTWF0Y2hSZXN1bHQgcGVyZm9ybU1hdGNoKEpTR2xvYmFsRGF0YSYsIFJlZ0V4cCos
IGNvbnN0IFVTdHJpbmcmLCBpbnQgc3RhcnRPZmZzZXQsIGludCoqIG92ZWN0b3IgPSAwKTsKIAog
ICAgICAgICB2b2lkIHNldElucHV0KGNvbnN0IFVTdHJpbmcmKTsKICAgICAgICAgY29uc3QgVVN0
cmluZyYgaW5wdXQoKSBjb25zdDsKQEAgLTEzNSwyMyArMTM1LDI3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgZXhwcmVzc2lvbiBtYXRjaGluZyB0aHJvdWdoIHRoZSBwZXJmb3JtTWF0Y2ggZnVu
Y3Rpb24uIFdlIHVzZSBjYWNoZWQgcmVzdWx0cyB0byBjYWxjdWxhdGUsIAogICAgICAgZS5nLiwg
UmVnRXhwLmxhc3RNYXRjaCBhbmQgUmVnRXhwLmxlZnRQYXJlbi4KICAgICAqLwotICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBSZWdFeHBDb25zdHJ1Y3Rvcjo6cGVyZm9ybU1hdGNoKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgUmVnRXhwKiByLCBjb25zdCBVU3RyaW5nJiBzLCBpbnQgc3RhcnRPZmZz
ZXQsIGludCYgcG9zaXRpb24sIGludCYgbGVuZ3RoLCBpbnQqKiBvdmVjdG9yKQorICAgIEFMV0FZ
U19JTkxJTkUgTWF0Y2hSZXN1bHQgUmVnRXhwQ29uc3RydWN0b3I6OnBlcmZvcm1NYXRjaChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFJlZ0V4cCogciwgY29uc3QgVVN0cmluZyYgcywgaW50IHN0
YXJ0T2Zmc2V0LCBpbnQqKiBvdmVjdG9yKQogICAgIHsKLSAgICAgICAgcG9zaXRpb24gPSByLT5t
YXRjaChnbG9iYWxEYXRhLCBzLCBzdGFydE9mZnNldCwgJmQudGVtcE92ZWN0b3IoKSk7CisgICAg
ICAgIGludCBwb3NpdGlvbiA9IHItPm1hdGNoKGdsb2JhbERhdGEsIHMsIHN0YXJ0T2Zmc2V0LCAm
ZC50ZW1wT3ZlY3RvcigpKTsKIAogICAgICAgICBpZiAob3ZlY3RvcikKICAgICAgICAgICAgICpv
dmVjdG9yID0gZC50ZW1wT3ZlY3RvcigpLmRhdGEoKTsKIAotICAgICAgICBpZiAocG9zaXRpb24g
IT0gLTEpIHsKLSAgICAgICAgICAgIEFTU0VSVCghZC50ZW1wT3ZlY3RvcigpLmlzRW1wdHkoKSk7
CisgICAgICAgIGlmIChwb3NpdGlvbiA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJl
c3VsdDo6ZmFpbGVkKCk7CiAKLSAgICAgICAgICAgIGxlbmd0aCA9IGQudGVtcE92ZWN0b3IoKVsx
XSAtIGQudGVtcE92ZWN0b3IoKVswXTsKKyAgICAgICAgQVNTRVJUKCFkLnRlbXBPdmVjdG9yKCku
aXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGQudGVtcE92ZWN0b3IoKVswXSA9PSBwb3NpdGlv
bik7CisgICAgICAgIEFTU0VSVChkLnRlbXBPdmVjdG9yKClbMV0gPj0gcG9zaXRpb24pOworICAg
ICAgICBzaXplX3QgZW5kID0gZC50ZW1wT3ZlY3RvcigpWzFdOworCisgICAgICAgIGQuaW5wdXQg
PSBzOworICAgICAgICBkLmxhc3RJbnB1dCA9IHM7CisgICAgICAgIGQuY2hhbmdlTGFzdE92ZWN0
b3IoKTsKKyAgICAgICAgZC5sYXN0TnVtU3ViUGF0dGVybnMgPSByLT5udW1TdWJwYXR0ZXJucygp
OwogCi0gICAgICAgICAgICBkLmlucHV0ID0gczsKLSAgICAgICAgICAgIGQubGFzdElucHV0ID0g
czsKLSAgICAgICAgICAgIGQuY2hhbmdlTGFzdE92ZWN0b3IoKTsKLSAgICAgICAgICAgIGQubGFz
dE51bVN1YlBhdHRlcm5zID0gci0+bnVtU3VicGF0dGVybnMoKTsKLSAgICAgICAgfQorICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQocG9zaXRpb24sIGVuZCk7CiAgICAgfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNo
ZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAxMTExMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
MTggKzI2LDI4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwTWF0Y2hlc0Fy
cmF5IDogcHVibGljIEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZ0V4cE1hdGNo
ZXNBcnJheShFeGVjU3RhdGUqKTsKKyAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcq
IGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQorICAgICAgICAgICAg
OiBKU0FycmF5KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3Ry
dWN0dXJlKCkpCisgICAgICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKKyAgICAgICAgICAgICwg
bV9zdGF0ZShSZWlmaWVkTm9uZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbnB1dC5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgaW5wdXQpOworICAgICAgICAgICAgbV9yZWdFeHAuc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHJlZ0V4cCk7CisgICAgICAgIH0KKworICAgICAgICBlbnVtIFJlaWZpZWRT
dGF0ZSB7IFJlaWZpZWROb25lLCBSZWlmaWVkTWF0Y2gsIFJlaWZpZWRBbGwgfTsKIAogICAgIHB1
YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU0FycmF5IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIFJl
Z0V4cE1hdGNoZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUmVnRXhwQ29u
c3RydWN0b3JQcml2YXRlJiBjdG9yUHJpdmF0ZSkKKyAgICAgICAgc3RhdGljIFJlZ0V4cE1hdGNo
ZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAq
IHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQogICAgICAgICB7Ci0gICAgICAgICAgICBSZWdF
eHBNYXRjaGVzQXJyYXkqIHJlZ0V4cCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4
cE1hdGNoZXNBcnJheT4oKmV4ZWMtPmhlYXAoKSkpIFJlZ0V4cE1hdGNoZXNBcnJheShleGVjKTsK
LSAgICAgICAgICAgIHJlZ0V4cC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBj
dG9yUHJpdmF0ZSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVnRXhwOworICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCk7CisgICAgICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVj
LT5nbG9iYWxEYXRhKCk7CisgICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIGFycmF5ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UmVnRXhwTWF0Y2hlc0FycmF5PihnbG9iYWxEYXRh
LmhlYXApKSBSZWdFeHBNYXRjaGVzQXJyYXkoZ2xvYmFsRGF0YSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBpbnB1dCwgcmVnRXhwLCByZXN1bHQpOworICAgICAgICAgICAgYXJyYXktPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAg
ICAgICB9Ci0gICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKQEAgLTQ3LDc3ICs1Nyw5NCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0
ZSYgZGF0YSk7CisgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJik7CiAK
ICAgICBwcml2YXRlOgorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVpZnlBbGxQcm9wZXJ0
aWVzSWZOZWNlc3NhcnkoRXhlY1N0YXRlKiBleGVjKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobV9zdGF0ZSAhPSBSZWlmaWVkQWxsKQorICAgICAgICAgICAgICAgIHJlaWZ5QWxsUHJvcGVy
dGllcyhleGVjKTsKKyAgICAgICAgfQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWlm
eU1hdGNoUHJvcGVydHlJZk5lY2Vzc2FyeShFeGVjU3RhdGUqIGV4ZWMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChtX3N0YXRlID09IFJlaWZpZWROb25lKQorICAgICAgICAgICAgICAgIHJl
aWZ5TWF0Y2hQcm9wZXJ0eShleGVjKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdF
eHBNYXRjaGVzQXJyYXkqPihjZWxsKTsKLSAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+bV9k
aWRGaWxsQXJyYXlJbnN0YW5jZSkKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5maWxsQXJy
YXlJbnN0YW5jZShleGVjKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5QWxsUHJvcGVy
dGllc0lmTmVjZXNzYXJ5KGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAg
ICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJh
eSogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBNYXRjaGVzQXJyYXkqPihjZWxsKTsKLSAgICAg
ICAgICAgIGlmICghdGhpc09iamVjdC0+bV9kaWRGaWxsQXJyYXlJbnN0YW5jZSkKLSAgICAgICAg
ICAgICAgICB0aGlzT2JqZWN0LT5maWxsQXJyYXlJbnN0YW5jZShleGVjKTsKKyAgICAgICAgICAg
IGlmIChwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlBbGxQ
cm9wZXJ0aWVzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgdGhpc09iamVjdC0+cmVpZnlNYXRjaFByb3BlcnR5SWZOZWNlc3NhcnkoZXhlYyk7CiAg
ICAgICAgICAgICByZXR1cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAKICAgICAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ0V4cE1hdGNo
ZXNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBNYXRjaGVzQXJyYXkqPihvYmplY3Qp
OwotICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX2RpZEZpbGxBcnJheUluc3RhbmNlKQot
ICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPmZpbGxBcnJheUluc3RhbmNlKGV4ZWMpOworICAg
ICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlBbGxQcm9wZXJ0aWVzSWZOZWNlc3NhcnkoZXhlYyk7
CiAgICAgICAgICAgICByZXR1cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiAgICAgICAgIH0KIAog
ICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2LCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhpc09i
amVjdCA9IGpzQ2FzdDxSZWdFeHBNYXRjaGVzQXJyYXkqPihjZWxsKTsKLSAgICAgICAgICAgIGlm
ICghdGhpc09iamVjdC0+bV9kaWRGaWxsQXJyYXlJbnN0YW5jZSkKLSAgICAgICAgICAgICAgICB0
aGlzT2JqZWN0LT5maWxsQXJyYXlJbnN0YW5jZShleGVjKTsKKyAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnJlaWZ5QWxsUHJvcGVydGllc0lmTmVjZXNzYXJ5KGV4ZWMpOwogICAgICAgICAgICAgSlNB
cnJheTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdiwgc2xvdCk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2LCBi
b29sIHNob3VsZFRocm93KQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJy
YXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4oY2VsbCk7Ci0gICAg
ICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1fZGlkRmlsbEFycmF5SW5zdGFuY2UpCi0gICAgICAg
ICAgICAgICAgdGhpc09iamVjdC0+ZmlsbEFycmF5SW5zdGFuY2UoZXhlYyk7CisgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5yZWlmeUFsbFByb3BlcnRpZXNJZk5lY2Vzc2FyeShleGVjKTsKICAgICAg
ICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCB2LCBzaG91bGRUaHJvdyk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJy
YXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwTWF0Y2hlc0FycmF5Kj4oY2VsbCk7Ci0gICAg
ICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1fZGlkRmlsbEFycmF5SW5zdGFuY2UpCi0gICAgICAg
ICAgICAgICAgdGhpc09iamVjdC0+ZmlsbEFycmF5SW5zdGFuY2UoZXhlYyk7CisgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5yZWlmeUFsbFByb3BlcnRpZXNJZk5lY2Vzc2FyeShleGVjKTsKICAgICAg
ICAgICAgIHJldHVybiBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJv
cGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhp
c09iamVjdCA9IGpzQ2FzdDxSZWdFeHBNYXRjaGVzQXJyYXkqPihjZWxsKTsKLSAgICAgICAgICAg
IGlmICghdGhpc09iamVjdC0+bV9kaWRGaWxsQXJyYXlJbnN0YW5jZSkKLSAgICAgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5maWxsQXJyYXlJbnN0YW5jZShleGVjKTsKKyAgICAgICAgICAgIHRoaXNP
YmplY3QtPnJlaWZ5QWxsUHJvcGVydGllc0lmTmVjZXNzYXJ5KGV4ZWMpOwogICAgICAgICAgICAg
cmV0dXJuIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZUFycmF5JiBhcnIsIEVudW1lcmF0aW9uTW9kZSBtb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVy
dGllcykKICAgICAgICAgewogICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFJlZ0V4cE1hdGNoZXNBcnJheSo+KG9iamVjdCk7Ci0gICAgICAgICAgICBp
ZiAoIXRoaXNPYmplY3QtPm1fZGlkRmlsbEFycmF5SW5zdGFuY2UpCi0gICAgICAgICAgICAgICAg
dGhpc09iamVjdC0+ZmlsbEFycmF5SW5zdGFuY2UoZXhlYyk7CisgICAgICAgICAgICB0aGlzT2Jq
ZWN0LT5yZWlmeUFsbFByb3BlcnRpZXNJZk5lY2Vzc2FyeShleGVjKTsKICAgICAgICAgICAgIEpT
QXJyYXk6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyLCBtb2RlKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgZmlsbEFycmF5SW5zdGFuY2UoRXhlY1N0YXRlKik7
CisgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBN
YXRjaGVzQXJyYXkqPihvYmplY3QpOworICAgICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlBbGxQ
cm9wZXJ0aWVzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gSlNBcnJheTo6
ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IHNob3VsZFRocm93KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcmVpZnlBbGxQcm9wZXJ0
aWVzKEV4ZWNTdGF0ZSopOworICAgICAgICB2b2lkIHJlaWZ5TWF0Y2hQcm9wZXJ0eShFeGVjU3Rh
dGUqKTsKIAotICAgICAgICBSZWdFeHBSZXN1bHQgbV9yZWdFeHBSZXN1bHQ7Ci0gICAgICAgIGJv
b2wgbV9kaWRGaWxsQXJyYXlJbnN0YW5jZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPEpTU3RyaW5n
PiBtX2lucHV0OworICAgICAgICBXcml0ZUJhcnJpZXI8UmVnRXhwPiBtX3JlZ0V4cDsKKyAgICAg
ICAgTWF0Y2hSZXN1bHQgbV9yZXN1bHQ7CisgICAgICAgIFJlaWZpZWRTdGF0ZSBtX3N0YXRlOwog
fTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBP
YmplY3QuY3BwCShyZXZpc2lvbiAxMTExMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiTGV4ZXIuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJSZWdFeHBD
b25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlJlZ0V4cE1hdGNoZXNBcnJheS5oIgogI2luY2x1ZGUg
IlJlZ0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlVTdHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiVVN0cmluZ0NvbmNhdGVuYXRlLmgiCkBAIC0yNzgsMjMgKzI3OSwyMCBAQCB2b2lkIFJlZ0V4
cE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlCiAKIEpTVmFsdWUgUmVnRXhwT2JqZWN0Ojpl
eGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKIHsKLSAgICBpZiAobWF0Y2go
ZXhlYywgc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+cmVnRXhwQ29uc3RydWN0b3IoKS0+YXJyYXlPZk1hdGNoZXMoZXhlYyk7CisgICAgaWYgKE1h
dGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoKGV4ZWMsIHN0cmluZykpCisgICAgICAgIHJldHVybiBS
ZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZShleGVjLCBzdHJpbmcsIHJlZ0V4cCgpLCByZXN1bHQp
OwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAogLy8gU2hhcmVkIGltcGxlbWVudGF0aW9uIHVz
ZWQgYnkgdGVzdCBhbmQgZXhlYy4KLWJvb2wgUmVnRXhwT2JqZWN0OjptYXRjaChFeGVjU3RhdGUq
IGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcpCitNYXRjaFJlc3VsdCBSZWdFeHBPYmplY3Q6Om1hdGNo
KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKIHsKKyAgICBSZWdFeHAqIHJlZ0V4
cCA9IHRoaXMtPnJlZ0V4cCgpOwogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1
Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsK
ICAgICBVU3RyaW5nIGlucHV0ID0gc3RyaW5nLT52YWx1ZShleGVjKTsKLSAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIGlmICghcmVnRXhwKCkt
Pmdsb2JhbCgpKSB7Ci0gICAgICAgIGludCBwb3NpdGlvbjsKLSAgICAgICAgaW50IGxlbmd0aDsK
LSAgICAgICAgcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xvYmFsRGF0YSwgbV9y
ZWdFeHAuZ2V0KCksIGlucHV0LCAwLCBwb3NpdGlvbiwgbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJu
IHBvc2l0aW9uID49IDA7Ci0gICAgfQorICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBpZiAoIXJlZ0V4cC0+Z2xvYmFsKCkpCisgICAgICAgIHJl
dHVybiByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKGdsb2JhbERhdGEsIHJlZ0V4cCwg
aW5wdXQsIDApOwogCiAgICAgSlNWYWx1ZSBqc0xhc3RJbmRleCA9IGdldExhc3RJbmRleCgpOwog
ICAgIHVuc2lnbmVkIGxhc3RJbmRleDsKQEAgLTMwMiwyNyArMzAwLDIwIEBAIGJvb2wgUmVnRXhw
T2JqZWN0OjptYXRjaChFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgbGFzdEluZGV4ID0ganNMYXN0
SW5kZXguYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGxhc3RJbmRleCA+IGlucHV0Lmxlbmd0aCgp
KSB7CiAgICAgICAgICAgICBzZXRMYXN0SW5kZXgoZXhlYywgMCk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxlZCgpOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZG91YmxlIGRvdWJsZUxhc3RJbmRleCA9IGpz
TGFzdEluZGV4LnRvSW50ZWdlcihleGVjKTsKICAgICAgICAgaWYgKGRvdWJsZUxhc3RJbmRleCA8
IDAgfHwgZG91YmxlTGFzdEluZGV4ID4gaW5wdXQubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIHNl
dExhc3RJbmRleChleGVjLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbGVkKCk7CiAgICAgICAgIH0KICAgICAgICAgbGFz
dEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRvdWJsZUxhc3RJbmRleCk7CiAgICAgfQog
Ci0gICAgaW50IHBvc2l0aW9uOwotICAgIGludCBsZW5ndGggPSAwOwotICAgIHJlZ0V4cENvbnN0
cnVjdG9yLT5wZXJmb3JtTWF0Y2goKmdsb2JhbERhdGEsIG1fcmVnRXhwLmdldCgpLCBpbnB1dCwg
bGFzdEluZGV4LCBwb3NpdGlvbiwgbGVuZ3RoKTsKLSAgICBpZiAocG9zaXRpb24gPCAwKSB7Ci0g
ICAgICAgIHNldExhc3RJbmRleChleGVjLCAwKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHNldExhc3RJbmRleChleGVjLCBwb3NpdGlvbiArIGxlbmd0aCk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBl
cmZvcm1NYXRjaChnbG9iYWxEYXRhLCByZWdFeHAsIGlucHV0LCBsYXN0SW5kZXgpOworICAgIHNl
dExhc3RJbmRleChleGVjLCByZXN1bHQuZW5kKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAxMTExMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMjgg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCisgICAgc3RydWN0IE1hdGNoUmVzdWx0IHsKKyAg
ICAgICAgQUxXQVlTX0lOTElORSBNYXRjaFJlc3VsdChzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQp
CisgICAgICAgICAgICA6IHN0YXJ0KHN0YXJ0KQorICAgICAgICAgICAgLCBlbmQoZW5kKQorICAg
ICAgICB7CisgICAgICAgIH0KKyAgICAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgTWF0Y2hSZXN1
bHQgZmFpbGVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KFdU
Rjo6bm90Rm91bmQsIDApOworICAgICAgICB9CisgICAgICAgIEFMV0FZU19JTkxJTkUgb3BlcmF0
b3IgYm9vbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGFydCAhPSBXVEY6Om5v
dEZvdW5kOworICAgICAgICB9CisgICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBlbXB0eSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGFydCA9PSBlbmQ7CisgICAgICAgIH0KKyAg
ICAgICAgc2l6ZV90IHN0YXJ0OworICAgICAgICBzaXplX3QgZW5kOworICAgIH07CisgICAgCiAg
ICAgY2xhc3MgUmVnRXhwT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHB1
YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CkBAIC02Nyw3ICs4
OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1fbGFzdEluZGV4Lmdl
dCgpOwogICAgICAgICB9CiAKLSAgICAgICAgYm9vbCBtYXRjaChFeGVjU3RhdGUqLCBKU1N0cmlu
Zyogc3RyaW5nKTsKKyAgICAgICAgYm9vbCB0ZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcq
IHN0cmluZykgeyByZXR1cm4gbWF0Y2goZXhlYywgc3RyaW5nKTsgfQogICAgICAgICBKU1ZhbHVl
IGV4ZWMoRXhlY1N0YXRlKiwgSlNTdHJpbmcqIHN0cmluZyk7CiAKICAgICAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC05NSw2ICsxMTcsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAg
cHJpdmF0ZToKKyAgICAgICAgTWF0Y2hSZXN1bHQgbWF0Y2goRXhlY1N0YXRlKiwgSlNTdHJpbmcq
IHN0cmluZyk7CisKICAgICAgICAgV3JpdGVCYXJyaWVyPFJlZ0V4cD4gbV9yZWdFeHA7CiAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2xhc3RJbmRleDsKICAgICAgICAgYm9vbCBtX2xh
c3RJbmRleElzV3JpdGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDExMTEyOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg0LDcgKzg0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90
bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlm
ICghdGhpc1ZhbHVlLmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OnNfaW5mbykpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPm1hdGNoKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnRlc3QoZXhlYywgZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDExMTEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJQcm9w
ZXJ0eU5hbWVBcnJheS5oIgogI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVn
RXhwQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJSZWdFeHBNYXRjaGVzQXJyYXkuaCIKICNpbmNs
dWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC00MDQsNyArNDA1LDcgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBqc1NwbGljZVN1YgogCiBzdGF0aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRK
U1ZhbHVlIHJlbW92ZVVzaW5nUmVnRXhwU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcq
IHN0cmluZywgY29uc3QgVVN0cmluZyYgc291cmNlLCBSZWdFeHAqIHJlZ0V4cCkKIHsKLSAgICBp
bnQgbGFzdEluZGV4ID0gMDsKKyAgICBzaXplX3QgbGFzdEluZGV4ID0gMDsKICAgICB1bnNpZ25l
ZCBzdGFydFBvc2l0aW9uID0gMDsKIAogICAgIFZlY3RvcjxTdHJpbmdSYW5nZSwgMTY+IHNvdXJj
ZVJhbmdlczsKQEAgLTQxMywyMSArNDE0LDE4IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgRW5jb2Rl
ZEpTVmFsdWUgcmVtb3YKICAgICB1bnNpZ25lZCBzb3VyY2VMZW4gPSBzb3VyY2UubGVuZ3RoKCk7
CiAKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpbnQgbWF0Y2hJbmRleDsKLSAgICAgICAg
aW50IG1hdGNoTGVuID0gMDsKLSAgICAgICAgaW50KiBvdmVjdG9yOwotICAgICAgICByZWdFeHBD
b25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCpnbG9iYWxEYXRhLCByZWdFeHAsIHNvdXJjZSwgc3Rh
cnRQb3NpdGlvbiwgbWF0Y2hJbmRleCwgbWF0Y2hMZW4sICZvdmVjdG9yKTsKLSAgICAgICAgaWYg
KG1hdGNoSW5kZXggPCAwKQorICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25z
dHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCpnbG9iYWxEYXRhLCByZWdFeHAsIHNvdXJjZSwgc3RhcnRQ
b3NpdGlvbik7CisgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgaWYgKGxhc3RJbmRleCA8IG1hdGNoSW5kZXgpCi0gICAgICAgICAgICBzb3VyY2VSYW5n
ZXMuYXBwZW5kKFN0cmluZ1JhbmdlKGxhc3RJbmRleCwgbWF0Y2hJbmRleCAtIGxhc3RJbmRleCkp
OworICAgICAgICBpZiAobGFzdEluZGV4IDwgcmVzdWx0LnN0YXJ0KQorICAgICAgICAgICAgc291
cmNlUmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5nZShsYXN0SW5kZXgsIHJlc3VsdC5zdGFydCAtIGxh
c3RJbmRleCkpOwogCi0gICAgICAgIGxhc3RJbmRleCA9IG1hdGNoSW5kZXggKyBtYXRjaExlbjsK
KyAgICAgICAgbGFzdEluZGV4ID0gcmVzdWx0LmVuZDsKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9
IGxhc3RJbmRleDsKIAogICAgICAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgZW1wdHkgbWF0Y2gKLSAg
ICAgICAgaWYgKCFtYXRjaExlbikgeworICAgICAgICBpZiAocmVzdWx0LmVtcHR5KCkpIHsKICAg
ICAgICAgICAgIHN0YXJ0UG9zaXRpb24rKzsKICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9u
ID4gc291cmNlTGVuKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDcxLDcgKzQ2OSw3IEBA
IHN0YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKIAogICAgIFJlZ0V4cENv
bnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKIAotICAgIGludCBsYXN0SW5kZXggPSAwOworICAgIHNp
emVfdCBsYXN0SW5kZXggPSAwOwogICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSAwOwogCiAg
ICAgVmVjdG9yPFN0cmluZ1JhbmdlLCAxNj4gc291cmNlUmFuZ2VzOwpAQCAtNDg4LDE2ICs0ODYs
MTMgQEAgc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgICAgICBp
ZiAoc291cmNlLmlzOEJpdCgpKSB7CiAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg
ICAgICAgICAgIGludCBtYXRjaEluZGV4OwotICAgICAgICAgICAgICAgIGludCBtYXRjaExlbiA9
IDA7CiAgICAgICAgICAgICAgICAgaW50KiBvdmVjdG9yOwotICAgICAgICAgICAgICAgIHJlZ0V4
cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKmdsb2JhbERhdGEsIHJlZ0V4cCwgc291cmNlLCBz
dGFydFBvc2l0aW9uLCBtYXRjaEluZGV4LCBtYXRjaExlbiwgJm92ZWN0b3IpOwotICAgICAgICAg
ICAgICAgIGlmIChtYXRjaEluZGV4IDwgMCkKKyAgICAgICAgICAgICAgICBNYXRjaFJlc3VsdCBy
ZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCpnbG9iYWxEYXRhLCByZWdF
eHAsIHNvdXJjZSwgc3RhcnRQb3NpdGlvbiwgJm92ZWN0b3IpOworICAgICAgICAgICAgICAgIGlm
ICghcmVzdWx0KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAg
IHNvdXJjZVJhbmdlcy5hcHBlbmQoU3RyaW5nUmFuZ2UobGFzdEluZGV4LCBtYXRjaEluZGV4IC0g
bGFzdEluZGV4KSk7CisgICAgICAgICAgICAgICAgc291cmNlUmFuZ2VzLmFwcGVuZChTdHJpbmdS
YW5nZShsYXN0SW5kZXgsIHJlc3VsdC5zdGFydCAtIGxhc3RJbmRleCkpOwogCi0gICAgICAgICAg
ICAgICAgaW50IGNvbXBsZXRlTWF0Y2hTdGFydCA9IG92ZWN0b3JbMF07CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaSA9IDA7CiAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCByZWdFeHAtPm51
bVN1YnBhdHRlcm5zKCkgKyAxOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IG1hdGNo
U3RhcnQgPSBvdmVjdG9yW2kgKiAyXTsKQEAgLTUwOSwyMCArNTA0LDIwIEBAIHN0YXRpYyBORVZF
Ul9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICAgICAgICAgICAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0QXJndW1lbnQoaSwganNTdWJzdHJpbmc4KGdsb2JhbERhdGEsIHNvdXJjZSwg
bWF0Y2hTdGFydCwgbWF0Y2hMZW4pKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KGkrKywganNOdW1iZXIoY29tcGxldGVNYXRjaFN0
YXJ0KSk7CisgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpKyssIGpzTnVt
YmVyKHJlc3VsdC5zdGFydCkpOwogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1l
bnQoaSsrLCBzdHJpbmcpOwogCiAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpz
VW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2Fs
bC5jYWxsKCk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChyZXN1bHQudG9T
dHJpbmcoY2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpLT52YWx1ZShleGVjKSk7CisgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBqc1Jlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOworICAgICAg
ICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoanNSZXN1bHQudG9TdHJpbmcoY2FjaGVkQ2Fs
bC5uZXdDYWxsRnJhbWUoZXhlYykpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICAgICAgICAgIGxhc3RJbmRleCA9IG1hdGNoSW5kZXggKyBtYXRjaExlbjsKKyAgICAgICAg
ICAgICAgICBsYXN0SW5kZXggPSByZXN1bHQuZW5kOwogICAgICAgICAgICAgICAgIHN0YXJ0UG9z
aXRpb24gPSBsYXN0SW5kZXg7CiAKICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2Ugb2Yg
ZW1wdHkgbWF0Y2gKLSAgICAgICAgICAgICAgICBpZiAoIW1hdGNoTGVuKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC5lbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9z
aXRpb24rKzsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPiBzb3VyY2VM
ZW4pCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTUzMCwxNiArNTI1LDEzIEBA
IHN0YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAg
ICAgICAgaW50IG1hdGNoSW5kZXg7Ci0gICAgICAgICAgICAgICAgaW50IG1hdGNoTGVuID0gMDsK
ICAgICAgICAgICAgICAgICBpbnQqIG92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgcmVnRXhwQ29u
c3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xvYmFsRGF0YSwgcmVnRXhwLCBzb3VyY2UsIHN0YXJ0
UG9zaXRpb24sIG1hdGNoSW5kZXgsIG1hdGNoTGVuLCAmb3ZlY3Rvcik7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1hdGNoSW5kZXggPCAwKQorICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3Vs
dCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKmdsb2JhbERhdGEsIHJlZ0V4cCwg
c291cmNlLCBzdGFydFBvc2l0aW9uLCAmb3ZlY3Rvcik7CisgICAgICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgc291
cmNlUmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5nZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZXMuYXBwZW5kKFN0cmluZ1Jhbmdl
KGxhc3RJbmRleCwgcmVzdWx0LnN0YXJ0IC0gbGFzdEluZGV4KSk7CiAKLSAgICAgICAgICAgICAg
ICBpbnQgY29tcGxldGVNYXRjaFN0YXJ0ID0gb3ZlY3RvclswXTsKICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpID0gMDsKICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IHJlZ0V4cC0+bnVtU3Vi
cGF0dGVybnMoKSArIDE7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBpbnQgbWF0Y2hTdGFy
dCA9IG92ZWN0b3JbaSAqIDJdOwpAQCAtNTUxLDIwICs1NDMsMjAgQEAgc3RhdGljIE5FVkVSX0lO
TElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudChpLCBqc1N1YnN0cmluZyhnbG9iYWxEYXRhLCBzb3VyY2UsIG1hdGNo
U3RhcnQsIG1hdGNoTGVuKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpKyssIGpzTnVtYmVyKGNvbXBsZXRlTWF0Y2hTdGFydCkp
OworICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSsrLCBqc051bWJlcihy
ZXN1bHQuc3RhcnQpKTsKICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KGkr
Kywgc3RyaW5nKTsKIAogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVm
aW5lZCgpKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2Fs
bCgpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQocmVzdWx0LnRvU3RyaW5n
KGNhY2hlZENhbGwubmV3Q2FsbEZyYW1lKGV4ZWMpKS0+dmFsdWUoZXhlYykpOworICAgICAgICAg
ICAgICAgIEpTVmFsdWUganNSZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKKyAgICAgICAgICAg
ICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGpzUmVzdWx0LnRvU3RyaW5nKGNhY2hlZENhbGwubmV3
Q2FsbEZyYW1lKGV4ZWMpKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgICAgICBsYXN0SW5kZXggPSBtYXRjaEluZGV4ICsgbWF0Y2hMZW47CisgICAgICAgICAgICAg
ICAgbGFzdEluZGV4ID0gcmVzdWx0LmVuZDsKICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9u
ID0gbGFzdEluZGV4OwogCiAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIG9mIGVtcHR5
IG1hdGNoCi0gICAgICAgICAgICAgICAgaWYgKCFtYXRjaExlbikgeworICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQuZW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9u
Kys7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9uID4gc291cmNlTGVuKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01NzQsMTcgKzU2NiwxNCBAQCBzdGF0
aWMgTkVWRVJfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICAg
ICAgZG8gewotICAgICAgICAgICAgaW50IG1hdGNoSW5kZXg7Ci0gICAgICAgICAgICBpbnQgbWF0
Y2hMZW4gPSAwOwogICAgICAgICAgICAgaW50KiBvdmVjdG9yOwotICAgICAgICAgICAgcmVnRXhw
Q29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xvYmFsRGF0YSwgcmVnRXhwLCBzb3VyY2UsIHN0
YXJ0UG9zaXRpb24sIG1hdGNoSW5kZXgsIG1hdGNoTGVuLCAmb3ZlY3Rvcik7Ci0gICAgICAgICAg
ICBpZiAobWF0Y2hJbmRleCA8IDApCisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBy
ZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCpnbG9iYWxEYXRhLCByZWdFeHAsIHNvdXJj
ZSwgc3RhcnRQb3NpdGlvbiwgJm92ZWN0b3IpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBDYWxs
VHlwZU5vbmUpIHsKLSAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZXMuYXBwZW5kKFN0cmluZ1Jh
bmdlKGxhc3RJbmRleCwgbWF0Y2hJbmRleCAtIGxhc3RJbmRleCkpOworICAgICAgICAgICAgICAg
IHNvdXJjZVJhbmdlcy5hcHBlbmQoU3RyaW5nUmFuZ2UobGFzdEluZGV4LCByZXN1bHQuc3RhcnQg
LSBsYXN0SW5kZXgpKTsKIAotICAgICAgICAgICAgICAgIGludCBjb21wbGV0ZU1hdGNoU3RhcnQg
PSBvdmVjdG9yWzBdOwogICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CiAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnRXhwLT5udW1T
dWJwYXR0ZXJucygpICsgMTsgKytpKSB7CkBAIC01OTcsNyArNTg2LDcgQEAgc3RhdGljIE5FVkVS
X0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAgICAgICAgICAgICAgICAgICAgYXJn
cy5hcHBlbmQoanNTdWJzdHJpbmcoZXhlYywgc291cmNlLCBtYXRjaFN0YXJ0LCBtYXRjaExlbikp
OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGpzTnVt
YmVyKGNvbXBsZXRlTWF0Y2hTdGFydCkpOworICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGpz
TnVtYmVyKHJlc3VsdC5zdGFydCkpOwogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHN0cmlu
Zyk7CiAKICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGNhbGwoZXhlYywgcmVw
bGFjZVZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CkBAIC02MDUsOCArNTk0LDggQEAgc3RhdGljIE5FVkVS
X0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaW50IHJlcGxMZW4gPSByZXBs
YWNlbWVudFN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBpZiAobGFzdEluZGV4IDwg
bWF0Y2hJbmRleCB8fCByZXBsTGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZVJhbmdl
cy5hcHBlbmQoU3RyaW5nUmFuZ2UobGFzdEluZGV4LCBtYXRjaEluZGV4IC0gbGFzdEluZGV4KSk7
CisgICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA8IHJlc3VsdC5zdGFydCB8fCByZXBsTGVu
KSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJhbmdlcy5hcHBlbmQoU3RyaW5nUmFuZ2Uo
bGFzdEluZGV4LCByZXN1bHQuc3RhcnQgLSBsYXN0SW5kZXgpKTsKIAogICAgICAgICAgICAgICAg
ICAgICBpZiAocmVwbExlbikKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5h
cHBlbmQoc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKHJlcGxhY2VtZW50U3RyaW5nLCBzb3VyY2Us
IG92ZWN0b3IsIHJlZ0V4cCkpOwpAQCAtNjE1LDExICs2MDQsMTEgQEAgc3RhdGljIE5FVkVSX0lO
TElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgbGFzdEluZGV4ID0gbWF0Y2hJbmRleCArIG1hdGNoTGVuOworICAg
ICAgICAgICAgbGFzdEluZGV4ID0gcmVzdWx0LmVuZDsKICAgICAgICAgICAgIHN0YXJ0UG9zaXRp
b24gPSBsYXN0SW5kZXg7CiAKICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBvZiBlbXB0eSBt
YXRjaAotICAgICAgICAgICAgaWYgKCFtYXRjaExlbikgeworICAgICAgICAgICAgaWYgKHJlc3Vs
dC5lbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbisrOwogICAgICAgICAg
ICAgICAgIGlmIChzdGFydFBvc2l0aW9uID4gc291cmNlTGVuKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTgxMCwxNyArNzk5LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2Jq
ZWN0Q29lcmNpYmxlCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAg
IFVTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAg
SlNTdHJpbmcqIHN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5n
IHMgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQo
MCk7CiAKLSAgICBSZWdFeHAqIHJlZzsKKyAgICBSZWdFeHAqIHJlZ0V4cDsKICAgICBib29sIGds
b2JhbCA9IGZhbHNlOwogICAgIGlmIChhMC5pbmhlcml0cygmUmVnRXhwT2JqZWN0OjpzX2luZm8p
KSB7CiAgICAgICAgIFJlZ0V4cE9iamVjdCogcmVnRXhwT2JqZWN0ID0gYXNSZWdFeHBPYmplY3Qo
YTApOwotICAgICAgICByZWcgPSByZWdFeHBPYmplY3QtPnJlZ0V4cCgpOwotICAgICAgICBpZiAo
KGdsb2JhbCA9IHJlZy0+Z2xvYmFsKCkpKSB7CisgICAgICAgIHJlZ0V4cCA9IHJlZ0V4cE9iamVj
dC0+cmVnRXhwKCk7CisgICAgICAgIGlmICgoZ2xvYmFsID0gcmVnRXhwLT5nbG9iYWwoKSkpIHsK
ICAgICAgICAgICAgIC8vIEVTNS4xIDE1LjUuNC4xMCBzdGVwIDguYS4KICAgICAgICAgICAgIHJl
Z0V4cE9iamVjdC0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwogICAgICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQpAQCAtODMzLDI3ICs4MjMsMjUgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICAgKiAgcmVwbGFjZWQgd2l0aCB0aGUgcmVz
dWx0IG9mIHRoZSBleHByZXNzaW9uIG5ldyBSZWdFeHAocmVnZXhwKS4KICAgICAgICAgICogIFBl
ciBFQ01BIDE1LjEwLjQuMSwgaWYgYTAgaXMgdW5kZWZpbmVkIHN1YnN0aXR1dGUgdGhlIGVtcHR5
IHN0cmluZy4KICAgICAgICAgICovCi0gICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgYTAuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYTAudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBOb0ZsYWdzKTsKLSAgICAgICAgaWYgKCFyZWctPmlzVmFs
aWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4
RXJyb3IoZXhlYywgcmVnLT5lcnJvck1lc3NhZ2UoKSkpOworICAgICAgICByZWdFeHAgPSBSZWdF
eHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGEwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5n
KCIiKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgTm9GbGFncyk7CisgICAgICAg
IGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIHJlZ0V4cC0+ZXJyb3JNZXNzYWdlKCkpKTsK
ICAgICB9CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwotICAgIGludCBwb3M7
Ci0gICAgaW50IG1hdGNoTGVuZ3RoID0gMDsKLSAgICByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9y
bU1hdGNoKCpnbG9iYWxEYXRhLCByZWcsIHMsIDAsIHBvcywgbWF0Y2hMZW5ndGgpOwotICAgIGlm
ICghZ2xvYmFsKSB7Ci0gICAgICAgIC8vIGNhc2Ugd2l0aG91dCAnZycgZmxhZyBpcyBoYW5kbGVk
IGxpa2UgUmVnRXhwLnByb3RvdHlwZS5leGVjCi0gICAgICAgIGlmIChwb3MgPCAwKQotICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVnRXhwQ29uc3RydWN0b3ItPmFycmF5T2ZNYXRjaGVzKGV4ZWMpKTsK
LSAgICB9CisgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZv
cm1NYXRjaCgqZ2xvYmFsRGF0YSwgcmVnRXhwLCBzLCAwKTsKKyAgICAvLyBjYXNlIHdpdGhvdXQg
J2cnIGZsYWcgaXMgaGFuZGxlZCBsaWtlIFJlZ0V4cC5wcm90b3R5cGUuZXhlYworICAgIGlmICgh
Z2xvYmFsKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCA/IFJlZ0V4cE1h
dGNoZXNBcnJheTo6Y3JlYXRlKGV4ZWMsIHN0cmluZywgcmVnRXhwLCByZXN1bHQpIDoganNOdWxs
KCkpOwogCiAgICAgLy8gcmV0dXJuIGFycmF5IG9mIG1hdGNoZXMKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBsaXN0OwotICAgIHdoaWxlIChwb3MgPj0gMCkgewotICAgICAgICBsaXN0LmFwcGVu
ZChqc1N1YnN0cmluZyhleGVjLCBzLCBwb3MsIG1hdGNoTGVuZ3RoKSk7Ci0gICAgICAgIHBvcyAr
PSBtYXRjaExlbmd0aCA9PSAwID8gMSA6IG1hdGNoTGVuZ3RoOwotICAgICAgICByZWdFeHBDb25z
dHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCpnbG9iYWxEYXRhLCByZWcsIHMsIHBvcywgcG9zLCBtYXRj
aExlbmd0aCk7CisgICAgd2hpbGUgKHJlc3VsdCkgeworICAgICAgICBzaXplX3QgZW5kID0gcmVz
dWx0LmVuZDsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGVuZCAtIHJlc3VsdC5zdGFydDsKKyAg
ICAgICAgbGlzdC5hcHBlbmQoanNTdWJzdHJpbmcoZXhlYywgcywgcmVzdWx0LnN0YXJ0LCBsZW5n
dGgpKTsKKyAgICAgICAgaWYgKCFsZW5ndGgpCisgICAgICAgICAgICArK2VuZDsKKyAgICAgICAg
cmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xvYmFsRGF0YSwgcmVn
RXhwLCBzLCBlbmQpOwogICAgIH0KICAgICBpZiAobGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAg
Ly8gaWYgdGhlcmUgYXJlIG5vIG1hdGNoZXMgYXQgYWxsLCBpdCdzIGltcG9ydGFudCB0byByZXR1
cm4KQEAgLTg5MCwxMCArODc4LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50
YXhFcnJvcihleGVjLCByZWctPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgfQogICAgIFJlZ0V4cENv
bnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKLSAgICBpbnQgcG9zOwotICAgIGludCBtYXRjaExlbmd0
aCA9IDA7Ci0gICAgcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xvYmFsRGF0YSwg
cmVnLCBzLCAwLCBwb3MsIG1hdGNoTGVuZ3RoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKHBvcykpOworICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVj
dG9yLT5wZXJmb3JtTWF0Y2goKmdsb2JhbERhdGEsIHJlZywgcywgMCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQgPyBqc051bWJlcihyZXN1bHQuc3RhcnQpIDoganNOdW1iZXIo
LTEpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNT
bGljZShFeGVjU3RhdGUqIGV4ZWMpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>