<?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>33702</bug_id>
          
          <creation_ts>2010-01-14 18:22:48 -0800</creation_ts>
          <short_desc>Make naming &amp; behaviour of UString[Impl] methods more consistent.</short_desc>
          <delta_ts>2010-01-15 00:45:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Gavin Barraclough">barraclough</assigned_to>
          <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>181062</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-14 18:22:48 -0800</bug_when>
    <thetext>UString::create() creates a  copy of the UChar* passed, but UStringImpl::create() assumes that it should assume ownership of the provided buffer (with UString::createNonCopying() and UStringImpl::createCopying() providing the alternate behaviours).  Unify on create() taking a copy of the provided buffer.  For non-copying cases, use the name &apos;adopt&apos;, and make this method take a Vector&lt;UChar&gt;&amp;.  For cases where non-copying construction was being used, other than from a Vector&lt;UChar&gt;, change the code to allocate the storage along with the UStringImpl using UStringImpl::createUninitialized().  (The adopt() method also more closely matches that of WebCore::StringImpl).

Also, UString::createUninitialized() and UStringImpl::createUninitialized() have incompatible behaviours, in that the UString form sets the provided UChar* to a null or non-null value to indicate success or failure, but UStringImpl uses the returned PassRefPtr&lt;UStringImpl&gt; to indicate when allocation has failed (potentially leaving the output Char* uninitialized).  This is also incompatible with WebCore::StringImpl&apos;s behaviour, in that StringImpl::createUninitialized() will CRASH() if unable to allocate.  Some uses of createUninitialized() in JSC are unsafe, since they do not test the result for null.  UStringImpl&apos;s indication is preferable, since we may want a successful call to set the result buffer to 0 (specifically, StringImpl returns 0 for the buffer where createUninitialized() returns the empty string, which seems reasonable to catch bugs early).  UString&apos;s method cannot support UStringImpl&apos;s behaviour directly, since it returns an object rather than a pointer.
    - remove UString::createUninitialized(), replace with calls to UStringImpl::createUninitialized()
    - create a UStringImpl::tryCreateUninitialized() form UStringImpl::createUninitialized(), with current behaviour, make createUninitialized() crash on failure to allocate.
    - make cases in JSC that do not check the result call createUninitialized(), and cases that do check call tryCreateUninitialized().

Rename computedHash() to existingHash(), to bring this in line wih WebCore::StringImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181063</commentid>
    <comment_count>1</comment_count>
      <attachid>46632</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-14 18:25:52 -0800</bug_when>
    <thetext>Created attachment 46632
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181066</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-14 18:31:41 -0800</bug_when>
    <thetext>Attachment 46632 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/runtime/StringPrototype.cpp:735:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/runtime/StringPrototype.cpp:772:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/runtime/UStringImpl.h:161:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181068</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-14 18:35:32 -0800</bug_when>
    <thetext>Attachment 46632 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/187794</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181106</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-14 22:51:40 -0800</bug_when>
    <thetext>fixed in r53320</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181130</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-15 00:28:07 -0800</bug_when>
    <thetext>Looks like this broke the Windows build:
http://build.webkit.org/builders/Windows%20Debug%20%28Build%29/builds/9727/steps/compile-webkit/logs/stdio

At least the Debug build, or so http://build.webkit.org/console thinks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181136</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-15 00:30:44 -0800</bug_when>
    <thetext>I think this is the error:
WebCore_debug.lib(XMLHttpRequest.obj) : error LNK2019: unresolved external symbol &quot;public: static class JSC::UString __cdecl JSC::UString::createNonCopying(wchar_t *,int)&quot; (?createNonCopying@UString@JSC@@SA?AV12@PA_WH@Z) referenced in function &quot;public: class JSC::UString __thiscall JSC::StringBuilder::release(void)&quot; (?release@StringBuilder@JSC@@QAE?AVUString@2@XZ)

Sadly we don&apos;t have a Windows EWS bot yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181139</commentid>
    <comment_count>7</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-15 00:45:56 -0800</bug_when>
    <thetext>I&apos;m aware of this &amp; can&apos;t see what is causing it – I think it might just be something stale on the bot, I&apos;m going to email brian &amp; ask him to give it a kick in the morning.

cheers,
G.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46632</attachid>
            <date>2010-01-14 18:25:52 -0800</date>
            <delta_ts>2010-01-14 18:34:35 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.uninit.txt</filename>
            <type>text/plain</type>
            <size>36164</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUzMjI1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTAtMDEtMTQgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgbmFtaW5nICYgYmVoYXZpb3VyIG9mIFVT
