<?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>64573</bug_id>
          
          <creation_ts>2011-07-14 16:40:58 -0700</creation_ts>
          <short_desc>DFG JIT is inconsistent about fusing branches and speculating integer comparisons for branches</short_desc>
          <delta_ts>2011-07-15 13:14:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>437411</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-14 16:40:58 -0700</bug_when>
    <thetext>The DFG speculative JIT typically speculates that compare operands are integers, except when they are fused branches; in which case it might always perform a slow call.  The DFG speculative JIT typically fuses compare/branch sequences, except for StringEqual.  The non-speculative JIT always first tries integer comparisons, and never goes straight to a C call for a comparison, but it never fuses branches.  It would be better if both JITs had a common strategy for compare/branch fusion, and if the speculative JIT always first attempted a fast comparison before going to slow calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437429</commentid>
    <comment_count>1</comment_count>
      <attachid>100902</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-14 17:28:24 -0700</bug_when>
    <thetext>Created attachment 100902
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437436</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-14 17:52:11 -0700</bug_when>
    <thetext>Attachment 100902 did not pass style-queue:

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

Source/JavaScriptCore/dfg/DFGOperations.cpp:424:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/dfg/DFGOperations.cpp:425:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 2 in 6 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>437447</commentid>
    <comment_count>3</comment_count>
      <attachid>100908</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-14 18:14:22 -0700</bug_when>
    <thetext>Created attachment 100908