dHJpbmdbSW1wbF0gbWV0aG9kcyBtb3JlIGNvbnNpc3RlbnQuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzcwMgorCisgICAgICAgIFVTdHJpbmc6OmNy
ZWF0ZSgpIGNyZWF0ZXMgYSAgY29weSBvZiB0aGUgVUNoYXIqIHBhc3NlZCwgYnV0IFVTdHJpbmdJ
bXBsOjpjcmVhdGUoKSBhc3N1bWVzCisgICAgICAgIHRoYXQgaXQgc2hvdWxkIGFzc3VtZSBvd25l
cnNoaXAgb2YgdGhlIHByb3ZpZGVkIGJ1ZmZlciAod2l0aCBVU3RyaW5nOjpjcmVhdGVOb25Db3B5
aW5nKCkKKyAgICAgICAgYW5kIFVTdHJpbmdJbXBsOjpjcmVhdGVDb3B5aW5nKCkgcHJvdmlkaW5n
IHRoZSBhbHRlcm5hdGUgYmVoYXZpb3VycykuICBVbmlmeSBvbiBjcmVhdGUoKQorICAgICAgICB0
YWtpbmcgYSBjb3B5IG9mIHRoZSBwcm92aWRlZCBidWZmZXIuICBGb3Igbm9uLWNvcHlpbmcgY2Fz
ZXMsIHVzZSB0aGUgbmFtZSAnYWRvcHQnLCBhbmQKKyAgICAgICAgbWFrZSB0aGlzIG1ldGhvZCB0
YWtlIGEgVmVjdG9yPFVDaGFyPiYuICBGb3IgY2FzZXMgd2hlcmUgbm9uLWNvcHlpbmcgY29uc3Ry
dWN0aW9uIHdhcyBiZWluZworICAgICAgICB1c2VkLCBvdGhlciB0aGFuIGZyb20gYSBWZWN0b3I8
VUNoYXI+LCBjaGFuZ2UgdGhlIGNvZGUgdG8gYWxsb2NhdGUgdGhlIHN0b3JhZ2UgYWxvbmcgd2l0
aAorICAgICAgICB0aGUgVVN0cmluZ0ltcGwgdXNpbmcgVVN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoKS4gIChUaGUgYWRvcHQoKSBtZXRob2QgYWxzbyBtb3JlCisgICAgICAgIGNsb3Nl
bHkgbWF0Y2hlcyB0aGF0IG9mIFdlYkNvcmU6OlN0cmluZ0ltcGwpLgorCisgICAgICAgIEFsc28s
IFVTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoKSBhbmQgVVN0cmluZ0ltcGw6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoKSBoYXZlIGluY29tcGF0aWJsZQorICAgICAgICBiZWhhdmlvdXJzLCBpbiB0
aGF0IHRoZSBVU3RyaW5nIGZvcm0gc2V0cyB0aGUgcHJvdmlkZWQgVUNoYXIqIHRvIGEgbnVsbCBv
ciBub24tbnVsbCB2YWx1ZSB0bworICAgICAgICBpbmRpY2F0ZSBzdWNjZXNzIG9yIGZhaWx1cmUs
IGJ1dCBVU3RyaW5nSW1wbCB1c2VzIHRoZSByZXR1cm5lZCBQYXNzUmVmUHRyPFVTdHJpbmdJbXBs
PiB0bworICAgICAgICBpbmRpY2F0ZSB3aGVuIGFsbG9jYXRpb24gaGFzIGZhaWxlZCAocG90ZW50
aWFsbHkgbGVhdmluZyB0aGUgb3V0cHV0IENoYXIqIHVuaW5pdGlhbGl6ZWQpLgorICAgICAgICBU
aGlzIGlzIGFsc28gaW5jb21wYXRpYmxlIHdpdGggV2ViQ29yZTo6U3RyaW5nSW1wbCdzIGJlaGF2
aW91ciwgaW4gdGhhdAorICAgICAgICBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKCkg
d2lsbCBDUkFTSCgpIGlmIHVuYWJsZSB0byBhbGxvY2F0ZS4gIFNvbWUgdXNlcyBvZgorICAgICAg
ICBjcmVhdGVVbmluaXRpYWxpemVkKCkgaW4gSlNDIGFyZSB1bnNhZmUsIHNpbmNlIHRoZXkgZG8g
bm90IHRlc3QgdGhlIHJlc3VsdCBmb3IgbnVsbC4KKyAgICAgICAgVVN0cmluZ0ltcGwncyBpbmRp
Y2F0aW9uIGlzIHByZWZlcmFibGUsIHNpbmNlIHdlIG1heSB3YW50IGEgc3VjY2Vzc2Z1bCBjYWxs
IHRvIHNldCB0aGUgcmVzdWx0CisgICAgICAgIGJ1ZmZlciB0byAwIChzcGVjaWZpY2FsbHksIFN0
cmluZ0ltcGwgcmV0dXJucyAwIGZvciB0aGUgYnVmZmVyIHdoZXJlIGNyZWF0ZVVuaW5pdGlhbGl6
ZWQoKQorICAgICAgICByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcsIHdoaWNoIHNlZW1zIHJlYXNv
bmFibGUgdG8gY2F0Y2ggYnVncyBlYXJseSkuICBVU3RyaW5nJ3MgbWV0aG9kCisgICAgICAgIGNh
bm5vdCBzdXBwb3J0IFVTdHJpbmdJbXBsJ3MgYmVoYXZpb3VyIGRpcmVjdGx5LCBzaW5jZSBpdCBy
ZXR1cm5zIGFuIG9iamVjdCByYXRoZXIgdGhhbiBhCisgICAgICAgIHBvaW50ZXIuCisgICAgICAg
ICAgICAtIHJlbW92ZSBVU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKCksIHJlcGxhY2Ugd2l0
aCBjYWxscyB0byBVU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCgpCisgICAgICAgICAg
ICAtIGNyZWF0ZSBhIFVTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKCkgZm9ybSBV
U3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCgpLCB3aXRoIGN1cnJlbnQgYmVoYXZpb3Vy
LCBtYWtlIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoKSBjcmFzaCBvbiBmYWlsdXJlIHRvIGFsbG9jYXRl
LgorICAgICAgICAgICAgLSBtYWtlIGNhc2VzIGluIEpTQyB0aGF0IGRvIG5vdCBjaGVjayB0aGUg
cmVzdWx0IGNhbGwgY3JlYXRlVW5pbml0aWFsaXplZCgpLCBhbmQgY2FzZXMgdGhhdCBkbyBjaGVj
ayBjYWxsIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKS4KKworICAgICAgICBSZW5hbWUgY29tcHV0
ZWRIYXNoKCkgdG8gZXhpc3RpbmdIYXNoKCksIHRvIGJyaW5nIHRoaXMgaW4gbGluZSB3aWggV2Vi
Q29yZTo6U3RyaW5nSW1wbC4KKworICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAgICAg
ICAgKE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKToK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogcnVudGltZS9BcnJheVBy
b3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OkNTdHJpbmdUcmFu
c2xhdG9yOjp0cmFuc2xhdGUpOgorICAgICAgICAoSlNDOjpVQ2hhckJ1ZmZlclRyYW5zbGF0b3I6
OnRyYW5zbGF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChK
U0M6OkpTU3RyaW5nOjpyZXNvbHZlUm9wZSk6CisgICAgICAgICogcnVudGltZS9Mb29rdXAuY3Bw
OgorICAgICAgICAoSlNDOjpIYXNoVGFibGU6OmNyZWF0ZVRhYmxlKToKKyAgICAgICAgKiBydW50
aW1lL0xvb2t1cC5oOgorICAgICAgICAoSlNDOjpIYXNoVGFibGU6OmVudHJ5KToKKyAgICAgICAg
KiBydW50aW1lL1N0cmluZ0J1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nQnVpbGRlcjo6
cmVsZWFzZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OnN0cmluZ0Zyb21DaGFyQ29kZVNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnN1YnN0aXR1dGVCYWNrcmVmZXJl
bmNlc1Nsb3cpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZSk6Cisg
ICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKToKKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jRm9udHNpemUpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNM
aW5rKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpnZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwdXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5zZXJ0SW50b1Byb3BlcnR5
TWFwSGFzaFRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5
KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmdldCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaDoK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFzaDo6aGFzaCk6CisgICAg
ICAgICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlUmVwKToKKyAg
ICAgICAgKEpTQzo6VVN0cmluZzo6VVN0cmluZyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OnNw
bGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OnJl
cGxhY2VSYW5nZSk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAg
ICogcnVudGltZS9VU3RyaW5nLmg6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OmFkb3B0KToKKyAg
ICAgICAgKEpTQzo6SWRlbnRpZmllclJlcEhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjptYWtl
U3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmdJbXBsLmg6CisgICAgICAgIChKU0M6
OlVTdHJpbmdJbXBsOjphZG9wdCk6CisgICAgICAgIChKU0M6OlVTdHJpbmdJbXBsOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAg
ICAgIChKU0M6OlVTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAg
KEpTQzo6VVN0cmluZ0ltcGw6OmV4aXN0aW5nSGFzaCk6CisKIDIwMTAtMDEtMTMgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoYnVpbGRmaXgpLgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
ZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2
aXNpb24gNTMyMjQpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNiBAQCBfX1pOM0pTQzdQcm9maWxlMTByZXN0b3JlQWxs
RXYKIF9fWk4zSlNDN1Byb2ZpbGU1Zm9jdXNFUEtOU18xMVByb2ZpbGVOb2RlRQogX19aTjNKU0M3
UHJvZmlsZTdleGNsdWRlRVBLTlNfMTFQcm9maWxlTm9kZUUKIF9fWk4zSlNDN1Byb2ZpbGU3Zm9y
RWFjaEVNTlNfMTFQcm9maWxlTm9kZUVGdnZFCi1fX1pOM0pTQzdVU3RyaW5nMTZjcmVhdGVOb25D
b3B5aW5nRVB0aQogX19aTjNKU0M3VVN0cmluZzRmcm9tRWQKIF9fWk4zSlNDN1VTdHJpbmc0ZnJv
bUVpCiBfX1pOM0pTQzdVU3RyaW5nNGZyb21FagpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2xhc3NSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVm
LmNwcAkocmV2aXNpb24gNTMyMjQpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQCBPcGFxdWVKU0NsYXNzQ29udGV4
dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDCiAgICAgICAgICAgICBBU1NFUlQoIWl0LT5maXJzdC0+aXNJ
ZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgLy8gVXNlIGEgbG9jYWwgdmFyaWFibGUgaGVyZSB0
byBzaWRlc3RlcCBhbiBSVkNUIGNvbXBpbGVyIGJ1Zy4KICAgICAgICAgICAgIFN0YXRpY1ZhbHVl
RW50cnkqIGVudHJ5ID0gbmV3IFN0YXRpY1ZhbHVlRW50cnkoaXQtPnNlY29uZC0+Z2V0UHJvcGVy
dHksIGl0LT5zZWNvbmQtPnNldFByb3BlcnR5LCBpdC0+c2Vjb25kLT5hdHRyaWJ1dGVzKTsKLSAg
ICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKFVTdHJpbmc6OlJlcDo6Y3JlYXRlQ29weWluZyhp
dC0+Zmlyc3QtPmRhdGEoKSwgaXQtPmZpcnN0LT5zaXplKCkpLCBlbnRyeSk7CisgICAgICAgICAg
ICBzdGF0aWNWYWx1ZXMtPmFkZChVU3RyaW5nOjpSZXA6OmNyZWF0ZShpdC0+Zmlyc3QtPmRhdGEo
KSwgaXQtPmZpcnN0LT5zaXplKCkpLCBlbnRyeSk7CiAKICAgICAgICAgfQogICAgICAgICAgICAg
CkBAIC0xNjcsNyArMTY3LDcgQEAgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0Ns
YXNzQwogICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3QtPmlzSWRlbnRpZmllcigpKTsKICAg
ICAgICAgICAgIC8vIFVzZSBhIGxvY2FsIHZhcmlhYmxlIGhlcmUgdG8gc2lkZXN0ZXAgYW4gUlZD
VCBjb21waWxlciBidWcuCiAgICAgICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9
IG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5KGl0LT5zZWNvbmQtPmNhbGxBc0Z1bmN0aW9uLCBpdC0+
c2Vjb25kLT5hdHRyaWJ1dGVzKTsKLSAgICAgICAgICAgIHN0YXRpY0Z1bmN0aW9ucy0+YWRkKFVT
dHJpbmc6OlJlcDo6Y3JlYXRlQ29weWluZyhpdC0+Zmlyc3QtPmRhdGEoKSwgaXQtPmZpcnN0LT5z
aXplKCkpLCBlbnRyeSk7CisgICAgICAgICAgICBzdGF0aWNGdW5jdGlvbnMtPmFkZChVU3RyaW5n
OjpSZXA6OmNyZWF0ZShpdC0+Zmlyc3QtPmRhdGEoKSwgaXQtPmZpcnN0LT5zaXplKCkpLCBlbnRy
eSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgIH0gZWxzZQpJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDUzMjI0KQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwNCw4ICsyMDQsNyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0
CiAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHJlcC0+ZGF0YSgpLCByZXAtPnNpemUoKSk7CiAg
ICAgfQogICAgIEFTU0VSVChidWZmZXIuc2l6ZSgpID09IHRvdGFsU2l6ZSk7Ci0gICAgdW5zaWdu
ZWQgZmluYWxTaXplID0gYnVmZmVyLnNpemUoKTsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
VVN0cmluZzo6Y3JlYXRlTm9uQ29weWluZyhidWZmZXIucmVsZWFzZUJ1ZmZlcigpLCBmaW5hbFNp
emUpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZzo6YWRvcHQoYnVmZmVyKSk7
CiB9CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlzaW9u
IDUzMjI0KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEyLDEzICsxMTIsMTEgQEAgc3RydWN0IENTdHJpbmdUcmFuc2xhdG9yIHsK
ICAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVVN0cmluZzo6UmVwKiYgbG9jYXRpb24sIGNvbnN0
IGNoYXIqIGMsIHVuc2lnbmVkIGhhc2gpCiAgICAgewogICAgICAgICBzaXplX3QgbGVuZ3RoID0g
c3RybGVuKGMpOwotICAgICAgICBVQ2hhciogZCA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1h
bGxvYyhzaXplb2YoVUNoYXIpICogbGVuZ3RoKSk7CisgICAgICAgIFVDaGFyKiBkOworICAgICAg
ICBVU3RyaW5nOjpSZXAqIHIgPSBVU3RyaW5nOjpSZXA6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVu
Z3RoLCBkKS5yZWxlYXNlUmVmKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGxl
bmd0aDsgaSsrKQogICAgICAgICAgICAgZFtpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KGNbaV0pOyAvLyB1c2UgdW5zaWduZWQgY2hhciB0byB6ZXJvLWV4dGVuZCBpbnN0ZWFkIG9mIHNp
Z24tZXh0ZW5kCi0gICAgICAgIAotICAgICAgICBVU3RyaW5nOjpSZXAqIHIgPSBVU3RyaW5nOjpS
ZXA6OmNyZWF0ZShkLCBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkpLnJlbGVhc2VSZWYoKTsKICAg
ICAgICAgci0+c2V0SGFzaChoYXNoKTsKLQogICAgICAgICBsb2NhdGlvbiA9IHI7CiAgICAgfQog
fTsKQEAgLTE3NywxMyArMTc1LDExIEBAIHN0cnVjdCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3Igewog
CiAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFVTdHJpbmc6OlJlcComIGxvY2F0aW9uLCBjb25z
dCBVQ2hhckJ1ZmZlciYgYnVmLCB1bnNpZ25lZCBoYXNoKQogICAgIHsKLSAgICAgICAgVUNoYXIq
IGQgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIGJ1Zi5s
ZW5ndGgpKTsKKyAgICAgICAgVUNoYXIqIGQ7CisgICAgICAgIFVTdHJpbmc6OlJlcCogciA9IFVT
dHJpbmc6OlJlcDo6Y3JlYXRlVW5pbml0aWFsaXplZChidWYubGVuZ3RoLCBkKS5yZWxlYXNlUmVm
KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gYnVmLmxlbmd0aDsgaSsrKQog
ICAgICAgICAgICAgZFtpXSA9IGJ1Zi5zW2ldOwotICAgICAgICAKLSAgICAgICAgVVN0cmluZzo6
UmVwKiByID0gVVN0cmluZzo6UmVwOjpjcmVhdGUoZCwgYnVmLmxlbmd0aCkucmVsZWFzZVJlZigp
OwogICAgICAgICByLT5zZXRIYXNoKGhhc2gpOwotICAgICAgICAKICAgICAgICAgbG9jYXRpb24g
PSByOyAKICAgICB9CiB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJl
dmlzaW9uIDUzMjI0KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk2LDggKzk2LDkgQEAgdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGUo
RXhlY1N0YXRlKiBleAogCiAgICAgLy8gQWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBob2xkIHRoZSBm
aW5hbCBzdHJpbmcsIHBvc2l0aW9uIGluaXRpYWxseSBwb2ludHMgdG8gdGhlIGVuZC4KICAgICBV
Q2hhciogYnVmZmVyOwotICAgIG1fdmFsdWUgPSBVU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVk
KG1fc3RyaW5nTGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghYnVmZmVyKSB7CisgICAgaWYgKFBh
c3NSZWZQdHI8VVN0cmluZ0ltcGw+IG5ld0ltcGwgPSBVU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChtX3N0cmluZ0xlbmd0aCwgYnVmZmVyKSkKKyAgICAgICAgbV92YWx1ZSA9IG5l
d0ltcGw7CisgICAgZWxzZSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Jv
cGVMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1fZmliZXJzW2ldLmRlcmVmKCk7CiAgICAgICAg
IG1fcm9wZUxlbmd0aCA9IDA7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCShyZXZp
c2lvbiA1MzIyNCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCB2b2lkIEhhc2hUYWJsZTo6Y3JlYXRlVGFibGUoSlNH
bG9iYWxEYXRhCiAgICAgICAgIGVudHJpZXNbaV0uc2V0S2V5KDApOwogICAgIGZvciAoaW50IGkg
PSAwOyB2YWx1ZXNbaV0ua2V5OyArK2kpIHsKICAgICAgICAgVVN0cmluZzo6UmVwKiBpZGVudGlm
aWVyID0gSWRlbnRpZmllcjo6YWRkKGdsb2JhbERhdGEsIHZhbHVlc1tpXS5rZXkpLnJlbGVhc2VS
ZWYoKTsKLSAgICAgICAgaW50IGhhc2hJbmRleCA9IGlkZW50aWZpZXItPmNvbXB1dGVkSGFzaCgp
ICYgY29tcGFjdEhhc2hTaXplTWFzazsKKyAgICAgICAgaW50IGhhc2hJbmRleCA9IGlkZW50aWZp
ZXItPmV4aXN0aW5nSGFzaCgpICYgY29tcGFjdEhhc2hTaXplTWFzazsKICAgICAgICAgSGFzaEVu
dHJ5KiBlbnRyeSA9ICZlbnRyaWVzW2hhc2hJbmRleF07CiAKICAgICAgICAgaWYgKGVudHJ5LT5r
ZXkoKSkgewpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lvbiA1MzIyNCkKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3
ICsxNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJU
KHRhYmxlKTsKIAotICAgICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9ICZ0YWJsZVtp
ZGVudGlmaWVyLnVzdHJpbmcoKS5yZXAoKS0+Y29tcHV0ZWRIYXNoKCkgJiBjb21wYWN0SGFzaFNp
emVNYXNrXTsKKyAgICAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSAmdGFibGVbaWRl
bnRpZmllci51c3RyaW5nKCkucmVwKCktPmV4aXN0aW5nSGFzaCgpICYgY29tcGFjdEhhc2hTaXpl
TWFza107CiAKICAgICAgICAgICAgIGlmICghZW50cnktPmtleSgpKQogICAgICAgICAgICAgICAg
IHJldHVybiAwOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdCdWlsZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdCdWlsZGVyLmgJKHJl
dmlzaW9uIDUzMjI0KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdCdWlsZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDggKzY5LDcgQEAgcHVibGljOgogICAgIFVTdHJpbmcgcmVs
ZWFzZSgpCiAgICAgewogICAgICAgICBidWZmZXIuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgc2l6
ZV90IGxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7Ci0gICAgICAgIHJldHVybiBVU3RyaW5nOjpjcmVh
dGVOb25Db3B5aW5nKGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCksIGxlbmd0aCk7CisgICAgICAgIHJl
dHVybiBVU3RyaW5nOjphZG9wdChidWZmZXIpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1
MzIyNCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRp
YyBORVZFUl9JTkxJTkUgSlNWYWx1ZSBzdHJpbmdGcm9tQ2hhckNvZGVTbG93Q2FzZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgVUNoYXIqIGJ1ZiA9IHN0YXRp
Y19jYXN0PFVDaGFyKj4oZmFzdE1hbGxvYyhhcmdzLnNpemUoKSAqIHNpemVvZihVQ2hhcikpKTsK
LSAgICBVQ2hhciogcCA9IGJ1ZjsKLSAgICBBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBh
cmdzLmVuZCgpOwotICAgIGZvciAoQXJnTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKnArKyA9IHN0YXRpY19jYXN0PFVDaGFy
PigoKml0KS50b1VJbnQzMihleGVjKSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJp
bmc6OmNyZWF0ZU5vbkNvcHlpbmcoYnVmLCBwIC0gYnVmKSk7CisgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYXJncy5zaXplKCk7CisgICAgVUNoYXIqIGJ1ZjsKKyAgICBQYXNzUmVmUHRyPFVTdHJpbmdJ
bXBsPiBpbXBsID0gVVN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWYp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgYnVm
W2ldID0gc3RhdGljX2Nhc3Q8VUNoYXI+KGFyZ3MuYXQoaSkudG9VSW50MzIoZXhlYykpOworICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCBpbXBsKTsKIH0KIAogc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpT
VmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA1MzIyNCkKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDggKzIx
MSw3IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgVVN0cmluZyBzdWJzdGl0dXRlQmEKICAgICAgICAg
c3Vic3RpdHV0ZWRSZXBsYWNlbWVudC5hcHBlbmQocmVwbGFjZW1lbnQuZGF0YSgpICsgb2Zmc2V0
LCByZXBsYWNlbWVudC5zaXplKCkgLSBvZmZzZXQpOwogCiAgICAgc3Vic3RpdHV0ZWRSZXBsYWNl
bWVudC5zaHJpbmtUb0ZpdCgpOwotICAgIHVuc2lnbmVkIHNpemUgPSBzdWJzdGl0dXRlZFJlcGxh
Y2VtZW50LnNpemUoKTsKLSAgICByZXR1cm4gVVN0cmluZzo6Y3JlYXRlTm9uQ29weWluZyhzdWJz
dGl0dXRlZFJlcGxhY2VtZW50LnJlbGVhc2VCdWZmZXIoKSwgc2l6ZSk7CisgICAgcmV0dXJuIFVT
dHJpbmc6OmFkb3B0KHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQpOwogfQogCiBzdGF0aWMgaW5saW5l
IFVTdHJpbmcgc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKGNvbnN0IFVTdHJpbmcmIHJlcGxhY2Vt
ZW50LCBjb25zdCBVU3RyaW5nJiBzb3VyY2UsIGNvbnN0IGludCogb3ZlY3RvciwgUmVnRXhwKiBy
ZWcpCkBAIC03MjIsNyArNzIxLDcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY1RvTAogICAgICAgICBidWZmZXJbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7CiAgICAgfQogICAg
IGlmICghKG9yZWQgJiB+MHg3ZikpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3Ry
aW5nOjpjcmVhdGVOb25Db3B5aW5nKGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCksIHNTaXplKSk7Cisg
ICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nOjphZG9wdChidWZmZXIpKTsKIAog
ICAgIGJvb2wgZXJyb3I7CiAgICAgaW50IGxlbmd0aCA9IFVuaWNvZGU6OnRvTG93ZXIoYnVmZmVy
LmRhdGEoKSwgc1NpemUsIHNEYXRhLCBzU2l6ZSwgJmVycm9yKTsKQEAgLTczMiw5ICs3MzEsMTIg
QEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTAogICAgICAgICBpZiAo
ZXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gc1ZhbDsKICAgICB9Ci0gICAgaWYgKGxlbmd0aCA9
PSBzU2l6ZSAmJiBtZW1jbXAoYnVmZmVyLmRhdGEoKSwgc0RhdGEsIGxlbmd0aCAqIHNpemVvZihV
Q2hhcikpID09IDApCi0gICAgICAgIHJldHVybiBzVmFsOwotICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCBVU3RyaW5nOjpjcmVhdGVOb25Db3B5aW5nKGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCksIGxl
bmd0aCkpOworICAgIGlmIChsZW5ndGggPT0gc1NpemUpIHsKKyAgICAgICAgaWYgKG1lbWNtcChi
dWZmZXIuZGF0YSgpLCBzRGF0YSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSkgPT0gMCkKKyAgICAg
ICAgICAgIHJldHVybiBzVmFsOworICAgIH0gZWxzZQorICAgICAgICBidWZmZXIucmVzaXplKGxl
bmd0aCk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6OmFkb3B0KGJ1ZmZlcikp
OwogfQogCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2Uo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JikKQEAgLTc1Niw3ICs3NTgsNyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jVG9VCiAgICAgICAgIGJ1ZmZlcltpXSA9IHRvQVNDSUlVcHBlcihjKTsKICAgICB9CiAg
ICAgaWYgKCEob3JlZCAmIH4weDdmKSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVT
dHJpbmc6OmNyZWF0ZU5vbkNvcHlpbmcoYnVmZmVyLnJlbGVhc2VCdWZmZXIoKSwgc1NpemUpKTsK
KyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6OmFkb3B0KGJ1ZmZlcikpOwog
CiAgICAgYm9vbCBlcnJvcjsKICAgICBpbnQgbGVuZ3RoID0gVW5pY29kZTo6dG9VcHBlcihidWZm
ZXIuZGF0YSgpLCBzU2l6ZSwgc0RhdGEsIHNTaXplLCAmZXJyb3IpOwpAQCAtNzY2LDkgKzc2OCwx
MiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VCiAgICAgICAgIGlm
IChlcnJvcikKICAgICAgICAgICAgIHJldHVybiBzVmFsOwogICAgIH0KLSAgICBpZiAobGVuZ3Ro
ID09IHNTaXplICYmIG1lbWNtcChidWZmZXIuZGF0YSgpLCBzRGF0YSwgbGVuZ3RoICogc2l6ZW9m
KFVDaGFyKSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIHNWYWw7Ci0gICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIFVTdHJpbmc6OmNyZWF0ZU5vbkNvcHlpbmcoYnVmZmVyLnJlbGVhc2VCdWZmZXIoKSwg
bGVuZ3RoKSk7CisgICAgaWYgKGxlbmd0aCA9PSBzU2l6ZSkgeworICAgICAgICBpZiAobWVtY21w
KGJ1ZmZlci5kYXRhKCksIHNEYXRhLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKSA9PSAwKQorICAg
ICAgICAgICAgcmV0dXJuIHNWYWw7CisgICAgfSBlbHNlCisgICAgICAgIGJ1ZmZlci5yZXNpemUo
bGVuZ3RoKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZzo6YWRvcHQoYnVmZmVy
KSk7CiB9CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21w
YXJlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKQEAgLTg1Miw3ICs4NTcsOCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jRm9uCiAgICAgICAgIHVuc2lnbmVkIHN0cmluZ1NpemUgPSBzLnNpemUo
KTsKICAgICAgICAgdW5zaWduZWQgYnVmZmVyU2l6ZSA9IDIyICsgc3RyaW5nU2l6ZTsKICAgICAg
ICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICAgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGJ1ZmZlclNpemUg
KiBzaXplb2YoVUNoYXIpKS5nZXRWYWx1ZShidWZmZXIpKQorICAgICAgICBQYXNzUmVmUHRyPFVT
dHJpbmdJbXBsPiBpbXBsID0gVVN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVm
ZmVyU2l6ZSwgYnVmZmVyKTsKKyAgICAgICAgaWYgKCFpbXBsKQogICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGJ1ZmZlclswXSA9ICc8JzsKICAgICAgICAgYnVmZmVy
WzFdID0gJ2YnOwpAQCAtODc3LDcgKzg4Myw3IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNGb24KICAgICAgICAgYnVmZmVyWzE5ICsgc3RyaW5nU2l6ZV0gPSAnbic7CiAg
ICAgICAgIGJ1ZmZlclsyMCArIHN0cmluZ1NpemVdID0gJ3QnOwogICAgICAgICBidWZmZXJbMjEg
KyBzdHJpbmdTaXplXSA9ICc+JzsKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhl
eGVjLCBVU3RyaW5nOjpjcmVhdGVOb25Db3B5aW5nKGJ1ZmZlciwgYnVmZmVyU2l6ZSkpOworICAg
ICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGltcGwpOwogICAgIH0KIAogICAg
IHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgbWFrZVN0cmluZygiPGZvbnQgc2l6ZT1c
IiIsIGEwLnRvU3RyaW5nKGV4ZWMpLCAiXCI+IiwgcywgIjwvZm9udD4iKSk7CkBAIC05MDAsNyAr
OTA2LDggQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xpbgogICAgIHVu
c2lnbmVkIHN0cmluZ1NpemUgPSBzLnNpemUoKTsKICAgICB1bnNpZ25lZCBidWZmZXJTaXplID0g
MTUgKyBsaW5rVGV4dFNpemUgKyBzdHJpbmdTaXplOwogICAgIFVDaGFyKiBidWZmZXI7Ci0gICAg
aWYgKCF0cnlGYXN0TWFsbG9jKGJ1ZmZlclNpemUgKiBzaXplb2YoVUNoYXIpKS5nZXRWYWx1ZShi
dWZmZXIpKQorICAgIFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IGltcGwgPSBVU3RyaW5nSW1wbDo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChidWZmZXJTaXplLCBidWZmZXIpOworICAgIGlmICghaW1w
bCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYnVmZmVyWzBdID0gJzwnOwog
ICAgIGJ1ZmZlclsxXSA9ICdhJzsKQEAgLTkxOSw3ICs5MjYsNyBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jTGluCiAgICAgYnVmZmVyWzEyICsgbGlua1RleHRTaXplICsg
c3RyaW5nU2l6ZV0gPSAnLyc7CiAgICAgYnVmZmVyWzEzICsgbGlua1RleHRTaXplICsgc3RyaW5n
U2l6ZV0gPSAnYSc7CiAgICAgYnVmZmVyWzE0ICsgbGlua1RleHRTaXplICsgc3RyaW5nU2l6ZV0g
PSAnPic7Ci0gICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBVU3RyaW5nOjpjcmVh
dGVOb25Db3B5aW5nKGJ1ZmZlciwgYnVmZmVyU2l6ZSkpOworICAgIHJldHVybiBqc05vbnRyaXZp
YWxTdHJpbmcoZXhlYywgaW1wbCk7CiB9CiAKIGVudW0gewpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gNTMyMjQpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw3ICszMDMsNyBAQCB2b2lk
IFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0CiAgICAgQVNTRVJUKGlzRGljdGlv
bmFyeSgpKTsKICAgICBBU1NFUlQobV9wcm9wZXJ0eVRhYmxlKTsKIAotICAgIHVuc2lnbmVkIGkg
PSByZXAtPmNvbXB1dGVkSGFzaCgpOworICAgIHVuc2lnbmVkIGkgPSByZXAtPmV4aXN0aW5nSGFz
aCgpOwogCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogICAgICsrbnVtUHJvYmVzOwpAQCAt
MzIxLDcgKzMyMSw3IEBAIHZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3QK
ICAgICArK251bUNvbGxpc2lvbnM7CiAjZW5kaWYKIAotICAgIHVuc2lnbmVkIGsgPSAxIHwgZG91
YmxlSGFzaChyZXAtPmNvbXB1dGVkSGFzaCgpKTsKKyAgICB1bnNpZ25lZCBrID0gMSB8IGRvdWJs
ZUhhc2gocmVwLT5leGlzdGluZ0hhc2goKSk7CiAKICAgICB3aGlsZSAoMSkgewogICAgICAgICBp
ICs9IGs7CkBAIC02ODYsNyArNjg2LDcgQEAgc2l6ZV90IFN0cnVjdHVyZTo6Z2V0KGNvbnN0IFVT
dHJpbmc6OlJlcAogICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKQogICAgICAgICByZXR1cm4gbm90
Rm91bmQ7CiAKLSAgICB1bnNpZ25lZCBpID0gcmVwLT5jb21wdXRlZEhhc2goKTsKKyAgICB1bnNp
Z25lZCBpID0gcmVwLT5leGlzdGluZ0hhc2goKTsKIAogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RB
VFMKICAgICArK251bVByb2JlczsKQEAgLTcwNiw3ICs3MDYsNyBAQCBzaXplX3QgU3RydWN0dXJl
OjpnZXQoY29uc3QgVVN0cmluZzo6UmVwCiAgICAgKytudW1Db2xsaXNpb25zOwogI2VuZGlmCiAK
LSAgICB1bnNpZ25lZCBrID0gMSB8IGRvdWJsZUhhc2gocmVwLT5jb21wdXRlZEhhc2goKSk7Cisg
ICAgdW5zaWduZWQgayA9IDEgfCBkb3VibGVIYXNoKHJlcC0+ZXhpc3RpbmdIYXNoKCkpOwogCiAg
ICAgd2hpbGUgKDEpIHsKICAgICAgICAgaSArPSBrOwpAQCAtNzM3LDcgKzczNyw3IEBAIGJvb2wg
U3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvbihjb25zdCAKIAogICAgIFVTdHJpbmc6OlJlcCog
cmVwID0gcHJvcGVydHlOYW1lLl91c3RyaW5nLnJlcCgpOwogCi0gICAgdW5zaWduZWQgaSA9IHJl
cC0+Y29tcHV0ZWRIYXNoKCk7CisgICAgdW5zaWduZWQgaSA9IHJlcC0+ZXhpc3RpbmdIYXNoKCk7
CiAKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAgICAgKytudW1Qcm9iZXM7CkBAIC03NTcs
NyArNzU3LDcgQEAgYm9vbCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uKGNvbnN0IAogICAg
ICsrbnVtQ29sbGlzaW9uczsKICNlbmRpZgogCi0gICAgdW5zaWduZWQgayA9IDEgfCBkb3VibGVI
YXNoKHJlcC0+Y29tcHV0ZWRIYXNoKCkpOworICAgIHVuc2lnbmVkIGsgPSAxIHwgZG91YmxlSGFz
aChyZXAtPmV4aXN0aW5nSGFzaCgpKTsKIAogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGkgKz0g
azsKQEAgLTgwNiw3ICs4MDYsNyBAQCBzaXplX3QgU3RydWN0dXJlOjpwdXQoY29uc3QgSWRlbnRp
ZmllciYgCiAKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYSBmYXN0IGNhc2UgZm9yIHRhYmxlcyB3
aXRoIG5vIGRlbGV0ZWQgc2VudGluZWxzLgogCi0gICAgdW5zaWduZWQgaSA9IHJlcC0+Y29tcHV0
ZWRIYXNoKCk7CisgICAgdW5zaWduZWQgaSA9IHJlcC0+ZXhpc3RpbmdIYXNoKCk7CiAgICAgdW5z
aWduZWQgayA9IDA7CiAgICAgYm9vbCBmb3VuZERlbGV0ZWRFbGVtZW50ID0gZmFsc2U7CiAgICAg
dW5zaWduZWQgZGVsZXRlZEVsZW1lbnRJbmRleCA9IDA7IC8vIGluaXRpYWxpemUgdG8gbWFrZSB0
aGUgY29tcGlsZXIgaGFwcHkKQEAgLTgyOSw3ICs4MjksNyBAQCBzaXplX3QgU3RydWN0dXJlOjpw
dXQoY29uc3QgSWRlbnRpZmllciYgCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoayA9PSAwKSB7
Ci0gICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2gocmVwLT5jb21wdXRlZEhhc2goKSk7Cisg
ICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2gocmVwLT5leGlzdGluZ0hhc2goKSk7CiAjaWYg
RFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogICAgICAgICAgICAgKytudW1Db2xsaXNpb25zOwogI2Vu
ZGlmCkBAIC05MDksNyArOTA5LDcgQEAgc2l6ZV90IFN0cnVjdHVyZTo6cmVtb3ZlKGNvbnN0IElk
ZW50aWZpZQogI2VuZGlmCiAKICAgICAvLyBGaW5kIHRoZSB0aGluZyB0byByZW1vdmUuCi0gICAg
dW5zaWduZWQgaSA9IHJlcC0+Y29tcHV0ZWRIYXNoKCk7CisgICAgdW5zaWduZWQgaSA9IHJlcC0+
ZXhpc3RpbmdIYXNoKCk7CiAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgdW5zaWduZWQgZW50cnlJ
bmRleDsKICAgICBVU3RyaW5nOjpSZXAqIGtleSA9IDA7CkBAIC05MjMsNyArOTIzLDcgQEAgc2l6
ZV90IFN0cnVjdHVyZTo6cmVtb3ZlKGNvbnN0IElkZW50aWZpZQogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgaWYgKGsgPT0gMCkgewotICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNo
KHJlcC0+Y29tcHV0ZWRIYXNoKCkpOworICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKHJl
cC0+ZXhpc3RpbmdIYXNoKCkpOwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKICAgICAgICAg
ICAgICsrbnVtQ29sbGlzaW9uczsKICNlbmRpZgpAQCAtOTY3LDcgKzk2Nyw3IEBAIHZvaWQgU3Ry
dWN0dXJlOjppbnNlcnRJbnRvUHJvcGVydHlNYXBIYXMKIHsKICAgICBBU1NFUlQobV9wcm9wZXJ0
eVRhYmxlKTsKIAotICAgIHVuc2lnbmVkIGkgPSBlbnRyeS5rZXktPmNvbXB1dGVkSGFzaCgpOwor
ICAgIHVuc2lnbmVkIGkgPSBlbnRyeS5rZXktPmV4aXN0aW5nSGFzaCgpOwogICAgIHVuc2lnbmVk
IGsgPSAwOwogCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwpAQCAtOTgwLDcgKzk4MCw3IEBA
IHZvaWQgU3RydWN0dXJlOjppbnNlcnRJbnRvUHJvcGVydHlNYXBIYXMKICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIGlmIChrID09IDApIHsKLSAgICAgICAgICAgIGsgPSAxIHwgZG91Ymxl
SGFzaChlbnRyeS5rZXktPmNvbXB1dGVkSGFzaCgpKTsKKyAgICAgICAgICAgIGsgPSAxIHwgZG91
YmxlSGFzaChlbnRyeS5rZXktPmV4aXN0aW5nSGFzaCgpKTsKICNpZiBEVU1QX1BST1BFUlRZTUFQ
X1NUQVRTCiAgICAgICAgICAgICArK251bUNvbGxpc2lvbnM7CiAjZW5kaWYKQEAgLTExNzgsNyAr
MTE3OCw3IEBAIHZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KCkKICAgICAgICAgaWYg
KCFyZXApCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgKytub25FbXB0eUVudHJ5Q291
bnQ7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSByZXAtPmNvbXB1dGVkSGFzaCgpOworICAgICAgICB1
bnNpZ25lZCBpID0gcmVwLT5leGlzdGluZ0hhc2goKTsKICAgICAgICAgdW5zaWduZWQgayA9IDA7
CiAgICAgICAgIHVuc2lnbmVkIGVudHJ5SW5kZXg7CiAgICAgICAgIHdoaWxlICgxKSB7CkBAIC0x
MTg3LDcgKzExODcsNyBAQCB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCiAgICAg
ICAgICAgICBpZiAocmVwID09IG1fcHJvcGVydHlUYWJsZS0+ZW50cmllcygpW2VudHJ5SW5kZXgg
LSAxXS5rZXkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoayA9PSAw
KQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChyZXAtPmNvbXB1dGVkSGFzaCgp
KTsKKyAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2gocmVwLT5leGlzdGluZ0hhc2go
KSk7CiAgICAgICAgICAgICBpICs9IGs7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGVudHJ5
SW5kZXggPT0gYyArIDEpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZp
c2lvbiA1MzIyNCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBV
U3RyaW5nOjpSZXAqIHJlcCA9IHByb3BlcnR5TmFtZS5fdXN0cmluZy5yZXAoKTsKIAotICAgICAg
ICB1bnNpZ25lZCBpID0gcmVwLT5jb21wdXRlZEhhc2goKTsKKyAgICAgICAgdW5zaWduZWQgaSA9
IHJlcC0+ZXhpc3RpbmdIYXNoKCk7CiAKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAgICAg
ICAgICsrbnVtUHJvYmVzOwpAQCAtMjUwLDcgKzI1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICArK251bUNvbGxpc2lvbnM7CiAjZW5kaWYKIAotICAgICAgICB1bnNpZ25lZCBrID0gMSB8
IFdURjo6ZG91YmxlSGFzaChyZXAtPmNvbXB1dGVkSGFzaCgpKTsKKyAgICAgICAgdW5zaWduZWQg
ayA9IDEgfCBXVEY6OmRvdWJsZUhhc2gocmVwLT5leGlzdGluZ0hhc2goKSk7CiAKICAgICAgICAg
d2hpbGUgKDEpIHsKICAgICAgICAgICAgIGkgKz0gazsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gNTMyMjQp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0
eXBlZGVmIHN0ZDo6cGFpcjxSZWZQdHI8VVN0cmluZzo6UmVwPiwgdW5zaWduZWQ+IEtleTsKICAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2V5JiBwKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gcC5maXJzdC0+Y29tcHV0ZWRIYXNoKCk7CisgICAgICAgICAgICByZXR1
cm4gcC5maXJzdC0+ZXhpc3RpbmdIYXNoKCk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtleSYgYikKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9VU3RyaW5nLmNwcAkocmV2aXNpb24gNTMyMjQpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1VTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyArMTcwLDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjcmVhdGVSZQogCiAgICAgc2l6ZV90IGxlbmd0aCA9
IHN0cmxlbihjKTsKICAgICBVQ2hhciogZDsKLSAgICBQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBy
ZXN1bHQgPSBVU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGQpOworICAg
IFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IHJlc3VsdCA9IFVTdHJpbmdJbXBsOjp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aCwgZCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVy
biAmVVN0cmluZzo6UmVwOjpudWxsKCk7CiAKQEAgLTE4OCw3ICsxODgsNyBAQCBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjCiAgICAgICAgIHJldHVybiAmVVN0cmluZzo6
UmVwOjplbXB0eSgpOwogCiAgICAgVUNoYXIqIGQ7Ci0gICAgUGFzc1JlZlB0cjxVU3RyaW5nSW1w
bD4gcmVzdWx0ID0gVVN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkKTsK
KyAgICBQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiByZXN1bHQgPSBVU3RyaW5nSW1wbDo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGQpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBy
ZXR1cm4gJlVTdHJpbmc6OlJlcDo6bnVsbCgpOwogCkBAIC0yMTIsMTUgKzIxMiw3IEBAIFVTdHJp
bmc6OlVTdHJpbmcoY29uc3QgVUNoYXIqIGMsIGludCBsZW4KICAgICBpZiAobGVuZ3RoID09IDAp
IAogICAgICAgICBtX3JlcCA9ICZSZXA6OmVtcHR5KCk7CiAgICAgZWxzZQotICAgICAgICBtX3Jl
cCA9IFJlcDo6Y3JlYXRlQ29weWluZyhjLCBsZW5ndGgpOwotfQotCi1VU3RyaW5nIFVTdHJpbmc6
OmNyZWF0ZU5vbkNvcHlpbmcoVUNoYXIqIGMsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKGxlbmd0
aCA9PSAwKQotICAgICAgICByZXR1cm4gVVN0cmluZygmUmVwOjplbXB0eSgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIHJldHVybiBSZXA6OmNyZWF0ZShjLCBsZW5ndGgpOworICAgICAgICBtX3JlcCA9
IFJlcDo6Y3JlYXRlKGMsIGxlbmd0aCk7CiB9CiAKIFVTdHJpbmcgVVN0cmluZzo6Y3JlYXRlRnJv
bVVURjgoY29uc3QgY2hhciogc3RyaW5nKQpAQCAtMjM3LDE5ICsyMjksNiBAQCBVU3RyaW5nIFVT
dHJpbmc6OmNyZWF0ZUZyb21VVEY4KGNvbnN0IGNoCiAgICAgcmV0dXJuIFVTdHJpbmcoYnVmZmVy
LmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwogfQogCi1VU3RyaW5nIFVTdHJpbmc6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIG91dHB1dCkKLXsKLSAgICBp
ZiAoIWxlbmd0aCkgewotICAgICAgICBvdXRwdXQgPSAmc2hhcmVkRW1wdHlDaGFyOwotICAgICAg
ICByZXR1cm4gVVN0cmluZygmUmVwOjplbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoUGFzc1Jl
ZlB0cjxVU3RyaW5nSW1wbD4gcmVzdWx0ID0gVVN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQobGVuZ3RoLCBvdXRwdXQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIG91dHB1dCA9
IDA7Ci0gICAgcmV0dXJuIFVTdHJpbmcoKTsKLX0KLQogVVN0cmluZyBVU3RyaW5nOjpmcm9tKGlu
dCBpKQogewogICAgIFVDaGFyIGJ1ZlsxICsgc2l6ZW9mKGkpICogM107CkBAIC0zOTAsNyArMzY5
LDggQEAgVVN0cmluZyBVU3RyaW5nOjpzcGxpY2VTdWJzdHJpbmdzV2l0aFNlcAogICAgICAgICBy
ZXR1cm4gIiI7CiAKICAgICBVQ2hhciogYnVmZmVyOwotICAgIGlmICghVVN0cmluZ0ltcGw6OmFs
bG9jQ2hhcnModG90YWxMZW5ndGgpLmdldFZhbHVlKGJ1ZmZlcikpCisgICAgUGFzc1JlZlB0cjxS
ZXA+IHJlcCA9IFJlcDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh0b3RhbExlbmd0aCwgYnVmZmVy
KTsKKyAgICBpZiAoIXJlcCkKICAgICAgICAgcmV0dXJuIG51bGwoKTsKIAogICAgIGludCBtYXhD
b3VudCA9IG1heChyYW5nZUNvdW50LCBzZXBhcmF0b3JDb3VudCk7CkBAIC00MDYsNyArMzg2LDcg
QEAgVVN0cmluZyBVU3RyaW5nOjpzcGxpY2VTdWJzdHJpbmdzV2l0aFNlcAogICAgICAgICB9CiAg
ICAgfQogCi0gICAgcmV0dXJuIFVTdHJpbmc6OlJlcDo6Y3JlYXRlKGJ1ZmZlciwgdG90YWxMZW5n
dGgpOworICAgIHJldHVybiByZXA7CiB9CiAKIFVTdHJpbmcgVVN0cmluZzo6cmVwbGFjZVJhbmdl
KGludCByYW5nZVN0YXJ0LCBpbnQgcmFuZ2VMZW5ndGgsIGNvbnN0IFVTdHJpbmcmIHJlcGxhY2Vt
ZW50KSBjb25zdApAQCAtNDE5LDcgKzM5OSw4IEBAIFVTdHJpbmcgVVN0cmluZzo6cmVwbGFjZVJh
bmdlKGludCByYW5nZVMKICAgICAgICAgcmV0dXJuICIiOwogCiAgICAgVUNoYXIqIGJ1ZmZlcjsK
LSAgICBpZiAoIVVTdHJpbmdJbXBsOjphbGxvY0NoYXJzKHRvdGFsTGVuZ3RoKS5nZXRWYWx1ZShi
dWZmZXIpKQorICAgIFBhc3NSZWZQdHI8UmVwPiByZXAgPSBSZXA6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQodG90YWxMZW5ndGgsIGJ1ZmZlcik7CisgICAgaWYgKCFyZXApCiAgICAgICAgIHJldHVy
biBudWxsKCk7CiAKICAgICBVU3RyaW5nSW1wbDo6Y29weUNoYXJzKGJ1ZmZlciwgZGF0YSgpLCBy
YW5nZVN0YXJ0KTsKQEAgLTQyNyw3ICs0MDgsNyBAQCBVU3RyaW5nIFVTdHJpbmc6OnJlcGxhY2VS
YW5nZShpbnQgcmFuZ2VTCiAgICAgaW50IHJhbmdlRW5kID0gcmFuZ2VTdGFydCArIHJhbmdlTGVu
Z3RoOwogICAgIFVTdHJpbmdJbXBsOjpjb3B5Q2hhcnMoYnVmZmVyICsgcmFuZ2VTdGFydCArIHJl
cGxhY2VtZW50TGVuZ3RoLCBkYXRhKCkgKyByYW5nZUVuZCwgc2l6ZSgpIC0gcmFuZ2VFbmQpOwog
Ci0gICAgcmV0dXJuIFVTdHJpbmc6OlJlcDo6Y3JlYXRlKGJ1ZmZlciwgdG90YWxMZW5ndGgpOwor
ICAgIHJldHVybiByZXA7CiB9CiAKIGJvb2wgVVN0cmluZzo6Z2V0Q1N0cmluZyhDU3RyaW5nQnVm
ZmVyJiBidWZmZXIpIGNvbnN0CkBAIC00ODgsMTQgKzQ2OSwxMyBAQCBVU3RyaW5nJiBVU3RyaW5n
OjpvcGVyYXRvcj0oY29uc3QgY2hhciogCiAgICAgfQogCiAgICAgaW50IGwgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHN0cmxlbihjKSk7Ci0gICAgVUNoYXIqIGQ7Ci0gICAgaWYgKCFVU3RyaW5nSW1wbDo6
YWxsb2NDaGFycyhsKS5nZXRWYWx1ZShkKSkgeworICAgIFVDaGFyKiBkID0gMDsKKyAgICBtX3Jl
cCA9IFJlcDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsLCBkKTsKKyAgICBpZiAobV9yZXApIHsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsOyBpKyspCisgICAgICAgICAgICBkW2ldID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY1tpXSk7IC8vIHVzZSB1bnNpZ25lZCBjaGFyIHRv
IHplcm8tZXh0ZW5kIGluc3RlYWQgb2Ygc2lnbi1leHRlbmQKKyAgICB9IGVsc2UKICAgICAgICAg
bWFrZU51bGwoKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGw7IGkrKykKLSAgICAgICAgZFtpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KGNbaV0pOyAvLyB1c2UgdW5zaWduZWQgY2hhciB0byB6ZXJvLWV4dGVuZCBpbnN0ZWFkIG9m
IHNpZ24tZXh0ZW5kCi0gICAgbV9yZXAgPSBSZXA6OmNyZWF0ZShkLCBsKTsKIAogICAgIHJldHVy
biAqdGhpczsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCShyZXZpc2lvbiA1MzIy
NCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDMsOSArMTAzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0K
IAotICAgICAgICBzdGF0aWMgVVN0cmluZyBjcmVhdGVOb25Db3B5aW5nKFVDaGFyKiBjLCBpbnQg
bGVuZ3RoKTsKKyAgICAgICAgdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxVU3RyaW5nSW1wbD4gYWRvcHQoVmVjdG9yPFVDaGFyLCBpbmxp
bmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlcDo6
YWRvcHQodmVjdG9yKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBVU3RyaW5nIGNyZWF0
ZUZyb21VVEY4KGNvbnN0IGNoYXIqKTsKLSAgICAgICAgc3RhdGljIFVTdHJpbmcgY3JlYXRlVW5p
bml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgb3V0cHV0KTsKIAogICAgICAgICBz
dGF0aWMgVVN0cmluZyBmcm9tKGludCk7CiAgICAgICAgIHN0YXRpYyBVU3RyaW5nIGZyb20obG9u
ZyBsb25nKTsKQEAgLTI3Myw4ICsyNzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pblNoYXJlU2l6ZSA9IEhlYXA6Om1pbkV4dHJhQ29zdCAvIHNpemVvZihVQ2hh
cik7CiAKICAgICBzdHJ1Y3QgSWRlbnRpZmllclJlcEhhc2ggOiBQdHJIYXNoPFJlZlB0cjxKU0M6
OlVTdHJpbmc6OlJlcD4gPiB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJl
ZlB0cjxKU0M6OlVTdHJpbmc6OlJlcD4mIGtleSkgeyByZXR1cm4ga2V5LT5jb21wdXRlZEhhc2go
KTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChKU0M6OlVTdHJpbmc6OlJlcCoga2V5
KSB7IHJldHVybiBrZXktPmNvbXB1dGVkSGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IFJlZlB0cjxKU0M6OlVTdHJpbmc6OlJlcD4mIGtleSkgeyByZXR1cm4ga2V5
LT5leGlzdGluZ0hhc2goKTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChKU0M6OlVT
dHJpbmc6OlJlcCoga2V5KSB7IHJldHVybiBrZXktPmV4aXN0aW5nSGFzaCgpOyB9CiAgICAgfTsK
IAogICAgIHZvaWQgaW5pdGlhbGl6ZVVTdHJpbmcoKTsKQEAgLTM1Nyw4ICszNjEsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBVQ2hhciogYnVmZmVyOwogICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKSArIGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBV
U3RyaW5nIHJlc3VsdFN0cmluZyA9IFVTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3Ro
LCBidWZmZXIpOwotICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgUGFzc1JlZlB0cjxVU3Ry
aW5nSW1wbD4gcmVzdWx0SW1wbCA9IFVTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KGxlbmd0aCwgYnVmZmVyKTsKKyAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQogICAgICAgICAgICAg
cmV0dXJuIFVTdHJpbmcoKTsKIAogICAgICAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwpAQCAt
MzY2LDcgKzM3MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXN1bHQgKz0gYWRhcHRl
cjEubGVuZ3RoKCk7CiAgICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKIAotICAgICAg
ICByZXR1cm4gcmVzdWx0U3RyaW5nOworICAgICAgICByZXR1cm4gcmVzdWx0SW1wbDsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzPgpAQCAtMzc4LDggKzM4Miw4IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIFVDaGFyKiBidWZmZXI7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFkYXB0ZXIxLmxlbmd0aCgpICsgYWRhcHRlcjIubGVuZ3RoKCkgKyBhZGFwdGVyMy5sZW5ndGgo
KTsKLSAgICAgICAgVVN0cmluZyByZXN1bHRTdHJpbmcgPSBVU3RyaW5nOjpjcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgIFBh
c3NSZWZQdHI8VVN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBVU3RyaW5nSW1wbDo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgICAgIGlmICghcmVzdWx0SW1wbCkK
ICAgICAgICAgICAgIHJldHVybiBVU3RyaW5nKCk7CiAKICAgICAgICAgVUNoYXIqIHJlc3VsdCA9
IGJ1ZmZlcjsKQEAgLTM4OSw3ICszOTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwogICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3Vs
dCk7CiAKLSAgICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dEltcGw7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVu
YW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlw
ZTQ+CkBAIC00MDIsOCArNDA2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgVUNoYXIq
IGJ1ZmZlcjsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCkgKyBh
ZGFwdGVyMi5sZW5ndGgoKSArIGFkYXB0ZXIzLmxlbmd0aCgpICsgYWRhcHRlcjQubGVuZ3RoKCk7
Ci0gICAgICAgIFVTdHJpbmcgcmVzdWx0U3RyaW5nID0gVVN0cmluZzo6Y3JlYXRlVW5pbml0aWFs
aXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICBQYXNz
UmVmUHRyPFVTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gVVN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOworICAgICAgICBpZiAoIXJlc3VsdEltcGwpCiAg
ICAgICAgICAgICByZXR1cm4gVVN0cmluZygpOwogCiAgICAgICAgIFVDaGFyKiByZXN1bHQgPSBi
dWZmZXI7CkBAIC00MTUsNyArNDE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJlc3Vs
dCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKICAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQp
OwogCi0gICAgICAgIHJldHVybiByZXN1bHRTdHJpbmc7CisgICAgICAgIHJldHVybiByZXN1bHRJ
bXBsOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0
LCB0eXBlbmFtZSBTdHJpbmdUeXBlNT4KQEAgLTQyOSw4ICs0MzMsOCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBVQ2hhciogYnVmZmVyOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBh
ZGFwdGVyMS5sZW5ndGgoKSArIGFkYXB0ZXIyLmxlbmd0aCgpICsgYWRhcHRlcjMubGVuZ3RoKCkg
KyBhZGFwdGVyNC5sZW5ndGgoKSArIGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgICAgICBVU3RyaW5n
IHJlc3VsdFN0cmluZyA9IFVTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZm
ZXIpOwotICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgUGFzc1JlZlB0cjxVU3RyaW5nSW1w
bD4gcmVzdWx0SW1wbCA9IFVTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0
aCwgYnVmZmVyKTsKKyAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQogICAgICAgICAgICAgcmV0dXJu
IFVTdHJpbmcoKTsKIAogICAgICAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwpAQCAtNDQ0LDcg
KzQ0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVu
Z3RoKCk7CiAgICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKIAotICAgICAgICByZXR1
cm4gcmVzdWx0U3RyaW5nOworICAgICAgICByZXR1cm4gcmVzdWx0SW1wbDsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5
cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5n
VHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2PgpAQCAtNDU5LDggKzQ2Myw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIFVDaGFyKiBidWZmZXI7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGFkYXB0ZXIxLmxlbmd0aCgpICsgYWRhcHRlcjIubGVuZ3RoKCkgKyBhZGFwdGVyMy5sZW5n
dGgoKSArIGFkYXB0ZXI0Lmxlbmd0aCgpICsgYWRhcHRlcjUubGVuZ3RoKCkgKyBhZGFwdGVyNi5s
ZW5ndGgoKTsKLSAgICAgICAgVVN0cmluZyByZXN1bHRTdHJpbmcgPSBVU3RyaW5nOjpjcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFidWZmZXIpCisgICAg
ICAgIFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBVU3RyaW5nSW1wbDo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgICAgIGlmICghcmVzdWx0
SW1wbCkKICAgICAgICAgICAgIHJldHVybiBVU3RyaW5nKCk7CiAKICAgICAgICAgVUNoYXIqIHJl
c3VsdCA9IGJ1ZmZlcjsKQEAgLTQ3Niw3ICs0ODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwogICAgICAgICBhZGFwdGVyNi53cml0ZVRv
KHJlc3VsdCk7CiAKLSAgICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdEltcGw7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEs
IHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3Ry
aW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlw
ZW5hbWUgU3RyaW5nVHlwZTc+CkBAIC00OTIsOCArNDk2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRl
cjEubGVuZ3RoKCkgKyBhZGFwdGVyMi5sZW5ndGgoKSArIGFkYXB0ZXIzLmxlbmd0aCgpICsgYWRh
cHRlcjQubGVuZ3RoKCkgKyBhZGFwdGVyNS5sZW5ndGgoKSArIGFkYXB0ZXI2Lmxlbmd0aCgpICsg
YWRhcHRlcjcubGVuZ3RoKCk7Ci0gICAgICAgIFVTdHJpbmcgcmVzdWx0U3RyaW5nID0gVVN0cmlu
Zzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghYnVm
ZmVyKQorICAgICAgICBQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gVVN0cmlu
Z0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOworICAgICAgICBp
ZiAoIXJlc3VsdEltcGwpCiAgICAgICAgICAgICByZXR1cm4gVVN0cmluZygpOwogCiAgICAgICAg
IFVDaGFyKiByZXN1bHQgPSBidWZmZXI7CkBAIC01MTEsNyArNTE1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKICAgICAgICAgYWRhcHRl
cjcud3JpdGVUbyhyZXN1bHQpOwogCi0gICAgICAgIHJldHVybiByZXN1bHRTdHJpbmc7CisgICAg
ICAgIHJldHVybiByZXN1bHRJbXBsOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0
cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5
cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5n
VHlwZTYsIHR5cGVuYW1lIFN0cmluZ1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOD4KQEAgLTUy
OCw4ICs1MzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBVQ2hhciogYnVmZmVyOwog
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKSArIGFkYXB0ZXIyLmxl
bmd0aCgpICsgYWRhcHRlcjMubGVuZ3RoKCkgKyBhZGFwdGVyNC5sZW5ndGgoKSArIGFkYXB0ZXI1
Lmxlbmd0aCgpICsgYWRhcHRlcjYubGVuZ3RoKCkgKyBhZGFwdGVyNy5sZW5ndGgoKSArIGFkYXB0
ZXI4Lmxlbmd0aCgpOwotICAgICAgICBVU3RyaW5nIHJlc3VsdFN0cmluZyA9IFVTdHJpbmc6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBpZiAoIWJ1ZmZlcikK
KyAgICAgICAgUGFzc1JlZlB0cjxVU3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFVTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKKyAgICAgICAgaWYgKCFy
ZXN1bHRJbXBsKQogICAgICAgICAgICAgcmV0dXJuIFVTdHJpbmcoKTsKIAogICAgICAgICBVQ2hh
ciogcmVzdWx0ID0gYnVmZmVyOwpAQCAtNTQ5LDcgKzU1Myw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjcubGVuZ3RoKCk7CiAgICAgICAgIGFkYXB0ZXI4Lndy
aXRlVG8ocmVzdWx0KTsKIAotICAgICAgICByZXR1cm4gcmVzdWx0U3RyaW5nOworICAgICAgICBy
ZXR1cm4gcmVzdWx0SW1wbDsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVVN0cmluZ0ltcGwuaAkocmV2aXNpb24gNTMyMjQpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1VTdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlIDx3dGYvT3duRmFzdE1hbGxvY1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9Q
b3NzaWJseU51bGwuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nSGFzaEZ1bmN0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtODMsMTIgKzg0LDE1IEBAIHByaXZhdGU6CiAKIGNsYXNzIFVT
dHJpbmdJbXBsIDogTm9uY29weWFibGUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFVTdHJpbmdJbXBsPiBjcmVhdGUoVUNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKKyAgICB0ZW1w
bGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VVN0cmlu
Z0ltcGw+IGFkb3B0KFZlY3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVTdHJpbmdJbXBsKGJ1ZmZlciwgbGVuZ3Ro
LCBCdWZmZXJPd25lZCkpOworICAgICAgICBpZiAodW5zaWduZWQgbGVuZ3RoID0gdmVjdG9yLnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVVN0cmluZ0ltcGwodmVjdG9y
LnJlbGVhc2VCdWZmZXIoKSwgbGVuZ3RoLCBCdWZmZXJPd25lZCkpOworICAgICAgICByZXR1cm4g
JmVtcHR5KCk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IGNy
ZWF0ZUNvcHlpbmcoY29uc3QgVUNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxVU3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IFVDaGFyKiBidWZmZXIsIGludCBs
ZW5ndGgpCiAgICAgewogICAgICAgICBVQ2hhciogbmV3QnVmZmVyOwogICAgICAgICBpZiAoIVVT
dHJpbmdJbXBsOjphbGxvY0NoYXJzKGxlbmd0aCkuZ2V0VmFsdWUobmV3QnVmZmVyKSkKQEAgLTEx
MSwxNCArMTE1LDMwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVTdHJpbmdJ
bXBsPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqJiBvdXRwdXQp
CiAgICAgewotICAgICAgICBBU1NFUlQobGVuZ3RoKTsKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsK
KyAgICAgICAgICAgIG91dHB1dCA9IDA7CisgICAgICAgICAgICByZXR1cm4gJmVtcHR5KCk7Cisg
ICAgICAgIH0KKwogICAgICAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHNp
emVfdD46Om1heCgpIC0gc2l6ZW9mKFVTdHJpbmdJbXBsKSkgLyBzaXplb2YoVUNoYXIpKSkKLSAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgVVN0cmlu
Z0ltcGwqIHJlc3VsdEltcGwgPSBzdGF0aWNfY2FzdDxVU3RyaW5nSW1wbCo+KGZhc3RNYWxsb2Mo
c2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCArIHNpemVvZihVU3RyaW5nSW1wbCkpKTsKKyAgICAgICAg
b3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHJlc3VsdEltcGwgKyAxKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyhyZXN1bHRJbXBsKSBVU3RyaW5nSW1wbChvdXRwdXQsIGxl
bmd0aCwgQnVmZmVySW50ZXJuYWwpKTsKKyAgICB9CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxV
U3RyaW5nSW1wbD4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFVDaGFy
KiYgb3V0cHV0KQorICAgIHsKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsKKyAgICAgICAgICAgIG91
dHB1dCA9IDA7CisgICAgICAgICAgICByZXR1cm4gJmVtcHR5KCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0g
c2l6ZW9mKFVTdHJpbmdJbXBsKSkgLyBzaXplb2YoVUNoYXIpKSkKKyAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICBVU3RyaW5nSW1wbCogcmVzdWx0SW1wbDsKICAgICAgICAgaWYgKCF0cnlG
YXN0TWFsbG9jKHNpemVvZihVQ2hhcikgKiBsZW5ndGggKyBzaXplb2YoVVN0cmluZ0ltcGwpKS5n
ZXRWYWx1ZShyZXN1bHRJbXBsKSkKICAgICAgICAgICAgIHJldHVybiAwOwotCiAgICAgICAgIG91
dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihyZXN1bHRJbXBsICsgMSk7CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcocmVzdWx0SW1wbCkgVVN0cmluZ0ltcGwob3V0cHV0LCBsZW5n
dGgsIEJ1ZmZlckludGVybmFsKSk7CiAgICAgfQpAQCAtMTM4LDcgKzE1OCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOwogICAgIH0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QgeyBpZiAoIW1faGFzaCkgbV9oYXNoID0gY29tcHV0ZUhhc2goZGF0YSgpLCBtX2xlbmd0aCk7
IHJldHVybiBtX2hhc2g7IH0KLSAgICB1bnNpZ25lZCBjb21wdXRlZEhhc2goKSBjb25zdCB7IEFT
U0VSVChtX2hhc2gpOyByZXR1cm4gbV9oYXNoOyB9IC8vIGZhc3QgcGF0aCBmb3IgSWRlbnRpZmll
cnMKKyAgICB1bnNpZ25lZCBleGlzdGluZ0hhc2goKSBjb25zdCB7IEFTU0VSVChtX2hhc2gpOyBy
ZXR1cm4gbV9oYXNoOyB9IC8vIGZhc3QgcGF0aCBmb3IgSWRlbnRpZmllcnMKICAgICB2b2lkIHNl
dEhhc2godW5zaWduZWQgaGFzaCkgeyBBU1NFUlQoaGFzaCA9PSBjb21wdXRlSGFzaChkYXRhKCks
IG1fbGVuZ3RoKSk7IG1faGFzaCA9IGhhc2g7IH0gLy8gZmFzdCBwYXRoIGZvciBJZGVudGlmaWVy
cwogICAgIGJvb2wgaXNJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc0lkZW50aWZpZXI7
IH0KICAgICB2b2lkIHNldElzSWRlbnRpZmllcihib29sIGlzSWRlbnRpZmllcikgeyBtX2lzSWRl
bnRpZmllciA9IGlzSWRlbnRpZmllcjsgfQo=
</data>
<flag name="review"
          id="28934"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>