the patch (fix style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437555</commentid>
    <comment_count>4</comment_count>
      <attachid>100908</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-07-14 22:34:37 -0700</bug_when>
    <thetext>Comment on attachment 100908
the patch (fix style)

static_cast&lt;int32_t&gt;(1) seems a little odd... I guess this is just code that&apos;s moving (I guess we could also just return a JSValue / intptr_t from these helper operations, save the extra instruction).  No need for these ideas to be incorporated into this patch though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437560</commentid>
    <comment_count>5</comment_count>
      <attachid>100908</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-14 22:38:48 -0700</bug_when>
    <thetext>Comment on attachment 100908
the patch (fix style)

Rejecting attachment 100908 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-02&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
2 FAILED at 534.
1 out of 2 hunks FAILED -- saving rejects to file Source/JavaScriptCore/dfg/DFGJITCodeGenerator.h.rej
patching file Source/JavaScriptCore/dfg/DFGNonSpeculativeJIT.cpp
patching file Source/JavaScriptCore/dfg/DFGNonSpeculativeJIT.h
patching file Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
patching file Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Gavin Barraclough&apos;, u&apos;...&quot; exit_code: 1

Full output: http://queues.webkit.org/results/9093107</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437584</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-14 23:25:37 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 100908 [details])
&gt; static_cast&lt;int32_t&gt;(1) seems a little odd... I guess this is just code that&apos;s moving (I guess we could also just return a JSValue / intptr_t from these helper operations, save the extra instruction).  No need for these ideas to be incorporated into this patch though.

Yeah, that looks like a wart.  I&apos;l go ahead and fix it, since it appears that this patch failed to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437602</commentid>
    <comment_count>7</comment_count>
      <attachid>100941</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-15 00:17:27 -0700</bug_when>
    <thetext>Created attachment 100941
the patch (fix conflict, fix review)

Fixes a conflict with one of my other patches.  This patch should be able to land successfully.  Also removes the superfluous static_cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437607</commentid>
    <comment_count>8</comment_count>
      <attachid>100942</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-15 00:25:36 -0700</bug_when>
    <thetext>Created attachment 100942
the patch (fix Platform.h)

Oops - the last patch included a change to Platform.h that shouldn&apos;t have gotten into the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437937</commentid>
    <comment_count>9</comment_count>
      <attachid>100942</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-15 13:14:40 -0700</bug_when>
    <thetext>Comment on attachment 100942
the patch (fix Platform.h)

Clearing flags on attachment: 100942

Committed r91099: &lt;http://trac.webkit.org/changeset/91099&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437938</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-15 13:14:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100902</attachid>
            <date>2011-07-14 17:28:24 -0700</date>
            <delta_ts>2011-07-14 18:14:22 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>compareopt_patch_1.diff</filename>
            <type>text/plain</type>
            <size>20052</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTEtMDctMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGlzIGluY29uc2lzdGVudCBhYm91dCBmdXNpbmcgYnJhbmNoZXMgYW5kIHNwZWN1bGF0
aW5nCisgICAgICAgIGludGVnZXIgY29tcGFyaXNvbnMgZm9yIGJyYW5jaGVzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ1NzMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
bW92ZXMgc29tZSBvZiBOb25TcGVjdWxhdGl2ZUpJVCdzIGZ1bmN0aW9uYWxpdHkgdXAgaW50byB0
aGUKKyAgICAgICAgSklUQ29kZUdlbmVyYXRvciBzdXBlcmNsYXNzIHNvIHRoYXQgaXQgY2FuIGJl
IHVzZWQgZnJvbSBib3RoIEpJVHMuICBOb3csCisgICAgICAgIGluIGNhc2VzIHdoZXJlIHRoZSBz
cGVjdWxhdGl2ZSBKSVQgZG9lc24ndCB3YW50IHRvIHNwZWN1bGF0ZSBidXQgc3RpbGwKKyAgICAg
ICAgd2FudHMgdG8gZW1pdCBnb29kIGNvZGUsIGl0IGNhbiByZWxpYWJseSBlbWl0IHRoZSBzYW1l
IGNvZGUgc2VxdWVuY2UgYXMKKyAgICAgICAgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQuICBUaGlz
IHBhdGNoIGFsc28gZXh0ZW5kcyB0aGUgbm9uLXNwZWN1bGF0aXZlCisgICAgICAgIEpJVCdzIGNv
bXBhcmUgb3B0aW1pemF0aW9ucyB0byBpbmNsdWRlIGNvbXBhcmUvYnJhbmNoIGZ1c2luZywgYW5k
CisgICAgICAgIGV4dGVuZHMgdGhlIHNwZWN1bGF0aXZlIEpJVCdzIGNvbXBhcmUgb3B0aW1pemF0
aW9ucyB0byBjb3ZlciBTdHJpY3RFcXVhbC4KKworICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjppc0tub3du
SW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6aXNLbm93bk51
bWVyaWMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0
aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
Om5vblNwZWN1bGF0aXZlQ29tcGFyZSk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpkZXRlY3RQZWVwSG9s
ZUJyYW5jaCk6CisgICAgICAgICogZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR05vblNwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMS0wNy0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBKSVQgY3Jhc2hlcyBvbiBob3N0IGNvbnN0cnVj
dG9yIGNhbGxzIGluIGRlYnVnIG1vZGUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDkxMDM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzI1LDYgKzMyNSw0NiBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnVzZUNoaWxk
cmVuKE5vZGUmCiAgICAgfQogfQogCitib29sIEpJVENvZGVHZW5lcmF0b3I6OmlzS25vd25JbnRl
Z2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2Rl
SW5kZXgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lz
dGVyKCldOworCisgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJG
b3JtYXQoKTsKKyAgICBpZiAocmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAg
ICAgIHJldHVybiAocmVnaXN0ZXJGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRK
U0ludGVnZXI7CisKKyAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1h
dCgpOworICAgIGlmIChzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgcmV0
dXJuIChzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcjsK
KworICAgIEFTU0VSVChpc0NvbnN0YW50KG5vZGVJbmRleCkpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTnVtZXJpYyhOb2RlSW5kZXggbm9k
ZUluZGV4KQoreworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSB8fCBpc0RvdWJs
ZUNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClbbm9kZUluZGV4
XS52aXJ0dWFsUmVnaXN0ZXIoKV07CisKKyAgICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0g
aW5mby5yZWdpc3RlckZvcm1hdCgpOworICAgIGlmIChyZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9y
bWF0Tm9uZSkKKyAgICAgICAgcmV0dXJuIChyZWdpc3RlckZvcm1hdCB8IERhdGFGb3JtYXRKUykg
PT0gRGF0YUZvcm1hdEpTSW50ZWdlcgorICAgICAgICAgICAgfHwgKHJlZ2lzdGVyRm9ybWF0IHwg
RGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGU7CisKKyAgICBEYXRhRm9ybWF0IHNw
aWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOworICAgIGlmIChzcGlsbEZvcm1hdCAhPSBE
YXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgcmV0dXJuIChzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRK
UykgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcgorICAgICAgICAgICAgfHwgKHNwaWxsRm9ybWF0IHwg
RGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGU7CisKKyAgICBBU1NFUlQoaXNDb25z
dGFudChub2RlSW5kZXgpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEpJVENvbXBpbGVyOjpD
YWxsIEpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJl
ZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0LCBOb2RlVHlwZSBub2RlVHlwZSkKIHsKICAgICBHUFJSZWcgc2NyYXRj
aEdQUjsKQEAgLTQ2OCw2ICs1MDgsMTE2IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVk
R2V0TWV0aG9kKEcKICAgICBtX2ppdC5hZGRNZXRob2RHZXQoc2xvd0NhbGwsIHN0cnVjdFRvQ29t
cGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlvbik7CiB9CiAK
K3ZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2Rl
JiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiBjb25kLCBaX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCit7
CisgICAgTm9kZSYgYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKClbYnJhbmNoTm9kZUluZGV4XTsK
KyAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNv
ZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5k
ZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChi
cmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisKKyAgICBKSVRDb21waWxlcjo6
UmVzdWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVy
bzsKKworICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRh
a2VuIGJsb2NrLgorICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5v
dFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91
Z2guCisgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgY29uZCA9IEpJ
VENvbXBpbGVyOjppbnZlcnQoY29uZCk7CisgICAgICAgIGNhbGxSZXN1bHRDb25kaXRpb24gPSBK
SVRDb21waWxlcjo6WmVybzsKKyAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAg
ICAgdGFrZW4gPSBub3RUYWtlbjsKKyAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgfQorCisg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEdQUlJlZyBhcmcxR1BSID0g
YXJnMS5ncHIoKTsKKyAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgCisgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcyKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsK
KyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBz
bG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJn
MUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMigpKSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOworICAgIAorICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25k
LCBhcmcxR1BSLCBhcmcyR1BSKSwgdGFrZW4pOworICAgIAorICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS5jaGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7Cisg
ICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAKKyAgICAgICAg
c2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYXJnMUdQUiwgYXJn
MkdQUik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soaGVscGVyRnVuY3Rpb24pOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7CisgICAgICAgIAorICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY2Fs
bFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSKSwgdGFrZW4pOworICAgIH0KKworICAgIGlmIChu
b3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQorICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgp
LCBub3RUYWtlbik7Cit9CisKK2Jvb2wgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVD
b21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFpfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3sKKyAgICBOb2RlSW5kZXgg
YnJhbmNoTm9kZUluZGV4ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKKyAgICBpZiAoYnJhbmNo
Tm9kZUluZGV4ICE9IE5vTm9kZSkgeworICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNv
dW50KCkgPT0gMSk7CisgICAgICAgIAorICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJh
bmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgY29uZCwgaGVscGVyRnVuY3Rpb24pOworICAgIAor
ICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsK
KyAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIGFy
ZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBu
b2RlLmNoaWxkMigpKTsKKyAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CisgICAgR1BS
UmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgYXJnMik7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgCisgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOworICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIo
KSkpCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAg
ICAKKyAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BS
KTsKKyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBo
YXZlUmVzdWx0ID0gbV9qaXQuanVtcCgpOworICAgIAorICAgICAgICBzbG93UGF0aC5saW5rKCZt
X2ppdCk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRH
UFIpOworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYXJnMUdQUiwgYXJnMkdQUik7CisgICAg
ICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soaGVscGVyRnVu
Y3Rpb24pOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAg
ICAgIAorICAgICAgICBtX2ppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KDEpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGhhdmVSZXN1bHQubGluaygm
bV9qaXQpOworICAgIH0KKyAgICAKKyAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBKSVRDb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBub2RlKQogewogICAgIFBfREZHT3BlcmF0aW9uX0Ug
c2xvd0NhbGxGdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5MTAzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTIs
NiArNDEyLDkgQEAgcHJvdGVjdGVkOgogICAgICAgICBpbmZvLnNwaWxsKChEYXRhRm9ybWF0KShz
cGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykpOwogICAgIH0KIAorICAgIGJvb2wgaXNLbm93bklu
dGVnZXIoTm9kZUluZGV4KTsKKyAgICBib29sIGlzS25vd25OdW1lcmljKE5vZGVJbmRleCk7CisK
ICAgICAvLyBDaGVja3MvYWNjZXNzb3JzIGZvciBjb25zdGFudCB2YWx1ZXMuCiAgICAgYm9vbCBp
c0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmlzQ29uc3RhbnQo
bm9kZUluZGV4KTsgfQogICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgp
IHsgcmV0dXJuIG1faml0LmlzSlNDb25zdGFudChub2RlSW5kZXgpOyB9CkBAIC01MzEsMTAgKzUz
NCwyOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgLy8gUmV0dXJu
cyB0aGUgbm9kZSBpbmRleCBvZiB0aGUgYnJhbmNoIG5vZGUgaWYgcGVlcGhvbGUgaXMgb2theSwg
Tm9Ob2RlIG90aGVyd2lzZS4KKyAgICBOb2RlSW5kZXggZGV0ZWN0UGVlcEhvbGVCcmFuY2goKQor
ICAgIHsKKyAgICAgICAgTm9kZUluZGV4IGxhc3ROb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1f
YmxvY2tzW21fYmxvY2tdLT5lbmQgLSAxOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgbm8gaW50
ZXJ2ZW5pbmcgbm9kZXMgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICAgIGZvciAoTm9kZUluZGV4
IGluZGV4ID0gbV9jb21waWxlSW5kZXggKyAxOyBpbmRleCA8IGxhc3ROb2RlSW5kZXg7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgIGlmIChtX2ppdC5ncmFwaCgpW2luZGV4XS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgorICAg
ICAgICBOb2RlJiBsYXN0Tm9kZSA9IG1faml0LmdyYXBoKClbbGFzdE5vZGVJbmRleF07CisgICAg
ICAgIHJldHVybiBsYXN0Tm9kZS5vcCA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkgPT0g
bV9jb21waWxlSW5kZXggPyBsYXN0Tm9kZUluZGV4IDogTm9Ob2RlOworICAgIH0KKwogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1
bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgTm9kZVR5cGUgPSBHZXRCeUlkKTsKICAg
ICB2b2lkIGNhY2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BS
UmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAgICAg
dm9pZCBjYWNoZWRHZXRNZXRob2QoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAgICAgCisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBl
ZXBob2xlQnJhbmNoKE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgWl9ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0
aW9uKTsKKyAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFpfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlv
bik7CisgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzc09mQ2FsbERhdGEo
aW50IGlkeCkKICAgICB7CiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxl
ZVJlZ2lzdGVycyArIGlkeCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiA5MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNDYgKzEyMCw2
IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6Om51bWJlclRvSW50MzIoRlAKICAgICB0cnVuY2F0
ZWRUb0ludGVnZXIubGluaygmbV9qaXQpOwogfQogCi1ib29sIE5vblNwZWN1bGF0aXZlSklUOjpp
c0tub3duSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQotewotICAgIGlmIChpc0ludDMyQ29u
c3RhbnQobm9kZUluZGV4KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZp
cnR1YWxSZWdpc3RlcigpXTsKLQotICAgIERhdGFGb3JtYXQgcmVnaXN0ZXJGb3JtYXQgPSBpbmZv
LnJlZ2lzdGVyRm9ybWF0KCk7Ci0gICAgaWYgKHJlZ2lzdGVyRm9ybWF0ICE9IERhdGFGb3JtYXRO
b25lKQotICAgICAgICByZXR1cm4gKHJlZ2lzdGVyRm9ybWF0IHwgRGF0YUZvcm1hdEpTKSA9PSBE
YXRhRm9ybWF0SlNJbnRlZ2VyOwotCi0gICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8u
c3BpbGxGb3JtYXQoKTsKLSAgICBpZiAoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCi0g
ICAgICAgIHJldHVybiAoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRK
U0ludGVnZXI7Ci0KLSAgICBBU1NFUlQoaXNDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTm9uU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25OdW1lcmljKE5v
ZGVJbmRleCBub2RlSW5kZXgpCi17Ci0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgp
IHx8IGlzRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbV9qaXQuZ3JhcGgo
KVtub2RlSW5kZXhdLnZpcnR1YWxSZWdpc3RlcigpXTsKLQotICAgIERhdGFGb3JtYXQgcmVnaXN0
ZXJGb3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7Ci0gICAgaWYgKHJlZ2lzdGVyRm9ybWF0
ICE9IERhdGFGb3JtYXROb25lKQotICAgICAgICByZXR1cm4gKHJlZ2lzdGVyRm9ybWF0IHwgRGF0
YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyCi0gICAgICAgICAgICB8fCAocmVnaXN0
ZXJGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0RvdWJsZTsKLQotICAgIERh
dGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7Ci0gICAgaWYgKHNwaWxs
Rm9ybWF0ICE9IERhdGFGb3JtYXROb25lKQotICAgICAgICByZXR1cm4gKHNwaWxsRm9ybWF0IHwg
RGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyCi0gICAgICAgICAgICB8fCAoc3Bp
bGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0RvdWJsZTsKLQotICAgIEFT
U0VSVChpc0NvbnN0YW50KG5vZGVJbmRleCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9p
ZCBOb25TcGVjdWxhdGl2ZUpJVDo6a25vd25Db25zdGFudEFyaXRoT3AoTm9kZVR5cGUgb3AsIE5v
ZGVJbmRleCByZWdDaGlsZCwgTm9kZUluZGV4IGltbUNoaWxkLCBib29sIGNvbW11dGUpCiB7CiAg
ICAgSlNWYWx1ZU9wZXJhbmQgcmVnQXJnKHRoaXMsIHJlZ0NoaWxkKTsKQEAgLTM0Miw0NiArMzAy
LDYgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9wKE5vZAogICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgTm9uU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgWl9ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQotewotICAg
IC8vIEZJWE1FOiBzaG91bGQgZG8gc29tZSBwZWVwaG9sZSB0byBmdXNlIGNvbXBhcmUvYnJhbmNo
Ci0gICAgICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7
Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICBHUFJS
ZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7Ci0gICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigp
OwotICAgIAotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYXJnMik7Ci0gICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgp
KSkKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAg
IGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpCi0gICAgICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAKLSAgICBtX2ppdC5jb21wYXJlMzIo
Y29uZCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKLSAgICAKLSAgICBKSVRDb21waWxl
cjo6SnVtcCBoYXZlUmVzdWx0ID0gbV9qaXQuanVtcCgpOwotICAgIAotICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKLSAgICAKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIp
OwotICAgIHNldHVwU3R1YkFyZ3VtZW50cyhhcmcxR1BSLCBhcmcyR1BSKTsKLSAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soaGVscGVyRnVuY3Rpb24pOwotICAgIG1f
aml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0gICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAKLSAgICBtX2ppdC5hbmRQdHIo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KDEpKSwgcmVzdWx0R1BSKTsKLSAgICAK
LSAgICBoYXZlUmVzdWx0LmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBtX2ppdC5vcjMyKFRydXN0
ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgpOwotfQotCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yJiBjaGVja0l0ZXJhdG9yLCBOb2RlJiBu
b2RlKQogewogICAgIC8vIENoZWNrIGZvciBzcGVjdWxhdGlvbiBjaGVja3MgZnJvbSB0aGUgY29y
cmVzcG9uZGluZyBpbnN0cnVjdGlvbiBpbiB0aGUKQEAgLTczMywyNyArNjUzLDMzIEBAIHZvaWQg
Tm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIENv
bXBhcmVMZXNzOgotICAgICAgICBjb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgb3BlcmF0aW9uQ29tcGFyZUxlc3MpOworICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21w
YXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3BlcmF0aW9uQ29tcGFyZUxlc3Mp
KQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBDb21wYXJlTGVzc0VxOgotICAgICAgICBjb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpM
ZXNzVGhhbk9yRXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEpOworICAgICAgICBpZiAobm9u
U3BlY3VsYXRpdmVDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWws
IG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgY29tcGFy
ZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW4sIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyKTsKKyAgICAgICAgaWYgKG5vblNwZWN1bGF0aXZlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2Vt
Ymxlcjo6R3JlYXRlclRoYW4sIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKSkKKyAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ29tcGFyZUdyZWF0
ZXJFcToKLSAgICAgICAgY29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5P
ckVxdWFsLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKTsKKyAgICAgICAgaWYgKG5vblNwZWN1
bGF0aXZlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICBjb21wYXJlKG5v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZUVxKTsKKyAgICAgICAg
aWYgKG5vblNwZWN1bGF0aXZlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9w
ZXJhdGlvbkNvbXBhcmVFcSkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6Ci0gICAgICAgIGNvbXBhcmUobm9kZSwgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEpOworICAgICAgICBpZiAo
bm9uU3BlY3VsYXRpdmVDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vblNwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5MTAzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtODIsOSArODIsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZShTcGVjdWxhdGlv
bkNoZWNrSW5kZXhJdGVyYXRvciYsIE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGUoU3BlY3VsYXRp
b25DaGVja0luZGV4SXRlcmF0b3ImLCBCYXNpY0Jsb2NrJik7CiAKLSAgICBib29sIGlzS25vd25J
bnRlZ2VyKE5vZGVJbmRleCk7Ci0gICAgYm9vbCBpc0tub3duTnVtZXJpYyhOb2RlSW5kZXgpOwot
CiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBwbGFudCBjYWxscyBvdXQgdG8gQysr
CiAgICAgLy8gaGVscGVyIHJvdXRpbmVzIHRvIGNvbnZlcnQgYmV0d2VlbiB0eXBlcy4KICAgICB2
b2lkIHZhbHVlVG9OdW1iZXIoSlNWYWx1ZU9wZXJhbmQmLCBHUFJSZWcgcmVzdWx0KTsKQEAgLTEw
Miw3ICs5OSw2IEBAIHByaXZhdGU6CiAgICAgLy8gaW50ZXJuYWwgaGVscGVycyBmb3IgYWRkL3N1
Yi9tdWwgb3BlcmF0aW9ucwogICAgIHZvaWQga25vd25Db25zdGFudEFyaXRoT3AoTm9kZVR5cGUg
b3AsIE5vZGVJbmRleCByZWdDaGlsZCwgTm9kZUluZGV4IGltbUNoaWxkLCBib29sIGNvbW11dGUp
OwogICAgIHZvaWQgYmFzaWNBcml0aE9wKE5vZGVUeXBlIG9wLCBOb2RlJik7Ci0gICAgdm9pZCBj
b21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgWl9ERkdP
cGVyYXRpb25fRUpKKTsKIAogICAgIEVudHJ5TG9jYXRpb25WZWN0b3IgbV9lbnRyeUxvY2F0aW9u
czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDkxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIxLDYgKzQyMSw4IEBAIGJvb2wgb3BlcmF0
aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVjU3RhdGUKIAogYm9vbCBvcGVyYXRpb25Db21wYXJlRXEo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyKQogeworICAgIC8vZGVidWdWYWx1ZShlbmNvZGVkT3AxKTsKKyAgICAvL2Rl
YnVnVmFsdWUoZW5jb2RlZE9wMik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVxdWFsKGV4ZWMsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDkxMDM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCw3ICs0MjQsNyBAQCBi
b29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKQogICAgICAg
ICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgs
IGNvbmRpdGlvbik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUNh
bGwobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBvcGVyYXRpb24pOworICAgICAgICAgICAgbm9uU3Bl
Y3VsYXRpdmVQZWVwaG9sZUJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgsIGNvbmRpdGlvbiwg
b3BlcmF0aW9uKTsKIAogICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIHVzZShu
b2RlLmNoaWxkMigpKTsKQEAgLTc5NywxOCArNzk3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7
CiAKLSAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7Ci0KLSAgICAgICAgbV9qaXQuY29tcGFyZTMyKEpJVENv
bXBpbGVyOjpFcXVhbCwgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0KLSAg
ICAgICAgLy8gSWYgd2UgYWRkIGEgRGF0YUZvcm1hdEJvb2wsIHdlIHNob3VsZCB1c2UgaXQgaGVy
ZS4KLSAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5n
cHIoKSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CisgICAgICAgIGlmIChjb21wYXJlKG5vZGUs
IEpJVENvbXBpbGVyOjpFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKSkKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDog
ewogICAgICAgICBOb2RlSW5kZXggYWxpYXMgPSBub2RlLmNoaWxkMygpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTEw
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzOSwyMiArMTM5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoZWNr
QXJndW1lbnRUeXBlcygpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVZhcmlhYmxlVHlwZXMoKTsKIAot
ICAgIC8vIFJldHVybnMgdGhlIG5vZGUgaW5kZXggb2YgdGhlIGJyYW5jaCBub2RlIGlmIHBlZXBo
b2xlIGlzIG9rYXksIE5vTm9kZSBvdGhlcndpc2UuCi0gICAgTm9kZUluZGV4IGRldGVjdFBlZXBI
b2xlQnJhbmNoKCkKLSAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBsYXN0Tm9kZUluZGV4ID0gbV9q
aXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+ZW5kIC0gMTsKLQotICAgICAgICAvLyBDaGVj
ayB0aGF0IG5vIGludGVydmVuaW5nIG5vZGVzIHdpbGwgYmUgZ2VuZXJhdGVkLgotICAgICAgICBm
b3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4ICsgMTsgaW5kZXggPCBsYXN0Tm9k
ZUluZGV4OyArK2luZGV4KSB7Ci0gICAgICAgICAgICBpZiAobV9qaXQuZ3JhcGgoKVtpbmRleF0u
c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxhc3ROb2RlIGlzIGEgYnJhbmNoIG9uIHRo
aXMgbm9kZS4KLSAgICAgICAgTm9kZSYgbGFzdE5vZGUgPSBtX2ppdC5ncmFwaCgpW2xhc3ROb2Rl
SW5kZXhdOwotICAgICAgICByZXR1cm4gbGFzdE5vZGUub3AgPT0gQnJhbmNoICYmIGxhc3ROb2Rl
LmNoaWxkMSgpID09IG1fY29tcGlsZUluZGV4ID8gbGFzdE5vZGVJbmRleCA6IE5vTm9kZTsKLSAg
ICB9Ci0KICAgICBib29sIGlzSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100908</attachid>
            <date>2011-07-14 18:14:22 -0700</date>
            <delta_ts>2011-07-15 00:17:27 -0700</delta_ts>
            <desc>the patch (fix style)</desc>
            <filename>compareopt_patch_2.diff</filename>
            <type>text/plain</type>
            <size>19484</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTEtMDctMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGlzIGluY29uc2lzdGVudCBhYm91dCBmdXNpbmcgYnJhbmNoZXMgYW5kIHNwZWN1bGF0
aW5nCisgICAgICAgIGludGVnZXIgY29tcGFyaXNvbnMgZm9yIGJyYW5jaGVzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ1NzMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
bW92ZXMgc29tZSBvZiBOb25TcGVjdWxhdGl2ZUpJVCdzIGZ1bmN0aW9uYWxpdHkgdXAgaW50byB0
aGUKKyAgICAgICAgSklUQ29kZUdlbmVyYXRvciBzdXBlcmNsYXNzIHNvIHRoYXQgaXQgY2FuIGJl
IHVzZWQgZnJvbSBib3RoIEpJVHMuICBOb3csCisgICAgICAgIGluIGNhc2VzIHdoZXJlIHRoZSBz
cGVjdWxhdGl2ZSBKSVQgZG9lc24ndCB3YW50IHRvIHNwZWN1bGF0ZSBidXQgc3RpbGwKKyAgICAg
ICAgd2FudHMgdG8gZW1pdCBnb29kIGNvZGUsIGl0IGNhbiByZWxpYWJseSBlbWl0IHRoZSBzYW1l
IGNvZGUgc2VxdWVuY2UgYXMKKyAgICAgICAgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQuICBUaGlz
IHBhdGNoIGFsc28gZXh0ZW5kcyB0aGUgbm9uLXNwZWN1bGF0aXZlCisgICAgICAgIEpJVCdzIGNv
bXBhcmUgb3B0aW1pemF0aW9ucyB0byBpbmNsdWRlIGNvbXBhcmUvYnJhbmNoIGZ1c2luZywgYW5k
CisgICAgICAgIGV4dGVuZHMgdGhlIHNwZWN1bGF0aXZlIEpJVCdzIGNvbXBhcmUgb3B0aW1pemF0
aW9ucyB0byBjb3ZlciBTdHJpY3RFcXVhbC4KKworICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjppc0tub3du
SW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6aXNLbm93bk51
bWVyaWMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0
aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
Om5vblNwZWN1bGF0aXZlQ29tcGFyZSk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpkZXRlY3RQZWVwSG9s
ZUJyYW5jaCk6CisgICAgICAgICogZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR05vblNwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMS0wNy0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBKSVQgY3Jhc2hlcyBvbiBob3N0IGNvbnN0cnVj
dG9yIGNhbGxzIGluIGRlYnVnIG1vZGUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDkxMDM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzI1LDYgKzMyNSw0NiBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnVzZUNoaWxk
cmVuKE5vZGUmCiAgICAgfQogfQogCitib29sIEpJVENvZGVHZW5lcmF0b3I6OmlzS25vd25JbnRl
Z2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2Rl
SW5kZXgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lz
dGVyKCldOworCisgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJG
b3JtYXQoKTsKKyAgICBpZiAocmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAg
ICAgIHJldHVybiAocmVnaXN0ZXJGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRK
U0ludGVnZXI7CisKKyAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1h
dCgpOworICAgIGlmIChzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgcmV0
dXJuIChzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcjsK
KworICAgIEFTU0VSVChpc0NvbnN0YW50KG5vZGVJbmRleCkpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTnVtZXJpYyhOb2RlSW5kZXggbm9k
ZUluZGV4KQoreworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSB8fCBpc0RvdWJs
ZUNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClbbm9kZUluZGV4
XS52aXJ0dWFsUmVnaXN0ZXIoKV07CisKKyAgICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0g
aW5mby5yZWdpc3RlckZvcm1hdCgpOworICAgIGlmIChyZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9y
bWF0Tm9uZSkKKyAgICAgICAgcmV0dXJuIChyZWdpc3RlckZvcm1hdCB8IERhdGFGb3JtYXRKUykg
PT0gRGF0YUZvcm1hdEpTSW50ZWdlcgorICAgICAgICAgICAgfHwgKHJlZ2lzdGVyRm9ybWF0IHwg
RGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGU7CisKKyAgICBEYXRhRm9ybWF0IHNw
aWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOworICAgIGlmIChzcGlsbEZvcm1hdCAhPSBE
YXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgcmV0dXJuIChzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRK
UykgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcgorICAgICAgICAgICAgfHwgKHNwaWxsRm9ybWF0IHwg
RGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGU7CisKKyAgICBBU1NFUlQoaXNDb25z
dGFudChub2RlSW5kZXgpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEpJVENvbXBpbGVyOjpD
YWxsIEpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJl
ZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0LCBOb2RlVHlwZSBub2RlVHlwZSkKIHsKICAgICBHUFJSZWcgc2NyYXRj
aEdQUjsKQEAgLTQ2OCw2ICs1MDgsMTE2IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVk
R2V0TWV0aG9kKEcKICAgICBtX2ppdC5hZGRNZXRob2RHZXQoc2xvd0NhbGwsIHN0cnVjdFRvQ29t
cGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlvbik7CiB9CiAK
K3ZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2Rl
JiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiBjb25kLCBaX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCit7
CisgICAgTm9kZSYgYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKClbYnJhbmNoTm9kZUluZGV4XTsK
KyAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNv
ZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5k
ZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChi
cmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisKKyAgICBKSVRDb21waWxlcjo6
UmVzdWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVy
bzsKKworICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRh
a2VuIGJsb2NrLgorICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5v
dFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91
Z2guCisgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgY29uZCA9IEpJ
VENvbXBpbGVyOjppbnZlcnQoY29uZCk7CisgICAgICAgIGNhbGxSZXN1bHRDb25kaXRpb24gPSBK
SVRDb21waWxlcjo6WmVybzsKKyAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAg
ICAgdGFrZW4gPSBub3RUYWtlbjsKKyAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgfQorCisg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEdQUlJlZyBhcmcxR1BSID0g
YXJnMS5ncHIoKTsKKyAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgCisgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcyKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsK
KyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBz
bG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJn
MUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMigpKSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOworICAgIAorICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25k
LCBhcmcxR1BSLCBhcmcyR1BSKSwgdGFrZW4pOworICAgIAorICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS5jaGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7Cisg
ICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAKKyAgICAgICAg
c2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYXJnMUdQUiwgYXJn
MkdQUik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soaGVscGVyRnVuY3Rpb24pOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7CisgICAgICAgIAorICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY2Fs
bFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSKSwgdGFrZW4pOworICAgIH0KKworICAgIGlmIChu
b3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQorICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgp
LCBub3RUYWtlbik7Cit9CisKK2Jvb2wgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVD
b21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFpfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3sKKyAgICBOb2RlSW5kZXgg
YnJhbmNoTm9kZUluZGV4ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKKyAgICBpZiAoYnJhbmNo
Tm9kZUluZGV4ICE9IE5vTm9kZSkgeworICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNv
dW50KCkgPT0gMSk7CisgICAgICAgIAorICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJh
bmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgY29uZCwgaGVscGVyRnVuY3Rpb24pOworICAgIAor
ICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsK
KyAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIGFy
ZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBu
b2RlLmNoaWxkMigpKTsKKyAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CisgICAgR1BS
UmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgYXJnMik7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgCisgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOworICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIo
KSkpCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAg
ICAKKyAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BS
KTsKKyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBo
YXZlUmVzdWx0ID0gbV9qaXQuanVtcCgpOworICAgIAorICAgICAgICBzbG93UGF0aC5saW5rKCZt
X2ppdCk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRH
UFIpOworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYXJnMUdQUiwgYXJnMkdQUik7CisgICAg
ICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soaGVscGVyRnVu
Y3Rpb24pOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAg
ICAgIAorICAgICAgICBtX2ppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KDEpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGhhdmVSZXN1bHQubGluaygm
bV9qaXQpOworICAgIH0KKyAgICAKKyAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZh
bHNlKSwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBKSVRDb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBub2RlKQogewogICAgIFBfREZHT3BlcmF0aW9uX0Ug
c2xvd0NhbGxGdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5MTAzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTIs
NiArNDEyLDkgQEAgcHJvdGVjdGVkOgogICAgICAgICBpbmZvLnNwaWxsKChEYXRhRm9ybWF0KShz
cGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykpOwogICAgIH0KIAorICAgIGJvb2wgaXNLbm93bklu
dGVnZXIoTm9kZUluZGV4KTsKKyAgICBib29sIGlzS25vd25OdW1lcmljKE5vZGVJbmRleCk7CisK
ICAgICAvLyBDaGVja3MvYWNjZXNzb3JzIGZvciBjb25zdGFudCB2YWx1ZXMuCiAgICAgYm9vbCBp
c0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmlzQ29uc3RhbnQo
bm9kZUluZGV4KTsgfQogICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgp
IHsgcmV0dXJuIG1faml0LmlzSlNDb25zdGFudChub2RlSW5kZXgpOyB9CkBAIC01MzEsMTAgKzUz
NCwyOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgLy8gUmV0dXJu
cyB0aGUgbm9kZSBpbmRleCBvZiB0aGUgYnJhbmNoIG5vZGUgaWYgcGVlcGhvbGUgaXMgb2theSwg
Tm9Ob2RlIG90aGVyd2lzZS4KKyAgICBOb2RlSW5kZXggZGV0ZWN0UGVlcEhvbGVCcmFuY2goKQor
ICAgIHsKKyAgICAgICAgTm9kZUluZGV4IGxhc3ROb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1f
YmxvY2tzW21fYmxvY2tdLT5lbmQgLSAxOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgbm8gaW50
ZXJ2ZW5pbmcgbm9kZXMgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICAgIGZvciAoTm9kZUluZGV4
IGluZGV4ID0gbV9jb21waWxlSW5kZXggKyAxOyBpbmRleCA8IGxhc3ROb2RlSW5kZXg7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgIGlmIChtX2ppdC5ncmFwaCgpW2luZGV4XS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgorICAg
ICAgICBOb2RlJiBsYXN0Tm9kZSA9IG1faml0LmdyYXBoKClbbGFzdE5vZGVJbmRleF07CisgICAg
ICAgIHJldHVybiBsYXN0Tm9kZS5vcCA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkgPT0g
bV9jb21waWxlSW5kZXggPyBsYXN0Tm9kZUluZGV4IDogTm9Ob2RlOworICAgIH0KKwogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1
bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgTm9kZVR5cGUgPSBHZXRCeUlkKTsKICAg
ICB2b2lkIGNhY2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BS
UmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAgICAg
dm9pZCBjYWNoZWRHZXRNZXRob2QoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAgICAgCisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBl
ZXBob2xlQnJhbmNoKE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgWl9ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0
aW9uKTsKKyAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFpfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlv
bik7CisgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzc09mQ2FsbERhdGEo
aW50IGlkeCkKICAgICB7CiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxl
ZVJlZ2lzdGVycyArIGlkeCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiA5MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNDYgKzEyMCw2
IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6Om51bWJlclRvSW50MzIoRlAKICAgICB0cnVuY2F0
ZWRUb0ludGVnZXIubGluaygmbV9qaXQpOwogfQogCi1ib29sIE5vblNwZWN1bGF0aXZlSklUOjpp
c0tub3duSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQotewotICAgIGlmIChpc0ludDMyQ29u
c3RhbnQobm9kZUluZGV4KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZp
cnR1YWxSZWdpc3RlcigpXTsKLQotICAgIERhdGFGb3JtYXQgcmVnaXN0ZXJGb3JtYXQgPSBpbmZv
LnJlZ2lzdGVyRm9ybWF0KCk7Ci0gICAgaWYgKHJlZ2lzdGVyRm9ybWF0ICE9IERhdGFGb3JtYXRO
b25lKQotICAgICAgICByZXR1cm4gKHJlZ2lzdGVyRm9ybWF0IHwgRGF0YUZvcm1hdEpTKSA9PSBE
YXRhRm9ybWF0SlNJbnRlZ2VyOwotCi0gICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8u
c3BpbGxGb3JtYXQoKTsKLSAgICBpZiAoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCi0g
ICAgICAgIHJldHVybiAoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRK
U0ludGVnZXI7Ci0KLSAgICBBU1NFUlQoaXNDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTm9uU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25OdW1lcmljKE5v
ZGVJbmRleCBub2RlSW5kZXgpCi17Ci0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgp
IHx8IGlzRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbV9qaXQuZ3JhcGgo
KVtub2RlSW5kZXhdLnZpcnR1YWxSZWdpc3RlcigpXTsKLQotICAgIERhdGFGb3JtYXQgcmVnaXN0
ZXJGb3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7Ci0gICAgaWYgKHJlZ2lzdGVyRm9ybWF0
ICE9IERhdGFGb3JtYXROb25lKQotICAgICAgICByZXR1cm4gKHJlZ2lzdGVyRm9ybWF0IHwgRGF0
YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyCi0gICAgICAgICAgICB8fCAocmVnaXN0
ZXJGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0RvdWJsZTsKLQotICAgIERh
dGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7Ci0gICAgaWYgKHNwaWxs
Rm9ybWF0ICE9IERhdGFGb3JtYXROb25lKQotICAgICAgICByZXR1cm4gKHNwaWxsRm9ybWF0IHwg
RGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyCi0gICAgICAgICAgICB8fCAoc3Bp
bGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0RvdWJsZTsKLQotICAgIEFT
U0VSVChpc0NvbnN0YW50KG5vZGVJbmRleCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9p
ZCBOb25TcGVjdWxhdGl2ZUpJVDo6a25vd25Db25zdGFudEFyaXRoT3AoTm9kZVR5cGUgb3AsIE5v
ZGVJbmRleCByZWdDaGlsZCwgTm9kZUluZGV4IGltbUNoaWxkLCBib29sIGNvbW11dGUpCiB7CiAg
ICAgSlNWYWx1ZU9wZXJhbmQgcmVnQXJnKHRoaXMsIHJlZ0NoaWxkKTsKQEAgLTM0Miw0NiArMzAy
LDYgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9wKE5vZAogICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgTm9uU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgWl9ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQotewotICAg
IC8vIEZJWE1FOiBzaG91bGQgZG8gc29tZSBwZWVwaG9sZSB0byBmdXNlIGNvbXBhcmUvYnJhbmNo
Ci0gICAgICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7
Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICBHUFJS
ZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7Ci0gICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigp
OwotICAgIAotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYXJnMik7Ci0gICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgp
KSkKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAg
IGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpCi0gICAgICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAKLSAgICBtX2ppdC5jb21wYXJlMzIo
Y29uZCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKLSAgICAKLSAgICBKSVRDb21waWxl
cjo6SnVtcCBoYXZlUmVzdWx0ID0gbV9qaXQuanVtcCgpOwotICAgIAotICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKLSAgICAKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIp
OwotICAgIHNldHVwU3R1YkFyZ3VtZW50cyhhcmcxR1BSLCBhcmcyR1BSKTsKLSAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soaGVscGVyRnVuY3Rpb24pOwotICAgIG1f
aml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0gICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAKLSAgICBtX2ppdC5hbmRQdHIo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KDEpKSwgcmVzdWx0R1BSKTsKLSAgICAK
LSAgICBoYXZlUmVzdWx0LmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBtX2ppdC5vcjMyKFRydXN0
ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgpOwotfQotCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yJiBjaGVja0l0ZXJhdG9yLCBOb2RlJiBu
b2RlKQogewogICAgIC8vIENoZWNrIGZvciBzcGVjdWxhdGlvbiBjaGVja3MgZnJvbSB0aGUgY29y
cmVzcG9uZGluZyBpbnN0cnVjdGlvbiBpbiB0aGUKQEAgLTczMywyNyArNjUzLDMzIEBAIHZvaWQg
Tm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIENv
bXBhcmVMZXNzOgotICAgICAgICBjb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgb3BlcmF0aW9uQ29tcGFyZUxlc3MpOworICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21w
YXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3BlcmF0aW9uQ29tcGFyZUxlc3Mp
KQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBDb21wYXJlTGVzc0VxOgotICAgICAgICBjb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpM
ZXNzVGhhbk9yRXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEpOworICAgICAgICBpZiAobm9u
U3BlY3VsYXRpdmVDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWws
IG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgY29tcGFy
ZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW4sIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyKTsKKyAgICAgICAgaWYgKG5vblNwZWN1bGF0aXZlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2Vt
Ymxlcjo6R3JlYXRlclRoYW4sIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKSkKKyAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ29tcGFyZUdyZWF0
ZXJFcToKLSAgICAgICAgY29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5P
ckVxdWFsLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKTsKKyAgICAgICAgaWYgKG5vblNwZWN1
bGF0aXZlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICBjb21wYXJlKG5v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZUVxKTsKKyAgICAgICAg
aWYgKG5vblNwZWN1bGF0aXZlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9w
ZXJhdGlvbkNvbXBhcmVFcSkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6Ci0gICAgICAgIGNvbXBhcmUobm9kZSwgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEpOworICAgICAgICBpZiAo
bm9uU3BlY3VsYXRpdmVDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vblNwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5MTAzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtODIsOSArODIsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZShTcGVjdWxhdGlv
bkNoZWNrSW5kZXhJdGVyYXRvciYsIE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGUoU3BlY3VsYXRp
b25DaGVja0luZGV4SXRlcmF0b3ImLCBCYXNpY0Jsb2NrJik7CiAKLSAgICBib29sIGlzS25vd25J
bnRlZ2VyKE5vZGVJbmRleCk7Ci0gICAgYm9vbCBpc0tub3duTnVtZXJpYyhOb2RlSW5kZXgpOwot
CiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBwbGFudCBjYWxscyBvdXQgdG8gQysr
CiAgICAgLy8gaGVscGVyIHJvdXRpbmVzIHRvIGNvbnZlcnQgYmV0d2VlbiB0eXBlcy4KICAgICB2
b2lkIHZhbHVlVG9OdW1iZXIoSlNWYWx1ZU9wZXJhbmQmLCBHUFJSZWcgcmVzdWx0KTsKQEAgLTEw
Miw3ICs5OSw2IEBAIHByaXZhdGU6CiAgICAgLy8gaW50ZXJuYWwgaGVscGVycyBmb3IgYWRkL3N1
Yi9tdWwgb3BlcmF0aW9ucwogICAgIHZvaWQga25vd25Db25zdGFudEFyaXRoT3AoTm9kZVR5cGUg
b3AsIE5vZGVJbmRleCByZWdDaGlsZCwgTm9kZUluZGV4IGltbUNoaWxkLCBib29sIGNvbW11dGUp
OwogICAgIHZvaWQgYmFzaWNBcml0aE9wKE5vZGVUeXBlIG9wLCBOb2RlJik7Ci0gICAgdm9pZCBj
b21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgWl9ERkdP
cGVyYXRpb25fRUpKKTsKIAogICAgIEVudHJ5TG9jYXRpb25WZWN0b3IgbV9lbnRyeUxvY2F0aW9u
czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gOTEwMzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI0LDcgKzQyNCw3IEBA
IGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwKICAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpCiAgICAg
ICAgICAgICBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRl
eCwgY29uZGl0aW9uKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xl
Q2FsbChub2RlLCBicmFuY2hOb2RlSW5kZXgsIG9wZXJhdGlvbik7CisgICAgICAgICAgICBub25T
cGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgY29uZGl0aW9u
LCBvcGVyYXRpb24pOwogCiAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAgdXNl
KG5vZGUuY2hpbGQyKCkpOwpAQCAtNzk3LDE4ICs3OTcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVh
azsKIAotICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKLQotICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklU
Q29tcGlsZXI6OkVxdWFsLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLQot
ICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBo
ZXJlLgotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0
LmdwcigpKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICAgICAgaWYgKGNvbXBhcmUobm9k
ZSwgSklUQ29tcGlsZXI6OkVxdWFsLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEpKQorICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKLSAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFs
OiB7CiAgICAgICAgIE5vZGVJbmRleCBhbGlhcyA9IG5vZGUuY2hpbGQzKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5
MTAzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTM5LDIyICsxMzksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY2hl
Y2tBcmd1bWVudFR5cGVzKCk7CiAgICAgdm9pZCBpbml0aWFsaXplVmFyaWFibGVUeXBlcygpOwog
Ci0gICAgLy8gUmV0dXJucyB0aGUgbm9kZSBpbmRleCBvZiB0aGUgYnJhbmNoIG5vZGUgaWYgcGVl
cGhvbGUgaXMgb2theSwgTm9Ob2RlIG90aGVyd2lzZS4KLSAgICBOb2RlSW5kZXggZGV0ZWN0UGVl
cEhvbGVCcmFuY2goKQotICAgIHsKLSAgICAgICAgTm9kZUluZGV4IGxhc3ROb2RlSW5kZXggPSBt
X2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5lbmQgLSAxOwotCi0gICAgICAgIC8vIENo
ZWNrIHRoYXQgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMgd2lsbCBiZSBnZW5lcmF0ZWQuCi0gICAgICAg
IGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXggKyAxOyBpbmRleCA8IGxhc3RO
b2RlSW5kZXg7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChtX2ppdC5ncmFwaCgpW2luZGV4
XS5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24g
dGhpcyBub2RlLgotICAgICAgICBOb2RlJiBsYXN0Tm9kZSA9IG1faml0LmdyYXBoKClbbGFzdE5v
ZGVJbmRleF07Ci0gICAgICAgIHJldHVybiBsYXN0Tm9kZS5vcCA9PSBCcmFuY2ggJiYgbGFzdE5v
ZGUuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXggPyBsYXN0Tm9kZUluZGV4IDogTm9Ob2RlOwot
ICAgIH0KLQogICAgIGJvb2wgaXNJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewog
ICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwo=
</data>
<flag name="review"
          id="95677"
          type_id="1"
          status="+"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="95678"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100941</attachid>
            <date>2011-07-15 00:17:27 -0700</date>
            <delta_ts>2011-07-15 00:25:36 -0700</delta_ts>
            <desc>the patch (fix conflict, fix review)</desc>
            <filename>compareopt_patch_4.patch</filename>
            <type>text/plain</type>
            <size>19905</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwNTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTEtMDctMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGlzIGluY29uc2lzdGVudCBhYm91dCBmdXNpbmcgYnJhbmNoZXMgYW5kIHNwZWN1bGF0
aW5nCisgICAgICAgIGludGVnZXIgY29tcGFyaXNvbnMgZm9yIGJyYW5jaGVzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ1NzMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
bW92ZXMgc29tZSBvZiBOb25TcGVjdWxhdGl2ZUpJVCdzIGZ1bmN0aW9uYWxpdHkgdXAgaW50byB0
aGUKKyAgICAgICAgSklUQ29kZUdlbmVyYXRvciBzdXBlcmNsYXNzIHNvIHRoYXQgaXQgY2FuIGJl
IHVzZWQgZnJvbSBib3RoIEpJVHMuICBOb3csCisgICAgICAgIGluIGNhc2VzIHdoZXJlIHRoZSBz
cGVjdWxhdGl2ZSBKSVQgZG9lc24ndCB3YW50IHRvIHNwZWN1bGF0ZSBidXQgc3RpbGwKKyAgICAg
ICAgd2FudHMgdG8gZW1pdCBnb29kIGNvZGUsIGl0IGNhbiByZWxpYWJseSBlbWl0IHRoZSBzYW1l
IGNvZGUgc2VxdWVuY2UgYXMKKyAgICAgICAgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQuICBUaGlz
IHBhdGNoIGFsc28gZXh0ZW5kcyB0aGUgbm9uLXNwZWN1bGF0aXZlCisgICAgICAgIEpJVCdzIGNv
bXBhcmUgb3B0aW1pemF0aW9ucyB0byBpbmNsdWRlIGNvbXBhcmUvYnJhbmNoIGZ1c2luZywgYW5k
CisgICAgICAgIGV4dGVuZHMgdGhlIHNwZWN1bGF0aXZlIEpJVCdzIGNvbXBhcmUgb3B0aW1pemF0
aW9ucyB0byBjb3ZlciBTdHJpY3RFcXVhbC4KKworICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjppc0tub3du
SW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6aXNLbm93bk51
bWVyaWMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0
aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
Om5vblNwZWN1bGF0aXZlQ29tcGFyZSk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpkZXRlY3RQZWVwSG9s
ZUJyYW5jaCk6CisgICAgICAgICogZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR05vblNwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMS0wNy0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBKSVQgZG9lcyBub3Qgb3B0aW1pemUgQnJhbmNo
IGFzIHdlbGwgYXMgaXQgY291bGQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDkxMDU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzI1LDYgKzMyNSw0NiBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnVzZUNoaWxkcmVu
KE5vZGUmCiAgICAgfQogfQogCitib29sIEpJVENvZGVHZW5lcmF0b3I6OmlzS25vd25JbnRlZ2Vy
KE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5k
ZXgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
bV9nZW5lcmF0aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lzdGVy
KCldOworCisgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKTsKKyAgICBpZiAocmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAg
IHJldHVybiAocmVnaXN0ZXJGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0lu
dGVnZXI7CisKKyAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgp
OworICAgIGlmIChzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgcmV0dXJu
IChzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcjsKKwor
ICAgIEFTU0VSVChpc0NvbnN0YW50KG5vZGVJbmRleCkpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTnVtZXJpYyhOb2RlSW5kZXggbm9kZUlu
ZGV4KQoreworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSB8fCBpc0RvdWJsZUNv
bnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClbbm9kZUluZGV4XS52
aXJ0dWFsUmVnaXN0ZXIoKV07CisKKyAgICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5m
by5yZWdpc3RlckZvcm1hdCgpOworICAgIGlmIChyZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0
Tm9uZSkKKyAgICAgICAgcmV0dXJuIChyZWdpc3RlckZvcm1hdCB8IERhdGFGb3JtYXRKUykgPT0g
RGF0YUZvcm1hdEpTSW50ZWdlcgorICAgICAgICAgICAgfHwgKHJlZ2lzdGVyRm9ybWF0IHwgRGF0
YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGU7CisKKyAgICBEYXRhRm9ybWF0IHNwaWxs
Rm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOworICAgIGlmIChzcGlsbEZvcm1hdCAhPSBEYXRh
Rm9ybWF0Tm9uZSkKKyAgICAgICAgcmV0dXJuIChzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykg
PT0gRGF0YUZvcm1hdEpTSW50ZWdlcgorICAgICAgICAgICAgfHwgKHNwaWxsRm9ybWF0IHwgRGF0
YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGU7CisKKyAgICBBU1NFUlQoaXNDb25zdGFu
dChub2RlSW5kZXgpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEpJVENvbXBpbGVyOjpDYWxs
IEpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyBy
ZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNs
b3dQYXRoVGFyZ2V0LCBOb2RlVHlwZSBub2RlVHlwZSkKIHsKICAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKQEAgLTQ2OCw2ICs1MDgsMTE2IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0
TWV0aG9kKEcKICAgICBtX2ppdC5hZGRNZXRob2RHZXQoc2xvd0NhbGwsIHN0cnVjdFRvQ29tcGFy
ZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlvbik7CiB9CiAKK3Zv
aWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlJiBu
b2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiBjb25kLCBaX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCit7Cisg
ICAgTm9kZSYgYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKClbYnJhbmNoTm9kZUluZGV4XTsKKyAg
ICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXgg
bm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFu
Y2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisKKyAgICBKSVRDb21waWxlcjo6UmVz
dWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVybzsK
KworICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2Vu
IGJsb2NrLgorICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRh
a2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2gu
CisgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgY29uZCA9IEpJVENv
bXBpbGVyOjppbnZlcnQoY29uZCk7CisgICAgICAgIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRD
b21waWxlcjo6WmVybzsKKyAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAg
dGFrZW4gPSBub3RUYWtlbjsKKyAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgfQorCisgICAg
SlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEdQUlJlZyBhcmcxR1BSID0gYXJn
MS5ncHIoKTsKKyAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgCisgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcyKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAg
ICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMigpKSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlcikpOworICAgIAorICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kLCBh
cmcxR1BSLCBhcmcyR1BSKSwgdGFrZW4pOworICAgIAorICAgIGlmICghaXNLbm93bkludGVnZXIo
bm9kZS5jaGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAKKyAgICAgICAgc2xv
d1BhdGgubGluaygmbV9qaXQpOworICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYXJnMUdQUiwgYXJnMkdQ
Uik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
aGVscGVyRnVuY3Rpb24pOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQ
Uik7CisgICAgICAgIAorICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY2FsbFJl
c3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSKSwgdGFrZW4pOworICAgIH0KKworICAgIGlmIChub3RU
YWtlbiAhPSAobV9ibG9jayArIDEpKQorICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBu
b3RUYWtlbik7Cit9CisKK2Jvb2wgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVDb21w
YXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IFpfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3sKKyAgICBOb2RlSW5kZXggYnJh
bmNoTm9kZUluZGV4ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKKyAgICBpZiAoYnJhbmNoTm9k
ZUluZGV4ICE9IE5vTm9kZSkgeworICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50
KCkgPT0gMSk7CisgICAgICAgIAorICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNo
KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgY29uZCwgaGVscGVyRnVuY3Rpb24pOworICAgIAorICAg
ICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKKyAg
ICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2Rl
LmNoaWxkMigpKTsKKyAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CisgICAgR1BSUmVn
IGFyZzJHUFIgPSBhcmcyLmdwcigpOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgYXJnMik7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAg
ICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgCisgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOworICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkp
CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAK
KyAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsK
KyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXZl
UmVzdWx0ID0gbV9qaXQuanVtcCgpOworICAgIAorICAgICAgICBzbG93UGF0aC5saW5rKCZtX2pp
dCk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIp
OworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAg
IG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soaGVscGVyRnVuY3Rp
b24pOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAg
IAorICAgICAgICBtX2ppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAg
ICAgICAKKyAgICAgICAgaGF2ZVJlc3VsdC5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAg
IG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgIAor
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgCisgICAg
cmV0dXJuIGZhbHNlOworfQorCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRCcmFuY2goTm9k
ZSYgbm9kZSkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiA5MTA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNiArNDEyLDkgQEAgcHJv
dGVjdGVkOgogICAgICAgICBpbmZvLnNwaWxsKChEYXRhRm9ybWF0KShzcGlsbEZvcm1hdCB8IERh
dGFGb3JtYXRKUykpOwogICAgIH0KIAorICAgIGJvb2wgaXNLbm93bkludGVnZXIoTm9kZUluZGV4
KTsKKyAgICBib29sIGlzS25vd25OdW1lcmljKE5vZGVJbmRleCk7CisKICAgICAvLyBDaGVja3Mv
YWNjZXNzb3JzIGZvciBjb25zdGFudCB2YWx1ZXMuCiAgICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmlzQ29uc3RhbnQobm9kZUluZGV4KTsgfQog
ICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0
LmlzSlNDb25zdGFudChub2RlSW5kZXgpOyB9CkBAIC01MzEsMTAgKzUzNCwyOSBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgLy8gUmV0dXJucyB0aGUgbm9kZSBpbmRl
eCBvZiB0aGUgYnJhbmNoIG5vZGUgaWYgcGVlcGhvbGUgaXMgb2theSwgTm9Ob2RlIG90aGVyd2lz
ZS4KKyAgICBOb2RlSW5kZXggZGV0ZWN0UGVlcEhvbGVCcmFuY2goKQorICAgIHsKKyAgICAgICAg
Tm9kZUluZGV4IGxhc3ROb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2td
LT5lbmQgLSAxOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMg
d2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21w
aWxlSW5kZXggKyAxOyBpbmRleCA8IGxhc3ROb2RlSW5kZXg7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgIGlmIChtX2ppdC5ncmFwaCgpW2luZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBpZiB0
aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgorICAgICAgICBOb2RlJiBsYXN0
Tm9kZSA9IG1faml0LmdyYXBoKClbbGFzdE5vZGVJbmRleF07CisgICAgICAgIHJldHVybiBsYXN0
Tm9kZS5vcCA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXgg
PyBsYXN0Tm9kZUluZGV4IDogTm9Ob2RlOworICAgIH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklU
Q29tcGlsZXI6Okp1bXAoKSwgTm9kZVR5cGUgPSBHZXRCeUlkKTsKICAgICB2b2lkIGNhY2hlZFB1
dEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNs
b3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAgICAgdm9pZCBjYWNoZWRHZXRN
ZXRob2QoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6
Okp1bXAoKSk7CiAgICAgCisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5v
ZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiwgWl9ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKKyAgICBib29s
IG5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24sIFpfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAgCiAgICAg
dm9pZCBlbWl0QnJhbmNoKE5vZGUmKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyBhZGRyZXNzT2ZDYWxsRGF0YShpbnQgaWR4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDkxMDU2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCw0NiArMTIwLDYgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
bnVtYmVyVG9JbnQzMihGUAogICAgIHRydW5jYXRlZFRvSW50ZWdlci5saW5rKCZtX2ppdCk7CiB9
CiAKLWJvb2wgTm9uU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25JbnRlZ2VyKE5vZGVJbmRleCBub2Rl
SW5kZXgpCi17Ci0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5m
b1ttX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lzdGVyKCldOwotCi0gICAgRGF0
YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKLSAgICBpZiAo
cmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAgIHJldHVybiAocmVnaXN0
ZXJGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0ludGVnZXI7Ci0KLSAgICBE
YXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOwotICAgIGlmIChzcGls
bEZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKLSAgICAgICAgcmV0dXJuIChzcGlsbEZvcm1hdCB8
IERhdGFGb3JtYXRKUykgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcjsKLQotICAgIEFTU0VSVChpc0Nv
bnN0YW50KG5vZGVJbmRleCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBOb25TcGVj
dWxhdGl2ZUpJVDo6aXNLbm93bk51bWVyaWMoTm9kZUluZGV4IG5vZGVJbmRleCkKLXsKLSAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkgfHwgaXNEb3VibGVDb25zdGFudChub2RlSW5k
ZXgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
bV9nZW5lcmF0aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lzdGVy
KCldOwotCi0gICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKTsKLSAgICBpZiAocmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAg
IHJldHVybiAocmVnaXN0ZXJGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0lu
dGVnZXIKLSAgICAgICAgICAgIHx8IChyZWdpc3RlckZvcm1hdCB8IERhdGFGb3JtYXRKUykgPT0g
RGF0YUZvcm1hdEpTRG91YmxlOwotCi0gICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8u
c3BpbGxGb3JtYXQoKTsKLSAgICBpZiAoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCi0g
ICAgICAgIHJldHVybiAoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRK
U0ludGVnZXIKLSAgICAgICAgICAgIHx8IChzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykgPT0g
RGF0YUZvcm1hdEpTRG91YmxlOwotCi0gICAgQVNTRVJUKGlzQ29uc3RhbnQobm9kZUluZGV4KSk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjprbm93bkNv
bnN0YW50QXJpdGhPcChOb2RlVHlwZSBvcCwgTm9kZUluZGV4IHJlZ0NoaWxkLCBOb2RlSW5kZXgg
aW1tQ2hpbGQsIGJvb2wgY29tbXV0ZSkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCByZWdBcmcodGhp
cywgcmVnQ2hpbGQpOwpAQCAtMzQyLDQ2ICszMDIsNiBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklU
OjpiYXNpY0FyaXRoT3AoTm9kCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4KTsKIH0KIAotdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2Rl
LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBaX0RGR09wZXJhdGlv
bl9FSkogaGVscGVyRnVuY3Rpb24pCi17Ci0gICAgLy8gRklYTUU6IHNob3VsZCBkbyBzb21lIHBl
ZXBob2xlIHRvIGZ1c2UgY29tcGFyZS9icmFuY2gKLSAgICAgICAgCi0gICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOwotICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKLSAg
ICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7Ci0gICAgCi0gICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBhcmcyKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwot
ICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICAKLSAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQotICAgICAgICBzbG93UGF0aC5hcHBlbmQo
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMigpKSkKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcikp
OwotICAgIAotICAgIG1faml0LmNvbXBhcmUzMihjb25kLCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1
bHRHUFIpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5q
dW1wKCk7Ci0gICAgCi0gICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwotICAgIAotICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgc2V0dXBTdHViQXJndW1lbnRzKGFy
ZzFHUFIsIGFyZzJHUFIpOwotICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhoZWxwZXJGdW5jdGlvbik7Ci0gICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgcmVzdWx0R1BSKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7
Ci0gICAgICAgIAotICAgIG1faml0LmFuZFB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oMSkpLCByZXN1bHRHUFIpOwotICAgIAotICAgIGhhdmVSZXN1bHQubGluaygmbV9qaXQp
OwotICAgIAotICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7Ci19Ci0K
IHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25DaGVja0luZGV4SXRl
cmF0b3ImIGNoZWNrSXRlcmF0b3IsIE5vZGUmIG5vZGUpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIHNw
ZWN1bGF0aW9uIGNoZWNrcyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGluc3RydWN0aW9uIGluIHRo
ZQpAQCAtNzMzLDI3ICs2NTMsMzMgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShT
cGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgQ29tcGFyZUxlc3M6Ci0gICAgICAgIGNvbXBhcmUo
bm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcGVyYXRpb25Db21wYXJlTGVzcyk7Cisg
ICAgICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuLCBvcGVyYXRpb25Db21wYXJlTGVzcykpCisgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0gICAgICAgIGNv
bXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgb3BlcmF0aW9uQ29t
cGFyZUxlc3NFcSk7CisgICAgICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmUobm9kZSwgTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSkpCisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENv
bXBhcmVHcmVhdGVyOgotICAgICAgICBjb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpHcmVh
dGVyVGhhbiwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIpOworICAgICAgICBpZiAobm9uU3BlY3Vs
YXRpdmVDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXIpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBjb21wYXJlKG5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyRXEpOworICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlKG5vZGUsIE1hY3JvQXNz
ZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEpKQor
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBD
b21wYXJlRXE6Ci0gICAgICAgIGNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBv
cGVyYXRpb25Db21wYXJlRXEpOworICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlKG5v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZUVxKSkKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToK
LSAgICAgICAgY29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSk7CisgICAgICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmUobm9kZSwg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEpKQorICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDkxMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25T
cGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw5ICs4Miw2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjb21waWxlKFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yJiwgTm9kZSYp
OwogICAgIHZvaWQgY29tcGlsZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYsIEJhc2lj
QmxvY2smKTsKIAotICAgIGJvb2wgaXNLbm93bkludGVnZXIoTm9kZUluZGV4KTsKLSAgICBib29s
IGlzS25vd25OdW1lcmljKE5vZGVJbmRleCk7Ci0KICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1
c2VkIHRvIHBsYW50IGNhbGxzIG91dCB0byBDKysKICAgICAvLyBoZWxwZXIgcm91dGluZXMgdG8g
Y29udmVydCBiZXR3ZWVuIHR5cGVzLgogICAgIHZvaWQgdmFsdWVUb051bWJlcihKU1ZhbHVlT3Bl
cmFuZCYsIEdQUlJlZyByZXN1bHQpOwpAQCAtMTAyLDcgKzk5LDYgQEAgcHJpdmF0ZToKICAgICAv
LyBpbnRlcm5hbCBoZWxwZXJzIGZvciBhZGQvc3ViL211bCBvcGVyYXRpb25zCiAgICAgdm9pZCBr
bm93bkNvbnN0YW50QXJpdGhPcChOb2RlVHlwZSBvcCwgTm9kZUluZGV4IHJlZ0NoaWxkLCBOb2Rl
SW5kZXggaW1tQ2hpbGQsIGJvb2wgY29tbXV0ZSk7CiAgICAgdm9pZCBiYXNpY0FyaXRoT3AoTm9k
ZVR5cGUgb3AsIE5vZGUmKTsKLSAgICB2b2lkIGNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBaX0RGR09wZXJhdGlvbl9FSkopOwogCiAgICAgRW50cnlM
b2NhdGlvblZlY3RvciBtX2VudHJ5TG9jYXRpb25zOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5MTA1NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MjQsNyArNDI0LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFy
ZShOb2RlJiBub2RlLAogICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNo
aWxkMSgpLCBub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVn
ZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kaXRpb24pOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjb21waWxlUGVlcEhvbGVDYWxsKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwg
b3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9k
ZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAKICAgICAgICAgdXNl
KG5vZGUuY2hpbGQxKCkpOwogICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CkBAIC03OTcsMTgg
Kzc5NywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBDb21wYXJlU3RyaWN0
RXE6IHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwot
Ci0gICAgICAgIG1faml0LmNvbXBhcmUzMihKSVRDb21waWxlcjo6RXF1YWwsIG9wMS5ncHIoKSwg
b3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotCi0gICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFG
b3JtYXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCi0gICAgICAgIG1faml0Lm9yMzIoVHJ1
c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgIGNhc2UgQ29tcGFyZVN0cmlj
dEVxOgorICAgICAgICBpZiAoY29tcGFyZShub2RlLCBKSVRDb21waWxlcjo6RXF1YWwsIG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFr
OwotICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgTm9kZUluZGV4IGFsaWFz
ID0gbm9kZS5jaGlsZDMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDkxMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMjIgKzEz
OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKICAgICB2b2lk
IGluaXRpYWxpemVWYXJpYWJsZVR5cGVzKCk7CiAKLSAgICAvLyBSZXR1cm5zIHRoZSBub2RlIGlu
ZGV4IG9mIHRoZSBicmFuY2ggbm9kZSBpZiBwZWVwaG9sZSBpcyBva2F5LCBOb05vZGUgb3RoZXJ3
aXNlLgotICAgIE5vZGVJbmRleCBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpCi0gICAgewotICAgICAg
ICBOb2RlSW5kZXggbGFzdE5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9j
a10tPmVuZCAtIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBubyBpbnRlcnZlbmluZyBub2Rl
cyB3aWxsIGJlIGdlbmVyYXRlZC4KLSAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2Nv
bXBpbGVJbmRleCArIDE7IGluZGV4IDwgbGFzdE5vZGVJbmRleDsgKytpbmRleCkgewotICAgICAg
ICAgICAgaWYgKG1faml0LmdyYXBoKClbaW5kZXhdLnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIGlm
IHRoZSBsYXN0Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCi0gICAgICAgIE5vZGUmIGxh
c3ROb2RlID0gbV9qaXQuZ3JhcGgoKVtsYXN0Tm9kZUluZGV4XTsKLSAgICAgICAgcmV0dXJuIGxh
c3ROb2RlLm9wID09IEJyYW5jaCAmJiBsYXN0Tm9kZS5jaGlsZDEoKSA9PSBtX2NvbXBpbGVJbmRl
eCA/IGxhc3ROb2RlSW5kZXggOiBOb05vZGU7Ci0gICAgfQotCiAgICAgYm9vbCBpc0ludGVnZXIo
Tm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5n
cmFwaCgpW25vZGVJbmRleF07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRm
b3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5o
CShyZXZpc2lvbiA5MTA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aAkod29ya2luZyBjb3B5KQpAQCAtMTAzNiw3ICsxMDM2LDcgQEAKICNpZiBFTkFCTEUoSklUKSAm
JiBVU0UoSlNWQUxVRTY0KSAmJiBQTEFURk9STShNQUMpCiAjZGVmaW5lIEVOQUJMRV9ERkdfSklU
IDEKIC8qIEVuYWJsZWQgd2l0aCByZXN0cmljdGlvbnMgdG8gY2lyY3VtdmVudCBrbm93biBwZXJm
b3JtYW5jZSByZWdyZXNzaW9ucy4gKi8KLSNkZWZpbmUgRU5BQkxFX0RGR19KSVRfUkVTVFJJQ1RJ
T05TIDEKKyNkZWZpbmUgRU5BQkxFX0RGR19KSVRfUkVTVFJJQ1RJT05TIDAKICNlbmRpZgogCiAv
KiBFbnN1cmUgdGhhdCBlaXRoZXIgdGhlIEpJVCBvciB0aGUgaW50ZXJwcmV0ZXIgaGFzIGJlZW4g
ZW5hYmxlZC4gKi8K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100942</attachid>
            <date>2011-07-15 00:25:36 -0700</date>
            <delta_ts>2011-07-15 13:14:40 -0700</delta_ts>
            <desc>the patch (fix Platform.h)</desc>
            <filename>compareopt_patch_4.patch</filename>
            <type>text/plain</type>
            <size>19342</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwNTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTEtMDctMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGlzIGluY29uc2lzdGVudCBhYm91dCBmdXNpbmcgYnJhbmNoZXMgYW5kIHNwZWN1bGF0
aW5nCisgICAgICAgIGludGVnZXIgY29tcGFyaXNvbnMgZm9yIGJyYW5jaGVzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ1NzMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
bW92ZXMgc29tZSBvZiBOb25TcGVjdWxhdGl2ZUpJVCdzIGZ1bmN0aW9uYWxpdHkgdXAgaW50byB0
aGUKKyAgICAgICAgSklUQ29kZUdlbmVyYXRvciBzdXBlcmNsYXNzIHNvIHRoYXQgaXQgY2FuIGJl
IHVzZWQgZnJvbSBib3RoIEpJVHMuICBOb3csCisgICAgICAgIGluIGNhc2VzIHdoZXJlIHRoZSBz
cGVjdWxhdGl2ZSBKSVQgZG9lc24ndCB3YW50IHRvIHNwZWN1bGF0ZSBidXQgc3RpbGwKKyAgICAg
ICAgd2FudHMgdG8gZW1pdCBnb29kIGNvZGUsIGl0IGNhbiByZWxpYWJseSBlbWl0IHRoZSBzYW1l
IGNvZGUgc2VxdWVuY2UgYXMKKyAgICAgICAgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQuICBUaGlz
IHBhdGNoIGFsc28gZXh0ZW5kcyB0aGUgbm9uLXNwZWN1bGF0aXZlCisgICAgICAgIEpJVCdzIGNv
bXBhcmUgb3B0aW1pemF0aW9ucyB0byBpbmNsdWRlIGNvbXBhcmUvYnJhbmNoIGZ1c2luZywgYW5k
CisgICAgICAgIGV4dGVuZHMgdGhlIHNwZWN1bGF0aXZlIEpJVCdzIGNvbXBhcmUgb3B0aW1pemF0
aW9ucyB0byBjb3ZlciBTdHJpY3RFcXVhbC4KKworICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjppc0tub3du
SW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6aXNLbm93bk51
bWVyaWMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0
aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
Om5vblNwZWN1bGF0aXZlQ29tcGFyZSk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpkZXRlY3RQZWVwSG9s
ZUJyYW5jaCk6CisgICAgICAgICogZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR05vblNwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMS0wNy0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBKSVQgZG9lcyBub3Qgb3B0aW1pemUgQnJhbmNo
IGFzIHdlbGwgYXMgaXQgY291bGQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDkxMDU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzI1LDYgKzMyNSw0NiBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnVzZUNoaWxkcmVu
KE5vZGUmCiAgICAgfQogfQogCitib29sIEpJVENvZGVHZW5lcmF0b3I6OmlzS25vd25JbnRlZ2Vy
KE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5k
ZXgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
bV9nZW5lcmF0aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lzdGVy
KCldOworCisgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKTsKKyAgICBpZiAocmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAg
IHJldHVybiAocmVnaXN0ZXJGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0lu
dGVnZXI7CisKKyAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgp
OworICAgIGlmIChzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgcmV0dXJu
IChzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcjsKKwor
ICAgIEFTU0VSVChpc0NvbnN0YW50KG5vZGVJbmRleCkpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTnVtZXJpYyhOb2RlSW5kZXggbm9kZUlu
ZGV4KQoreworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSB8fCBpc0RvdWJsZUNv
bnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClbbm9kZUluZGV4XS52
aXJ0dWFsUmVnaXN0ZXIoKV07CisKKyAgICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5m
by5yZWdpc3RlckZvcm1hdCgpOworICAgIGlmIChyZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0
Tm9uZSkKKyAgICAgICAgcmV0dXJuIChyZWdpc3RlckZvcm1hdCB8IERhdGFGb3JtYXRKUykgPT0g
RGF0YUZvcm1hdEpTSW50ZWdlcgorICAgICAgICAgICAgfHwgKHJlZ2lzdGVyRm9ybWF0IHwgRGF0
YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGU7CisKKyAgICBEYXRhRm9ybWF0IHNwaWxs
Rm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOworICAgIGlmIChzcGlsbEZvcm1hdCAhPSBEYXRh
Rm9ybWF0Tm9uZSkKKyAgICAgICAgcmV0dXJuIChzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykg
PT0gRGF0YUZvcm1hdEpTSW50ZWdlcgorICAgICAgICAgICAgfHwgKHNwaWxsRm9ybWF0IHwgRGF0
YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGU7CisKKyAgICBBU1NFUlQoaXNDb25zdGFu
dChub2RlSW5kZXgpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEpJVENvbXBpbGVyOjpDYWxs
IEpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyBy
ZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNs
b3dQYXRoVGFyZ2V0LCBOb2RlVHlwZSBub2RlVHlwZSkKIHsKICAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKQEAgLTQ2OCw2ICs1MDgsMTE2IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0
TWV0aG9kKEcKICAgICBtX2ppdC5hZGRNZXRob2RHZXQoc2xvd0NhbGwsIHN0cnVjdFRvQ29tcGFy
ZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlvbik7CiB9CiAKK3Zv
aWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlJiBu
b2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiBjb25kLCBaX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCit7Cisg
ICAgTm9kZSYgYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKClbYnJhbmNoTm9kZUluZGV4XTsKKyAg
ICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXgg
bm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFu
Y2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisKKyAgICBKSVRDb21waWxlcjo6UmVz
dWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVybzsK
KworICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2Vu
IGJsb2NrLgorICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRh
a2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2gu
CisgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgY29uZCA9IEpJVENv
bXBpbGVyOjppbnZlcnQoY29uZCk7CisgICAgICAgIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRD
b21waWxlcjo6WmVybzsKKyAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAg
dGFrZW4gPSBub3RUYWtlbjsKKyAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgfQorCisgICAg
SlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEdQUlJlZyBhcmcxR1BSID0gYXJn
MS5ncHIoKTsKKyAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgCisgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcyKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAg
ICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMigpKSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlcikpOworICAgIAorICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kLCBh
cmcxR1BSLCBhcmcyR1BSKSwgdGFrZW4pOworICAgIAorICAgIGlmICghaXNLbm93bkludGVnZXIo
bm9kZS5jaGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAKKyAgICAgICAgc2xv
d1BhdGgubGluaygmbV9qaXQpOworICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYXJnMUdQUiwgYXJnMkdQ
Uik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
aGVscGVyRnVuY3Rpb24pOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQ
Uik7CisgICAgICAgIAorICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY2FsbFJl
c3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSKSwgdGFrZW4pOworICAgIH0KKworICAgIGlmIChub3RU
YWtlbiAhPSAobV9ibG9jayArIDEpKQorICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBu
b3RUYWtlbik7Cit9CisKK2Jvb2wgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVDb21w
YXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IFpfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3sKKyAgICBOb2RlSW5kZXggYnJh
bmNoTm9kZUluZGV4ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKKyAgICBpZiAoYnJhbmNoTm9k
ZUluZGV4ICE9IE5vTm9kZSkgeworICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50
KCkgPT0gMSk7CisgICAgICAgIAorICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNo
KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgY29uZCwgaGVscGVyRnVuY3Rpb24pOworICAgIAorICAg
ICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKKyAg
ICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2Rl
LmNoaWxkMigpKTsKKyAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CisgICAgR1BSUmVn
IGFyZzJHUFIgPSBhcmcyLmdwcigpOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgYXJnMik7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAg
ICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgCisgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOworICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkp
CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAK
KyAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsK
KyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXZl
UmVzdWx0ID0gbV9qaXQuanVtcCgpOworICAgIAorICAgICAgICBzbG93UGF0aC5saW5rKCZtX2pp
dCk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIp
OworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAg
IG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soaGVscGVyRnVuY3Rp
b24pOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAg
IAorICAgICAgICBtX2ppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAg
ICAgICAKKyAgICAgICAgaGF2ZVJlc3VsdC5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAg
IG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgIAor
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgCisgICAg
cmV0dXJuIGZhbHNlOworfQorCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRCcmFuY2goTm9k
ZSYgbm9kZSkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oCShyZXZpc2lvbiA5MTA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNiArNDEyLDkgQEAgcHJv
dGVjdGVkOgogICAgICAgICBpbmZvLnNwaWxsKChEYXRhRm9ybWF0KShzcGlsbEZvcm1hdCB8IERh
dGFGb3JtYXRKUykpOwogICAgIH0KIAorICAgIGJvb2wgaXNLbm93bkludGVnZXIoTm9kZUluZGV4
KTsKKyAgICBib29sIGlzS25vd25OdW1lcmljKE5vZGVJbmRleCk7CisKICAgICAvLyBDaGVja3Mv
YWNjZXNzb3JzIGZvciBjb25zdGFudCB2YWx1ZXMuCiAgICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmlzQ29uc3RhbnQobm9kZUluZGV4KTsgfQog
ICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0
LmlzSlNDb25zdGFudChub2RlSW5kZXgpOyB9CkBAIC01MzEsMTAgKzUzNCwyOSBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgLy8gUmV0dXJucyB0aGUgbm9kZSBpbmRl
eCBvZiB0aGUgYnJhbmNoIG5vZGUgaWYgcGVlcGhvbGUgaXMgb2theSwgTm9Ob2RlIG90aGVyd2lz
ZS4KKyAgICBOb2RlSW5kZXggZGV0ZWN0UGVlcEhvbGVCcmFuY2goKQorICAgIHsKKyAgICAgICAg
Tm9kZUluZGV4IGxhc3ROb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2td
LT5lbmQgLSAxOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMg
d2lsbCBiZSBnZW5lcmF0ZWQuCisgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21w
aWxlSW5kZXggKyAxOyBpbmRleCA8IGxhc3ROb2RlSW5kZXg7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgIGlmIChtX2ppdC5ncmFwaCgpW2luZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBpZiB0
aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgorICAgICAgICBOb2RlJiBsYXN0
Tm9kZSA9IG1faml0LmdyYXBoKClbbGFzdE5vZGVJbmRleF07CisgICAgICAgIHJldHVybiBsYXN0
Tm9kZS5vcCA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXgg
PyBsYXN0Tm9kZUluZGV4IDogTm9Ob2RlOworICAgIH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklU
Q29tcGlsZXI6Okp1bXAoKSwgTm9kZVR5cGUgPSBHZXRCeUlkKTsKICAgICB2b2lkIGNhY2hlZFB1
dEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNs
b3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAgICAgdm9pZCBjYWNoZWRHZXRN
ZXRob2QoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6
Okp1bXAoKSk7CiAgICAgCisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5v
ZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiwgWl9ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKKyAgICBib29s
IG5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24sIFpfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAgCiAgICAg
dm9pZCBlbWl0QnJhbmNoKE5vZGUmKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyBhZGRyZXNzT2ZDYWxsRGF0YShpbnQgaWR4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDkxMDU2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCw0NiArMTIwLDYgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
bnVtYmVyVG9JbnQzMihGUAogICAgIHRydW5jYXRlZFRvSW50ZWdlci5saW5rKCZtX2ppdCk7CiB9
CiAKLWJvb2wgTm9uU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25JbnRlZ2VyKE5vZGVJbmRleCBub2Rl
SW5kZXgpCi17Ci0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5m
b1ttX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lzdGVyKCldOwotCi0gICAgRGF0
YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKLSAgICBpZiAo
cmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAgIHJldHVybiAocmVnaXN0
ZXJGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0ludGVnZXI7Ci0KLSAgICBE
YXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOwotICAgIGlmIChzcGls
bEZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKLSAgICAgICAgcmV0dXJuIChzcGlsbEZvcm1hdCB8
IERhdGFGb3JtYXRKUykgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcjsKLQotICAgIEFTU0VSVChpc0Nv
bnN0YW50KG5vZGVJbmRleCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBOb25TcGVj
dWxhdGl2ZUpJVDo6aXNLbm93bk51bWVyaWMoTm9kZUluZGV4IG5vZGVJbmRleCkKLXsKLSAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkgfHwgaXNEb3VibGVDb25zdGFudChub2RlSW5k
ZXgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
bV9nZW5lcmF0aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lzdGVy
KCldOwotCi0gICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKTsKLSAgICBpZiAocmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAg
IHJldHVybiAocmVnaXN0ZXJGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0lu
dGVnZXIKLSAgICAgICAgICAgIHx8IChyZWdpc3RlckZvcm1hdCB8IERhdGFGb3JtYXRKUykgPT0g
RGF0YUZvcm1hdEpTRG91YmxlOwotCi0gICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8u
c3BpbGxGb3JtYXQoKTsKLSAgICBpZiAoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCi0g
ICAgICAgIHJldHVybiAoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRK
U0ludGVnZXIKLSAgICAgICAgICAgIHx8IChzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykgPT0g
RGF0YUZvcm1hdEpTRG91YmxlOwotCi0gICAgQVNTRVJUKGlzQ29uc3RhbnQobm9kZUluZGV4KSk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjprbm93bkNv
bnN0YW50QXJpdGhPcChOb2RlVHlwZSBvcCwgTm9kZUluZGV4IHJlZ0NoaWxkLCBOb2RlSW5kZXgg
aW1tQ2hpbGQsIGJvb2wgY29tbXV0ZSkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCByZWdBcmcodGhp
cywgcmVnQ2hpbGQpOwpAQCAtMzQyLDQ2ICszMDIsNiBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklU
OjpiYXNpY0FyaXRoT3AoTm9kCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4KTsKIH0KIAotdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2Rl
LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBaX0RGR09wZXJhdGlv
bl9FSkogaGVscGVyRnVuY3Rpb24pCi17Ci0gICAgLy8gRklYTUU6IHNob3VsZCBkbyBzb21lIHBl
ZXBob2xlIHRvIGZ1c2UgY29tcGFyZS9icmFuY2gKLSAgICAgICAgCi0gICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOwotICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKLSAg
ICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7Ci0gICAgCi0gICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBhcmcyKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwot
ICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICAKLSAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQotICAgICAgICBzbG93UGF0aC5hcHBlbmQo
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMigpKSkKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcikp
OwotICAgIAotICAgIG1faml0LmNvbXBhcmUzMihjb25kLCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1
bHRHUFIpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5q
dW1wKCk7Ci0gICAgCi0gICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwotICAgIAotICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgc2V0dXBTdHViQXJndW1lbnRzKGFy
ZzFHUFIsIGFyZzJHUFIpOwotICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhoZWxwZXJGdW5jdGlvbik7Ci0gICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgcmVzdWx0R1BSKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7
Ci0gICAgICAgIAotICAgIG1faml0LmFuZFB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oMSkpLCByZXN1bHRHUFIpOwotICAgIAotICAgIGhhdmVSZXN1bHQubGluaygmbV9qaXQp
OwotICAgIAotICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7Ci19Ci0K
IHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25DaGVja0luZGV4SXRl
cmF0b3ImIGNoZWNrSXRlcmF0b3IsIE5vZGUmIG5vZGUpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIHNw
ZWN1bGF0aW9uIGNoZWNrcyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGluc3RydWN0aW9uIGluIHRo
ZQpAQCAtNzMzLDI3ICs2NTMsMzMgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShT
cGVjdWxhdAogICAgIH0KIAogICAgIGNhc2UgQ29tcGFyZUxlc3M6Ci0gICAgICAgIGNvbXBhcmUo
bm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcGVyYXRpb25Db21wYXJlTGVzcyk7Cisg
ICAgICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuLCBvcGVyYXRpb25Db21wYXJlTGVzcykpCisgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0gICAgICAgIGNv
bXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgb3BlcmF0aW9uQ29t
cGFyZUxlc3NFcSk7CisgICAgICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmUobm9kZSwgTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSkpCisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENv
bXBhcmVHcmVhdGVyOgotICAgICAgICBjb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpHcmVh
dGVyVGhhbiwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIpOworICAgICAgICBpZiAobm9uU3BlY3Vs
YXRpdmVDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgb3BlcmF0aW9u
Q29tcGFyZUdyZWF0ZXIpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBjb21wYXJlKG5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyRXEpOworICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlKG5vZGUsIE1hY3JvQXNz
ZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEpKQor
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBD
b21wYXJlRXE6Ci0gICAgICAgIGNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBv
cGVyYXRpb25Db21wYXJlRXEpOworICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlKG5v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZUVxKSkKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToK
LSAgICAgICAgY29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSk7CisgICAgICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmUobm9kZSwg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEpKQorICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDkxMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25T
cGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw5ICs4Miw2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjb21waWxlKFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yJiwgTm9kZSYp
OwogICAgIHZvaWQgY29tcGlsZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYsIEJhc2lj
QmxvY2smKTsKIAotICAgIGJvb2wgaXNLbm93bkludGVnZXIoTm9kZUluZGV4KTsKLSAgICBib29s
IGlzS25vd25OdW1lcmljKE5vZGVJbmRleCk7Ci0KICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1
c2VkIHRvIHBsYW50IGNhbGxzIG91dCB0byBDKysKICAgICAvLyBoZWxwZXIgcm91dGluZXMgdG8g
Y29udmVydCBiZXR3ZWVuIHR5cGVzLgogICAgIHZvaWQgdmFsdWVUb051bWJlcihKU1ZhbHVlT3Bl
cmFuZCYsIEdQUlJlZyByZXN1bHQpOwpAQCAtMTAyLDcgKzk5LDYgQEAgcHJpdmF0ZToKICAgICAv
LyBpbnRlcm5hbCBoZWxwZXJzIGZvciBhZGQvc3ViL211bCBvcGVyYXRpb25zCiAgICAgdm9pZCBr
bm93bkNvbnN0YW50QXJpdGhPcChOb2RlVHlwZSBvcCwgTm9kZUluZGV4IHJlZ0NoaWxkLCBOb2Rl
SW5kZXggaW1tQ2hpbGQsIGJvb2wgY29tbXV0ZSk7CiAgICAgdm9pZCBiYXNpY0FyaXRoT3AoTm9k
ZVR5cGUgb3AsIE5vZGUmKTsKLSAgICB2b2lkIGNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBaX0RGR09wZXJhdGlvbl9FSkopOwogCiAgICAgRW50cnlM
b2NhdGlvblZlY3RvciBtX2VudHJ5TG9jYXRpb25zOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5MTA1NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MjQsNyArNDI0LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFy
ZShOb2RlJiBub2RlLAogICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNo
aWxkMSgpLCBub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVn
ZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kaXRpb24pOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjb21waWxlUGVlcEhvbGVDYWxsKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwg
b3BlcmF0aW9uKTsKKyAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9k
ZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAKICAgICAgICAgdXNl
KG5vZGUuY2hpbGQxKCkpOwogICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CkBAIC03OTcsMTgg
Kzc5NywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBDb21wYXJlU3RyaWN0
RXE6IHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwot
Ci0gICAgICAgIG1faml0LmNvbXBhcmUzMihKSVRDb21waWxlcjo6RXF1YWwsIG9wMS5ncHIoKSwg
b3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotCi0gICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFG
b3JtYXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCi0gICAgICAgIG1faml0Lm9yMzIoVHJ1
c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgIGNhc2UgQ29tcGFyZVN0cmlj
dEVxOgorICAgICAgICBpZiAoY29tcGFyZShub2RlLCBKSVRDb21waWxlcjo6RXF1YWwsIG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFr
OwotICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgTm9kZUluZGV4IGFsaWFz
ID0gbm9kZS5jaGlsZDMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDkxMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMjIgKzEz
OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKICAgICB2b2lk
IGluaXRpYWxpemVWYXJpYWJsZVR5cGVzKCk7CiAKLSAgICAvLyBSZXR1cm5zIHRoZSBub2RlIGlu
ZGV4IG9mIHRoZSBicmFuY2ggbm9kZSBpZiBwZWVwaG9sZSBpcyBva2F5LCBOb05vZGUgb3RoZXJ3
aXNlLgotICAgIE5vZGVJbmRleCBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpCi0gICAgewotICAgICAg
ICBOb2RlSW5kZXggbGFzdE5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9j
a10tPmVuZCAtIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBubyBpbnRlcnZlbmluZyBub2Rl
cyB3aWxsIGJlIGdlbmVyYXRlZC4KLSAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2Nv
bXBpbGVJbmRleCArIDE7IGluZGV4IDwgbGFzdE5vZGVJbmRleDsgKytpbmRleCkgewotICAgICAg
ICAgICAgaWYgKG1faml0LmdyYXBoKClbaW5kZXhdLnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIGlm
IHRoZSBsYXN0Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCi0gICAgICAgIE5vZGUmIGxh
c3ROb2RlID0gbV9qaXQuZ3JhcGgoKVtsYXN0Tm9kZUluZGV4XTsKLSAgICAgICAgcmV0dXJuIGxh
c3ROb2RlLm9wID09IEJyYW5jaCAmJiBsYXN0Tm9kZS5jaGlsZDEoKSA9PSBtX2NvbXBpbGVJbmRl
eCA/IGxhc3ROb2RlSW5kZXggOiBOb05vZGU7Ci0gICAgfQotCiAgICAgYm9vbCBpc0ludGVnZXIo
Tm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5n
cmFwaCgpW25vZGVJbmRleF07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>