<?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>63644</bug_id>
          
          <creation_ts>2011-06-29 12:15:19 -0700</creation_ts>
          <short_desc>[v8] Improve performance of typed array set() taking Array</short_desc>
          <delta_ts>2011-09-16 11:02:34 -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>WebGL</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>
          
          <blocked>68237</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Ulan Degenbaev">ulan</assigned_to>
          <cc>danno</cc>
    
    <cc>jkummerow</cc>
    
    <cc>kbr</cc>
    
    <cc>ulan</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>429776</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-29 12:15:19 -0700</bug_when>
    <thetext>The V8 binding for typed arrays&apos; set() function taking a JavaScript Array as argument is disproportionately slower than the other bindings. The reason is the repeated crossings between the binding layer and the VM for each source array element that is fetched. This variant would be much more efficiently implemented in JavaScript using a simple loop. However, it isn&apos;t clear whether there are any other examples currently in the bindings of either implementing a method in the IDL in pure JavaScript, or replacing a method previously defined with one written in JS that might delegate to the original. We might need to add a post-initialization hook that runs after the global scope is initialized.

The associated Chromium bug for this issue, which contains a little more information, is http://crbug.com/84007 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446077</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-03 14:14:22 -0700</bug_when>
    <thetext>http://crbug.com/84007 has been updated to indicate that there is a similar performance problem with the typed array constructors taking JS arrays as arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462960</commentid>
    <comment_count>2</comment_count>
      <attachid>106509</attachid>
    <who name="Ulan Degenbaev">ulan</who>
    <bug_when>2011-09-06 15:56:07 -0700</bug_when>
    <thetext>Created attachment 106509
Implement the &apos;set&apos; method in JS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463655</commentid>
    <comment_count>3</comment_count>
      <attachid>106509</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-07 14:31:05 -0700</bug_when>
    <thetext>Comment on attachment 106509
Implement the &apos;set&apos; method in JS.

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

Just a few comments. Also thanks to dslomov who helped.

&gt; ChangeLog:19
&gt; +        * ../../Source/WebCore/bindings/v8/custom/V8ArrayBufferViewCustomScript.js: Added.

This ChangeLog is messed up. See other entries in this file.

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:483
&gt; +          &apos;action_name&apos;: &apos;generateV8ArrayBufferViewCustomScript.h&apos;,

Similar items are named like this: generateV8ArrayBufferViewCustomScript

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:497
&gt; +          &apos;message&apos;: &apos;Generating V8ArrayBufferViewCustomScript.h from V8ArrayBuferViewCustomScript.js&apos;,

typo: V8ArrayBuferViewCustomScript

&gt; Source/WebCore/bindings/v8/V8BindingScripts.cpp:32
&gt; +namespace WebCore {

add blank line.

&gt; Source/WebCore/bindings/v8/V8BindingScripts.cpp:33
&gt; +void V8BindingScripts::runScriptsInGlobalContext(v8::Handle&lt;v8::Context&gt; v8Context)

s/runScriptsInGlobalContext/runScript/ ?

&gt; Source/WebCore/bindings/v8/V8BindingScripts.cpp:37
&gt; +                        sizeof(V8ArrayBufferViewCustomScript_js));

indentation is wrong.

&gt; Source/WebCore/bindings/v8/V8BindingScripts.cpp:40
&gt; +}

add blank line.

&gt; Source/WebCore/bindings/v8/V8BindingScripts.h:37
&gt; +    static void runScriptsInGlobalContext(v8::Handle&lt;v8::Context&gt; v8Context);

param name adds no info. Omit it.

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:2
&gt;   * Copyright (C) 2008, 2009 Google Inc. All rights reserved.

Add 2011.

&gt; Source/WebCore/bindings/v8/custom/V8ArrayBufferViewCustomScript.js:34
&gt; +                var n = source.length;

Please use descriptive variable names. (not &quot;n&quot;)

&gt; Source/WebCore/bindings/v8/custom/V8ArrayBufferViewCustomScript.js:41
&gt; +            } else {

Don&apos;t use {} for single line statements.

&gt; LayoutTests/fast/canvas/webgl/array-unit-tests.html:647
&gt; +function testSettingFromArrayWithMinusZeroOffset(type, name) {

This test isn&apos;t used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463719</commentid>
    <comment_count>4</comment_count>
      <attachid>106509</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-09-07 15:44:56 -0700</bug_when>
    <thetext>Comment on attachment 106509
Implement the &apos;set&apos; method in JS.

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

Modulo Dave&apos;s feedback, the code and new test cases look good. It would be nice to add versions of some of them (like testSettingFromArrayWithNonIntegerOffset) that take typed arrays rather than JavaScript arrays, to test both the new code path as well as the native version.

&gt; Source/WebCore/bindings/v8/custom/V8ArrayBufferViewCustomScript.js:40
&gt; +                    this[i + offset] = source[i];

Would it be faster to hoist &apos;this&apos; into a local variable outside the loop, or will Crankshaft take care of that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463836</commentid>
    <comment_count>5</comment_count>
      <attachid>106692</attachid>
    <who name="Ulan Degenbaev">ulan</who>
    <bug_when>2011-09-07 19:31:27 -0700</bug_when>
    <thetext>Created attachment 106692
Revised patch

Thank you for reviewing!

(In reply to comment #3)
&gt; This ChangeLog is messed up. See other entries in this file.
I simplified it a bit and fixed file names, but I am not sure if you meant this. 

&gt; s/runScriptsInGlobalContext/runScript/
I renamed it to &quot;runScripts&quot; to be consistent with the class name &quot;BindingScripts&quot;.

All other comments are addressed as suggested.

(In reply to comment #4)
&gt; It would be nice to add versions of some of them (like testSettingFromArrayWithNonIntegerOffset) that take typed arrays
Done. I added both versions and extracted duplicate code into &quot;setWithValidOffset&quot;, &quot;setWithInvalidOffset&quot; functions.

&gt; Would it be faster to hoist &apos;this&apos; into a local variable outside the loop, or will Crankshaft take care of that?
I tried it but got no performance gain. Crankshaft seems to take care of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463867</commentid>
    <comment_count>6</comment_count>
      <attachid>106692</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-09-07 20:49:51 -0700</bug_when>
    <thetext>Comment on attachment 106692
Revised patch

This looks great. Thanks for pushing it forward. Setting r+ / cq+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464269</commentid>
    <comment_count>7</comment_count>
      <attachid>106692</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 12:54:26 -0700</bug_when>
    <thetext>Comment on attachment 106692
Revised patch

Clearing flags on attachment: 106692

Committed r94783: &lt;http://trac.webkit.org/changeset/94783&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464270</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 12:54:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106509</attachid>
            <date>2011-09-06 15:56:07 -0700</date>
            <delta_ts>2011-09-07 19:31:27 -0700</delta_ts>
            <desc>Implement the &apos;set&apos; method in JS.</desc>
            <filename>b63644</filename>
            <type>text/plain</type>
            <size>20951</size>
            <attacher name="Ulan Degenbaev">ulan</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDk0NjA0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMDkt
MDYgIFVsYW4gRGVnZW5iYWV2ICA8dWxhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW3Y4XSBJ
bXByb3ZlIHBlcmZvcm1hbmNlIG9mIHR5cGVkIGFycmF5IHNldCgpIHRha2luZyBBcnJheQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2NDQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyd3JpdGUgdGhl
IG5hdGl2ZSAnc2V0JyBtZXRob2Qgb2YgdGhlIHR5cGUgYXJyYXlzIHdpdGggSlMKKyAgICAgICAg
aW1wbGVtZW50YXRpb24uIFRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYnkgYXZvaWRpbmcgY29u
dGV4dAorICAgICAgICBzd2l0Y2hlcyBiZXR3ZWVuIHRoZSBiaW5kaW5nIGxheWVyIGFuZCB0aGUg
VjguCisgICAgICAgIFBlcmZvcm1hbmNlIGdhaW5zIHZhcnkgKG9uIGF2ZXJhZ2UgYSBmYWN0b3Ig
b2YgMy05KS4KKworICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dl
YkNvcmUuZ3lwOiBBZGRlZCBhbiBhY3Rpb24gZm9yIFY4QXJyYXlCdWZmZXJWaWV3Q3VzdG9tU2Ny
aXB0LmpzLgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaTogQWRk
ZWQgVjhCaW5kaW5nU2NyaXB0cy57Y3BwLGh9LgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1NjcmlwdHMuY3BwOiBBZGRlZDogY29tcGlsZSBhbmQg
cnVuIHRoZSBzY3JpcHQuCisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhCaW5kaW5nU2NyaXB0cy5oOiBBZGRlZC4KKyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcDogSW52b2tlIHRoZSBiaW5kaW5n
IHNjcmlwdHMuCisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDogRGl0dG8uCisgICAgICAgICogLi4vLi4vU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZmZXJWaWV3Q3VzdG9tU2Ny
aXB0LmpzOiBBZGRlZC4KKworICAgICAgICBMYXlvdXQgVGVzdHM6IG1vcmUgY2hlY2tzIGZvciBp
bnZhbGlkIG9mZnNldHMuIE5vIHBlcmZvcm1hbmNlIHRlc3RzIGFzCisgICAgICAgIHRoZXJlIHNl
ZW1zIHRvIGJlIG5vIGNsZWFuIHdheSB0byBhZGQgdGhlbSBhbmQgbWFrZSB0aGVtIG5vdCBmbGFr
eS4KKworICAgICAgICAqIC4uLy4uL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5
LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIC4uLy4uL0xheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMuaHRtbDoKKwogMjAxMS0wOS0wNiAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHI5NDI3
NCk6IEZvcm1NYW5hZ2VyVGVzdC5QcmV2aWV3Rm9ybSBhbmQgRmlsbEZvcm1Ob25FbXB0eUZpZWxk
IGZhaWwgb24gY2hyb21pdW0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDk0NTk4KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMDY0LDYg
KzIwNjQsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3Rl
bmVyLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92
OC9WOEJpbmRpbmdTY3JpcHRzLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5k
aW5nU2NyaXB0cy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvVjhET01NYXAuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA5NDU5OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAsNiArNDgwLDIzIEBACiAg
ICAgICAnYWN0aW9ucyc6IFsKICAgICAgICAgIyBBY3Rpb25zIHRvIGJ1aWxkIGRlcml2ZWQgc291
cmNlcy4KICAgICAgICAgeworICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZVY4QXJy
YXlCdWZmZXJWaWV3Q3VzdG9tU2NyaXB0LmgnLAorICAgICAgICAgICdpbnB1dHMnOiBbCisgICAg
ICAgICAgICAnLi4vYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZmZXJWaWV3Q3VzdG9tU2Ny
aXB0LmpzJywKKyAgICAgICAgICBdLAorICAgICAgICAgICdvdXRwdXRzJzogWworICAgICAgICAg
ICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9WOEFycmF5QnVmZmVyVmlld0N1
c3RvbVNjcmlwdC5oJywKKyAgICAgICAgICBdLAorICAgICAgICAgICdhY3Rpb24nOiBbCisgICAg
ICAgICAgICAncGVybCcsCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL3h4ZC5wbCcsCisgICAg
ICAgICAgICAnVjhBcnJheUJ1ZmZlclZpZXdDdXN0b21TY3JpcHRfanMnLAorICAgICAgICAgICAg
JzxAKF9pbnB1dHMpJywKKyAgICAgICAgICAgICc8QChfb3V0cHV0cyknCisgICAgICAgICAgXSwK
KyAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIFY4QXJyYXlCdWZmZXJWaWV3Q3VzdG9t
U2NyaXB0LmggZnJvbSBWOEFycmF5QnVmZXJWaWV3Q3VzdG9tU2NyaXB0LmpzJywKKyAgICAgICAg
fSwKKyAgICAgICAgewogICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZVhNTFZpZXdl
ckNTUycsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKICAgICAgICAgICAgICcuLi94bWwvWE1MVmll
d2VyLmNzcycsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdTY3Jp
cHRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRp
bmdTY3JpcHRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4QmluZGluZ1NjcmlwdHMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmdTY3Jp
cHRzLmgiCisKKyNpbmNsdWRlICJWOEFycmF5QnVmZmVyVmlld0N1c3RvbVNjcmlwdC5oIgorI2lu
Y2x1ZGUgIlY4QmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cit2b2lkIFY4QmluZGlu
Z1NjcmlwdHM6OnJ1blNjcmlwdHNJbkdsb2JhbENvbnRleHQodjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gdjhDb250ZXh0KQoreworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjhD
b250ZXh0KTsKKyAgICBTdHJpbmcgc291cmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KFY4QXJyYXlCdWZmZXJWaWV3Q3VzdG9tU2NyaXB0X2pzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVvZihWOEFycmF5QnVmZmVyVmlld0N1c3RvbVNjcmlwdF9qcykpOworICAgIHY4OjpI
YW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gdjg6OlNjcmlwdDo6Q29tcGlsZSh2OFN0cmluZyhz
b3VyY2UpKTsKKyAgICBzY3JpcHQtPlJ1bigpOworfQorfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhCaW5kaW5nU2NyaXB0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1NjcmlwdHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1NjcmlwdHMuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEJpbmRpbmdTY3JpcHRzX2gK
KyNkZWZpbmUgVjhCaW5kaW5nU2NyaXB0c19oCisKKyNpbmNsdWRlICJ2OC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFY4QmluZGluZ1NjcmlwdHMgeworcHVibGljOgorICAgIC8v
IFJ1bnMgY3VzdG9tIHNjcmlwdHMgdGhhdCBzZXQgdXAgVjggYmluZGluZ3MgaW4gZ2xvYmFsIGNv
bnRleHQuCisgICAgLy8gUHJlY29uZGl0aW9uOiB0aGUgc3BlY2lmaWVkIFY4IGNvbnRleHQgaXMg
aW5pdGlhbGl6ZWQgYW5kIGNvbnRhaW5zIHRoZQorICAgIC8vIGdsb2JhbCBvYmplY3QuCisgICAg
c3RhdGljIHZvaWQgcnVuU2NyaXB0c0luR2xvYmFsQ29udGV4dCh2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiB2OENvbnRleHQpOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiA5NDU5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEwICsxLDEwIEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQog
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
QEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OEJpbmRpbmdTY3JpcHRzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRl
ICJWOENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJWOERPTU1hcC5oIgpAQCAtMzM5LDYgKzM0MCw4
IEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5pdENvbnRleHRJZk5lZWQKIAogICAgIHNldFNl
Y3VyaXR5VG9rZW4oKTsKIAorICAgIFY4QmluZGluZ1NjcmlwdHM6OnJ1blNjcmlwdHNJbkdsb2Jh
bENvbnRleHQodjhDb250ZXh0KTsKKwogICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
ZGlkQ3JlYXRlU2NyaXB0Q29udGV4dEZvckZyYW1lKCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBp
cyB3cm9uZy4gV2Ugc2hvdWxkIGFjdHVhbGx5IGRvIHRoaXMgZm9yIHRoZSBwcm9wZXIgd29ybGQg
b25jZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCShyZXZpc2lvbiA5NDU5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJTaGFyZWRXb3JrZXIuaCIK
ICNpbmNsdWRlICJTaGFyZWRXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgi
CisjaW5jbHVkZSAiVjhCaW5kaW5nU2NyaXB0cy5oIgogI2luY2x1ZGUgIlY4RE9NTWFwLmgiCiAj
aW5jbHVkZSAiVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5o
IgpAQCAtMTc0LDYgKzE3NSw5IEBAIGJvb2wgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpp
bml0Q28KICAgICAvLyBJbnNlcnQgdGhlIG9iamVjdCBpbnN0YW5jZSBhcyB0aGUgcHJvdG90eXBl
IG9mIHRoZSBzaGFkb3cgb2JqZWN0LgogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFs
T2JqZWN0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChtX2NvbnRleHQtPkdsb2JhbCgp
LT5HZXRQcm90b3R5cGUoKSk7CiAgICAgZ2xvYmFsT2JqZWN0LT5TZXRQcm90b3R5cGUoanNXb3Jr
ZXJDb250ZXh0KTsKKworICAgIFY4QmluZGluZ1NjcmlwdHM6OnJ1blNjcmlwdHNJbkdsb2JhbENv
bnRleHQoY29udGV4dCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZmZXJWaWV3Q3VzdG9tU2NyaXB0Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFycmF5
QnVmZmVyVmlld0N1c3RvbVNjcmlwdC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFycmF5QnVmZmVyVmlld0N1c3RvbVNjcmlwdC5qcwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworKGZ1bmN0aW9uKCkgewor
Cit2YXIgb3B0aW1pemVTZXRNZXRob2QgPSBmdW5jdGlvbih0eXBlKQoreworICAgIHR5cGUucHJv
dG90eXBlLnNldCA9IChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG5hdGl2ZVNldCA9IHR5cGUu
cHJvdG90eXBlLnNldDsKKyAgICAgICAgdmFyIGYgPSBmdW5jdGlvbihzb3VyY2UsIG9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNvdXJjZS5jb25zdHJ1Y3RvciA9PT0gQXJyYXkp
IHsKKyAgICAgICAgICAgICAgICB2YXIgbiA9IHNvdXJjZS5sZW5ndGg7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7CisgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IDAg
fHwgb2Zmc2V0ICsgbiA+IHRoaXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBuYXRpdmVTZXQuY2FsbCh0aGlzLCBzb3VyY2UsIG9mZnNldCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAg
ICAgICAgICAgICB0aGlzW2kgKyBvZmZzZXRdID0gc291cmNlW2ldOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmF0aXZlU2V0LmNhbGwodGhpcywgc291cmNl
LCBvZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmOwor
ICAgIH0pKCk7Cit9OworCitvcHRpbWl6ZVNldE1ldGhvZChGbG9hdDMyQXJyYXkpOworb3B0aW1p
emVTZXRNZXRob2QoRmxvYXQ2NEFycmF5KTsKK29wdGltaXplU2V0TWV0aG9kKEludDhBcnJheSk7
CitvcHRpbWl6ZVNldE1ldGhvZChJbnQxNkFycmF5KTsKK29wdGltaXplU2V0TWV0aG9kKEludDMy
QXJyYXkpOworb3B0aW1pemVTZXRNZXRob2QoVWludDhBcnJheSk7CitvcHRpbWl6ZVNldE1ldGhv
ZChVaW50MTZBcnJheSk7CitvcHRpbWl6ZVNldE1ldGhvZChVaW50MzJBcnJheSk7CisKK30pKCk7
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2FycmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NDU5OCkKKysrIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw5IEBAIFBBU1MgYXJyYXkuc3ViYXJyYXkoMikubGVu
Z3RoIGlzICgzMiAvIHQKIFBBU1MgYXJyYXkuc3ViYXJyYXkoLTIpLmxlbmd0aCBpcyAyCiBQQVNT
IGFycmF5LnN1YmFycmF5KC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCiBQ
QVNTIFNldHRpbmcgRmxvYXQzMkFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zm
c2V0IHdhcyBjYXVnaHQKK1BBU1MgU2V0dGluZyBGbG9hdDMyQXJyYXkgZnJvbSBhcnJheSB3aXRo
IG5lZ2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0CitQQVNTIFNldHRpbmcgRmxvYXQzMkFycmF5IGZy
b20gYXJyYXkgd2l0aCBib3VuZGFyeSBvZmZzZXQKK1BBU1MgU2V0dGluZyBGbG9hdDMyQXJyYXkg
ZnJvbSBhcnJheSB3aXRoIG5vbi1pbnRlZ2VyIG9mZnNldAogUEFTUyBTZXR0aW5nIEZsb2F0MzJB
cnJheSBmcm9tIGZha2UgYXJyYXkgd2l0aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNT
IFNldHRpbmcgRmxvYXQzMkFycmF5IGZyb20gRmxvYXQzMkFycmF5IHdpdGggb3V0LW9mLXJhbmdl
IG9mZnNldCB3YXMgY2F1Z2h0CiBQQVNTIGFycmF5LmdldCBpcyB1bmRlZmluZWQuCkBAIC04OSw2
ICs5Miw5IEBAIFBBU1MgYXJyYXkuc3ViYXJyYXkoMikubGVuZ3RoIGlzICgzMiAvIHQKIFBBU1Mg
YXJyYXkuc3ViYXJyYXkoLTIpLmxlbmd0aCBpcyAyCiBQQVNTIGFycmF5LnN1YmFycmF5KC0yMTQ3
NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCiBQQVNTIFNldHRpbmcgRmxvYXQ2NEFy
cmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKK1BBU1Mg
U2V0dGluZyBGbG9hdDY0QXJyYXkgZnJvbSBhcnJheSB3aXRoIG5lZ2F0aXZlIG9mZnNldCB3YXMg
Y2F1Z2h0CitQQVNTIFNldHRpbmcgRmxvYXQ2NEFycmF5IGZyb20gYXJyYXkgd2l0aCBib3VuZGFy
eSBvZmZzZXQKK1BBU1MgU2V0dGluZyBGbG9hdDY0QXJyYXkgZnJvbSBhcnJheSB3aXRoIG5vbi1p
bnRlZ2VyIG9mZnNldAogUEFTUyBTZXR0aW5nIEZsb2F0NjRBcnJheSBmcm9tIGZha2UgYXJyYXkg
d2l0aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgRmxvYXQ2NEFycmF5
IGZyb20gRmxvYXQ2NEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CiBQ
QVNTIGFycmF5LmdldCBpcyB1bmRlZmluZWQuCkBAIC0xMzEsNiArMTM3LDkgQEAgUEFTUyBhcnJh
eS5zdWJhcnJheSgyKS5sZW5ndGggaXMgKDMyIC8gdAogUEFTUyBhcnJheS5zdWJhcnJheSgtMiku
bGVuZ3RoIGlzIDIKIFBBU1MgYXJyYXkuc3ViYXJyYXkoLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAo
MzIgLyB0eXBlU2l6ZSkKIFBBU1MgU2V0dGluZyBJbnQ4QXJyYXkgZnJvbSBhcnJheSB3aXRoIG91
dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodAorUEFTUyBTZXR0aW5nIEludDhBcnJheSBmcm9t
IGFycmF5IHdpdGggbmVnYXRpdmUgb2Zmc2V0IHdhcyBjYXVnaHQKK1BBU1MgU2V0dGluZyBJbnQ4
QXJyYXkgZnJvbSBhcnJheSB3aXRoIGJvdW5kYXJ5IG9mZnNldAorUEFTUyBTZXR0aW5nIEludDhB
cnJheSBmcm9tIGFycmF5IHdpdGggbm9uLWludGVnZXIgb2Zmc2V0CiBQQVNTIFNldHRpbmcgSW50
OEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBB
U1MgU2V0dGluZyBJbnQ4QXJyYXkgZnJvbSBJbnQ4QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zm
c2V0IHdhcyBjYXVnaHQKIFBBU1MgYXJyYXkuZ2V0IGlzIHVuZGVmaW5lZC4KQEAgLTE3OCw2ICsx
ODcsOSBAQCBQQVNTIGFycmF5LnN1YmFycmF5KDIpLmxlbmd0aCBpcyAoMzIgLyB0CiBQQVNTIGFy
cmF5LnN1YmFycmF5KC0yKS5sZW5ndGggaXMgMgogUEFTUyBhcnJheS5zdWJhcnJheSgtMjE0NzQ4
MzY0OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKQogUEFTUyBTZXR0aW5nIEludDE2QXJyYXkg
ZnJvbSBhcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodAorUEFTUyBTZXR0
aW5nIEludDE2QXJyYXkgZnJvbSBhcnJheSB3aXRoIG5lZ2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0
CitQQVNTIFNldHRpbmcgSW50MTZBcnJheSBmcm9tIGFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0
CitQQVNTIFNldHRpbmcgSW50MTZBcnJheSBmcm9tIGFycmF5IHdpdGggbm9uLWludGVnZXIgb2Zm
c2V0CiBQQVNTIFNldHRpbmcgSW50MTZBcnJheSBmcm9tIGZha2UgYXJyYXkgd2l0aCBpbnZhbGlk
IGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgSW50MTZBcnJheSBmcm9tIEludDE2QXJy
YXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKIFBBU1MgYXJyYXkuZ2V0IGlz
IHVuZGVmaW5lZC4KQEAgLTIyNSw2ICsyMzcsOSBAQCBQQVNTIGFycmF5LnN1YmFycmF5KDIpLmxl
bmd0aCBpcyAoMzIgLyB0CiBQQVNTIGFycmF5LnN1YmFycmF5KC0yKS5sZW5ndGggaXMgMgogUEFT
UyBhcnJheS5zdWJhcnJheSgtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKQog
UEFTUyBTZXR0aW5nIEludDMyQXJyYXkgZnJvbSBhcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZz
ZXQgd2FzIGNhdWdodAorUEFTUyBTZXR0aW5nIEludDMyQXJyYXkgZnJvbSBhcnJheSB3aXRoIG5l
Z2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0CitQQVNTIFNldHRpbmcgSW50MzJBcnJheSBmcm9tIGFy
cmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0CitQQVNTIFNldHRpbmcgSW50MzJBcnJheSBmcm9tIGFy
cmF5IHdpdGggbm9uLWludGVnZXIgb2Zmc2V0CiBQQVNTIFNldHRpbmcgSW50MzJBcnJheSBmcm9t
IGZha2UgYXJyYXkgd2l0aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcg
SW50MzJBcnJheSBmcm9tIEludDMyQXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBj
YXVnaHQKIFBBU1MgYXJyYXkuZ2V0IGlzIHVuZGVmaW5lZC4KQEAgLTI2Nyw2ICsyODIsOSBAQCBQ
QVNTIGFycmF5LnN1YmFycmF5KDIpLmxlbmd0aCBpcyAoMzIgLyB0CiBQQVNTIGFycmF5LnN1YmFy
cmF5KC0yKS5sZW5ndGggaXMgMgogUEFTUyBhcnJheS5zdWJhcnJheSgtMjE0NzQ4MzY0OCkubGVu
Z3RoIGlzICgzMiAvIHR5cGVTaXplKQogUEFTUyBTZXR0aW5nIFVpbnQ4QXJyYXkgZnJvbSBhcnJh
eSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodAorUEFTUyBTZXR0aW5nIFVpbnQ4
QXJyYXkgZnJvbSBhcnJheSB3aXRoIG5lZ2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0CitQQVNTIFNl
dHRpbmcgVWludDhBcnJheSBmcm9tIGFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0CitQQVNTIFNl
dHRpbmcgVWludDhBcnJheSBmcm9tIGFycmF5IHdpdGggbm9uLWludGVnZXIgb2Zmc2V0CiBQQVNT
IFNldHRpbmcgVWludDhBcnJheSBmcm9tIGZha2UgYXJyYXkgd2l0aCBpbnZhbGlkIGxlbmd0aCB3
YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgVWludDhBcnJheSBmcm9tIFVpbnQ4QXJyYXkgd2l0aCBv
dXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKIFBBU1MgYXJyYXkuZ2V0IGlzIHVuZGVmaW5l
ZC4KQEAgLTMxNCw2ICszMzIsOSBAQCBQQVNTIGFycmF5LnN1YmFycmF5KDIpLmxlbmd0aCBpcyAo
MzIgLyB0CiBQQVNTIGFycmF5LnN1YmFycmF5KC0yKS5sZW5ndGggaXMgMgogUEFTUyBhcnJheS5z
dWJhcnJheSgtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKQogUEFTUyBTZXR0
aW5nIFVpbnQxNkFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBj
YXVnaHQKK1BBU1MgU2V0dGluZyBVaW50MTZBcnJheSBmcm9tIGFycmF5IHdpdGggbmVnYXRpdmUg
b2Zmc2V0IHdhcyBjYXVnaHQKK1BBU1MgU2V0dGluZyBVaW50MTZBcnJheSBmcm9tIGFycmF5IHdp
dGggYm91bmRhcnkgb2Zmc2V0CitQQVNTIFNldHRpbmcgVWludDE2QXJyYXkgZnJvbSBhcnJheSB3
aXRoIG5vbi1pbnRlZ2VyIG9mZnNldAogUEFTUyBTZXR0aW5nIFVpbnQxNkFycmF5IGZyb20gZmFr
ZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBVaW50
MTZBcnJheSBmcm9tIFVpbnQxNkFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1
Z2h0CiBQQVNTIGFycmF5LmdldCBpcyB1bmRlZmluZWQuCkBAIC0zNjEsNiArMzgyLDkgQEAgUEFT
UyBhcnJheS5zdWJhcnJheSgyKS5sZW5ndGggaXMgKDMyIC8gdAogUEFTUyBhcnJheS5zdWJhcnJh
eSgtMikubGVuZ3RoIGlzIDIKIFBBU1MgYXJyYXkuc3ViYXJyYXkoLTIxNDc0ODM2NDgpLmxlbmd0
aCBpcyAoMzIgLyB0eXBlU2l6ZSkKIFBBU1MgU2V0dGluZyBVaW50MzJBcnJheSBmcm9tIGFycmF5
IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CitQQVNTIFNldHRpbmcgVWludDMy
QXJyYXkgZnJvbSBhcnJheSB3aXRoIG5lZ2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0CitQQVNTIFNl
dHRpbmcgVWludDMyQXJyYXkgZnJvbSBhcnJheSB3aXRoIGJvdW5kYXJ5IG9mZnNldAorUEFTUyBT
ZXR0aW5nIFVpbnQzMkFycmF5IGZyb20gYXJyYXkgd2l0aCBub24taW50ZWdlciBvZmZzZXQKIFBB
U1MgU2V0dGluZyBVaW50MzJBcnJheSBmcm9tIGZha2UgYXJyYXkgd2l0aCBpbnZhbGlkIGxlbmd0
aCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgVWludDMyQXJyYXkgZnJvbSBVaW50MzJBcnJheSB3
aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodAogUEFTUyBhcnJheS5nZXQgaXMgdW5k
ZWZpbmVkLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10
ZXN0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Fy
cmF5LXVuaXQtdGVzdHMuaHRtbAkocmV2aXNpb24gOTQ1OTgpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYz
MCw2ICs2MzAsNzQgQEAgZnVuY3Rpb24gdGVzdFNldHRpbmdGcm9tQXJyYXlXaXRoT3V0T2ZSYQog
ICAgIH0KIH0KIAorZnVuY3Rpb24gdGVzdFNldHRpbmdGcm9tQXJyYXlXaXRoTmVnYXRpdmVPZmZz
ZXQodHlwZSwgbmFtZSkgeworICAgIHZhciB3ZWJnbEFycmF5ID0gbmV3IHR5cGUoMzIpOworICAg
IHZhciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAg
ICAgICBhcnJheS5wdXNoKGkpOworICAgIH0KKyAgICB0cnkgeworICAgICAgICB3ZWJnbEFycmF5
LnNldChhcnJheSwgLTEpOworICAgICAgICB0ZXN0RmFpbGVkKCJTZXR0aW5nICIgKyBuYW1lICsg
IiBmcm9tIGFycmF5IHdpdGggbmVnYXRpdmUgb2Zmc2V0IHdhcyBub3QgY2F1Z2h0Iik7CisgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJTZXR0aW5nICIgKyBuYW1lICsgIiBm
cm9tIGFycmF5IHdpdGggbmVnYXRpdmUgb2Zmc2V0IHdhcyBjYXVnaHQiKTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIHRlc3RTZXR0aW5nRnJvbUFycmF5V2l0aE1pbnVzWmVyb09mZnNldCh0eXBlLCBu
YW1lKSB7CisgICAgcnVubmluZygiU2V0dGluZyAiICsgbmFtZSArICIgZnJvbSBhcnJheSB3aXRo
IC0wIG9mZnNldCIpOworICAgIHZhciB3ZWJnbEFycmF5ID0gbmV3IHR5cGUoMzIpOworICAgIHZh
ciBhcnJheSA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgICAg
ICBhcnJheS5wdXNoKGkpOworICAgIH0KKyAgICB0cnkgeworICAgICAgICB3ZWJnbEFycmF5LnNl
dChhcnJheSwgLTApOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIHsKKyAg
ICAgICAgICAgIGFzc2VydEVxKCdFbGVtZW50ICcgKyBpLCBhcnJheVtpXSwgd2ViZ2xBcnJheVtp
XSk7CisgICAgICAgIH0KKyAgICAgICAgcGFzcygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgZmFpbChlKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RTZXR0aW5nRnJvbUFycmF5V2l0
aEJvdW5kYXJ5T2Zmc2V0KHR5cGUsIG5hbWUpIHsKKyAgICBydW5uaW5nKCJTZXR0aW5nICIgKyBu
YW1lICsgIiBmcm9tIGFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0Iik7CisgICAgdmFyIHdlYmds
QXJyYXkgPSBuZXcgdHlwZSgzMik7CisgICAgdmFyIGFycmF5ID0gW107CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgICAgIGFycmF5LnB1c2goaSk7CisgICAgfQorICAg
IHRyeSB7CisgICAgICAgIHdlYmdsQXJyYXkuc2V0KGFycmF5LCAxNik7CisgICAgICAgIGZvciAo
dmFyIGkgPSAxNjsgaSA8IDMyOyArK2kpIHsKKyAgICAgICAgICAgIGFzc2VydEVxKCdFbGVtZW50
ICcgKyBpLCBhcnJheVtpLTE2XSwgd2ViZ2xBcnJheVtpXSk7CisgICAgICAgIH0KKyAgICAgICAg
cGFzcygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZmFpbChlKTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIHRlc3RTZXR0aW5nRnJvbUFycmF5V2l0aE5vbkludGVnZXJPZmZzZXQodHlwZSwg
bmFtZSkgeworICAgIHJ1bm5pbmcoIlNldHRpbmcgIiArIG5hbWUgKyAiIGZyb20gYXJyYXkgd2l0
aCBub24taW50ZWdlciBvZmZzZXQiKTsKKyAgICB2YXIgd2ViZ2xBcnJheSA9IG5ldyB0eXBlKDMy
KTsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKysp
IHsKKyAgICAgICAgYXJyYXkucHVzaChpKTsKKyAgICB9CisgICAgdHJ5IHsKKyAgICAgICAgd2Vi
Z2xBcnJheS5zZXQoYXJyYXksIDE2Ljk5OSk7CisgICAgICAgIGZvciAodmFyIGkgPSAxNjsgaSA8
IDMyOyArK2kpIHsKKyAgICAgICAgICAgIGFzc2VydEVxKCdFbGVtZW50ICcgKyBpLCBhcnJheVtp
LTE2XSwgd2ViZ2xBcnJheVtpXSk7CisgICAgICAgIH0KKyAgICAgICAgcGFzcygpOworICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgZmFpbChlKTsKKyAgICB9Cit9CisKIGZ1bmN0aW9uIHRlc3RT
ZXR0aW5nRnJvbUZha2VBcnJheVdpdGhPdXRPZlJhbmdlTGVuZ3RoKHR5cGUsIG5hbWUpIHsKICAg
ICB2YXIgd2ViZ2xBcnJheSA9IG5ldyB0eXBlKDMyKTsKICAgICB2YXIgYXJyYXkgPSB7fTsKQEAg
LTg3Miw2ICs5NDAsOSBAQCBmdW5jdGlvbiBydW5UZXN0cygpIHsKICAgICB0ZXN0U3ViYXJyYXlX
aXRoT3V0T2ZSYW5nZVZhbHVlcyh0eXBlLCBuYW1lLCB0ZXN0Q2FzZS5lbGVtZW50U2l6ZUluQnl0
ZXMpOwogICAgIHRlc3RTdWJhcnJheVdpdGhEZWZhdWx0VmFsdWVzKHR5cGUsIG5hbWUsIHRlc3RD
YXNlLmVsZW1lbnRTaXplSW5CeXRlcyk7CiAgICAgdGVzdFNldHRpbmdGcm9tQXJyYXlXaXRoT3V0
T2ZSYW5nZU9mZnNldCh0eXBlLCBuYW1lKTsKKyAgICB0ZXN0U2V0dGluZ0Zyb21BcnJheVdpdGhO
ZWdhdGl2ZU9mZnNldCh0eXBlLCBuYW1lKTsKKyAgICB0ZXN0U2V0dGluZ0Zyb21BcnJheVdpdGhC
b3VuZGFyeU9mZnNldCh0eXBlLCBuYW1lKTsKKyAgICB0ZXN0U2V0dGluZ0Zyb21BcnJheVdpdGhO
b25JbnRlZ2VyT2Zmc2V0KHR5cGUsIG5hbWUpOwogICAgIHRlc3RTZXR0aW5nRnJvbUZha2VBcnJh
eVdpdGhPdXRPZlJhbmdlTGVuZ3RoKHR5cGUsIG5hbWUpOwogICAgIHRlc3RTZXR0aW5nRnJvbVR5
cGVkQXJyYXlXaXRoT3V0T2ZSYW5nZU9mZnNldCh0eXBlLCBuYW1lKTsKICAgICBuZWdhdGl2ZVRl
c3RHZXRBbmRTZXRNZXRob2RzKHR5cGUsIG5hbWUpOwo=
</data>
<flag name="review"
          id="102956"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106692</attachid>
            <date>2011-09-07 19:31:27 -0700</date>
            <delta_ts>2011-09-08 12:54:25 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>b63644-1</filename>
            <type>text/plain</type>
            <size>27120</size>
            <attacher name="Ulan Degenbaev">ulan</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDk0NzM5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDkt
MDcgIFVsYW4gRGVnZW5iYWV2ICA8dWxhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW3Y4XSBJ
bXByb3ZlIHBlcmZvcm1hbmNlIG9mIHR5cGVkIGFycmF5IHNldCgpIHRha2luZyBBcnJheQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2NDQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyd3JpdGUgdGhl
IG5hdGl2ZSAnc2V0JyBtZXRob2Qgb2YgdGhlIHR5cGUgYXJyYXlzIHdpdGggSlMKKyAgICAgICAg
aW1wbGVtZW50YXRpb24gYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGdsb2JhbCBjb250ZXh0
LgorCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgaW52YWxpZCBhbmQgYm91bmRhcnkgb2Zmc2V0cy4g
Tm8gcGVyZm9ybWFuY2UgdGVzdHMuCisKKyAgICAgICAgKiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9hcnJheS11bml0LXRlc3RzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0bWw6CisgICAgICAgICog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QmluZGluZ1NjcmlwdHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdTY3JpcHRzLmg6IEFkZGVkLgorICAgICAgICAqIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAqIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6
CisgICAgICAgICogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZm
ZXJWaWV3Q3VzdG9tU2NyaXB0LmpzOiBBZGRlZC4KKwogMjAxMS0wOS0wNyAgQWxleGVpIFN2aXRr
aW5lICA8YXN2aXRraW5lQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgdGVzdCBpbmZyYXN0
cnVjdHVyZSB0byB0ZXN0IHJ1YmJlci1iYW5kaW5nIG92ZXJoYW5nIGRyYXdpbmcgYWxvbmcgd2l0
aCBsYXlvdXQgdGVzdHMgZm9yIGV4aXN0aW5nIENocm9taXVtIE1hYyBvdmVyaGFuZyBkcmF3aW5n
IGluIHRoZSBub24tZ3B1IHBhdGguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA5NDcz
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjA2
Myw2ICsyMDYzLDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRM
aXN0ZW5lci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuaCcsCisgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvVjhCaW5kaW5nU2NyaXB0cy5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
QmluZGluZ1NjcmlwdHMuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9u
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gOTQ3MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDYgKzQ4MCwyMyBA
QAogICAgICAgJ2FjdGlvbnMnOiBbCiAgICAgICAgICMgQWN0aW9ucyB0byBidWlsZCBkZXJpdmVk
IHNvdXJjZXMuCiAgICAgICAgIHsKKyAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVW
OEFycmF5QnVmZmVyVmlld0N1c3RvbVNjcmlwdCcsCisgICAgICAgICAgJ2lucHV0cyc6IFsKKyAg
ICAgICAgICAgICcuLi9iaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZlclZpZXdDdXN0b21T
Y3JpcHQuanMnLAorICAgICAgICAgIF0sCisgICAgICAgICAgJ291dHB1dHMnOiBbCisgICAgICAg
ICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L1Y4QXJyYXlCdWZmZXJWaWV3
Q3VzdG9tU2NyaXB0LmgnLAorICAgICAgICAgIF0sCisgICAgICAgICAgJ2FjdGlvbic6IFsKKyAg
ICAgICAgICAgICdwZXJsJywKKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3IveHhkLnBsJywKKyAg
ICAgICAgICAgICdWOEFycmF5QnVmZmVyVmlld0N1c3RvbVNjcmlwdF9qcycsCisgICAgICAgICAg
ICAnPEAoX2lucHV0cyknLAorICAgICAgICAgICAgJzxAKF9vdXRwdXRzKScKKyAgICAgICAgICBd
LAorICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgVjhBcnJheUJ1ZmZlclZpZXdDdXN0
b21TY3JpcHQuaCBmcm9tIFY4QXJyYXlCdWZmZXJWaWV3Q3VzdG9tU2NyaXB0LmpzJywKKyAgICAg
ICAgfSwKKyAgICAgICAgewogICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZVhNTFZp
ZXdlckNTUycsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKICAgICAgICAgICAgICcuLi94bWwvWE1M
Vmlld2VyLmNzcycsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdT
Y3JpcHRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJp
bmRpbmdTY3JpcHRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QmluZGluZ1NjcmlwdHMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmdT
Y3JpcHRzLmgiCisKKyNpbmNsdWRlICJWOEFycmF5QnVmZmVyVmlld0N1c3RvbVNjcmlwdC5oIgor
I2luY2x1ZGUgIlY4QmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgVjhC
aW5kaW5nU2NyaXB0czo6cnVuU2NyaXB0cyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRl
eHQpCit7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZSh2OENvbnRleHQpOwor
ICAgIFN0cmluZyBzb3VyY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oVjhBcnJheUJ1
ZmZlclZpZXdDdXN0b21TY3JpcHRfanMpLAorICAgICAgICAgICAgICAgICAgc2l6ZW9mKFY4QXJy
YXlCdWZmZXJWaWV3Q3VzdG9tU2NyaXB0X2pzKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0
PiBzY3JpcHQgPSB2ODo6U2NyaXB0OjpDb21waWxlKHY4U3RyaW5nKHNvdXJjZSkpOworICAgIHNj
cmlwdC0+UnVuKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QmluZGluZ1NjcmlwdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEJpbmRpbmdTY3JpcHRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEJpbmRpbmdTY3JpcHRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgVjhCaW5kaW5nU2NyaXB0c19oCisjZGVmaW5lIFY4Qmlu
ZGluZ1NjcmlwdHNfaAorCisjaW5jbHVkZSAidjguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBWOEJpbmRpbmdTY3JpcHRzIHsKK3B1YmxpYzoKKyAgICAvLyBSdW5zIGN1c3RvbSBz
Y3JpcHRzIHRoYXQgc2V0IHVwIFY4IGJpbmRpbmdzIGluIGdsb2JhbCBjb250ZXh0LgorICAgIC8v
IFByZWNvbmRpdGlvbjogdGhlIHNwZWNpZmllZCBWOCBjb250ZXh0IGlzIGluaXRpYWxpemVkIGFu
ZCBjb250YWlucyB0aGUKKyAgICAvLyBnbG9iYWwgb2JqZWN0LgorICAgIHN0YXRpYyB2b2lkIHJ1
blNjcmlwdHModjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOworfTsKKworfQorCisjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3Bw
CShyZXZpc2lvbiA5NDczOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2lu
ZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDEwIEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiAKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogICogbWV0
OgotICogCisgKgogICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0
LDcgQEAKICAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKICAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwog
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogI2luY2x1
ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4QmluZGluZ1NjcmlwdHMuaCIKICNpbmNsdWRl
ICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUg
IlY4RE9NTWFwLmgiCkBAIC0zMzksNiArMzQwLDggQEAgYm9vbCBWOERPTVdpbmRvd1NoZWxsOjpp
bml0Q29udGV4dElmTmVlZAogCiAgICAgc2V0U2VjdXJpdHlUb2tlbigpOwogCisgICAgVjhCaW5k
aW5nU2NyaXB0czo6cnVuU2NyaXB0cyh2OENvbnRleHQpOworCiAgICAgbV9mcmFtZS0+bG9hZGVy
KCktPmNsaWVudCgpLT5kaWRDcmVhdGVTY3JpcHRDb250ZXh0Rm9yRnJhbWUoKTsKIAogICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHdyb25nLiBXZSBzaG91bGQgYWN0dWFsbHkgZG8gdGhpcyBmb3IgdGhl
IHByb3BlciB3b3JsZCBvbmNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAJKHJldmlzaW9uIDk0
NzM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlNo
YXJlZFdvcmtlci5oIgogI2luY2x1ZGUgIlNoYXJlZFdvcmtlckNvbnRleHQuaCIKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdTY3JpcHRzLmgiCiAjaW5jbHVkZSAi
VjhET01NYXAuaCIKICNpbmNsdWRlICJWOERlZGljYXRlZFdvcmtlckNvbnRleHQuaCIKICNpbmNs
dWRlICJWOFByb3h5LmgiCkBAIC0xNzQsNiArMTc1LDkgQEAgYm9vbCBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OmluaXRDbwogICAgIC8vIEluc2VydCB0aGUgb2JqZWN0IGluc3RhbmNlIGFz
IHRoZSBwcm90b3R5cGUgb2YgdGhlIHNoYWRvdyBvYmplY3QuCiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBnbG9iYWxPYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG1fY29u
dGV4dC0+R2xvYmFsKCktPkdldFByb3RvdHlwZSgpKTsKICAgICBnbG9iYWxPYmplY3QtPlNldFBy
b3RvdHlwZShqc1dvcmtlckNvbnRleHQpOworCisgICAgVjhCaW5kaW5nU2NyaXB0czo6cnVuU2Ny
aXB0cyhjb250ZXh0KTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZlclZpZXdDdXN0b21TY3JpcHQuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlC
dWZmZXJWaWV3Q3VzdG9tU2NyaXB0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZmZXJWaWV3Q3VzdG9tU2NyaXB0LmpzCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisoZnVuY3Rpb24oKSB7CisK
K3ZhciBvcHRpbWl6ZVNldE1ldGhvZCA9IGZ1bmN0aW9uKHR5cGUpCit7CisgICAgdHlwZS5wcm90
b3R5cGUuc2V0ID0gKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbmF0aXZlU2V0ID0gdHlwZS5w
cm90b3R5cGUuc2V0OworICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKHNvdXJjZSwgb2Zmc2V0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoc291cmNlLmNvbnN0cnVjdG9yID09PSBBcnJheSkg
eworICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOworICAgICAgICAg
ICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwOworICAgICAgICAgICAgICAgIGlmIChvZmZzZXQg
PCAwIHx8IG9mZnNldCArIGxlbmd0aCA+IHRoaXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBuYXRpdmVTZXQuY2FsbCh0aGlzLCBzb3VyY2UsIG9mZnNldCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspCisgICAgICAgICAgICAgICAgICAgIHRoaXNbaSArIG9mZnNldF0gPSBzb3VyY2VbaV07Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gbmF0aXZlU2V0LmNhbGwo
dGhpcywgc291cmNlLCBvZmZzZXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmOworICAg
IH0pKCk7Cit9OworCitvcHRpbWl6ZVNldE1ldGhvZChGbG9hdDMyQXJyYXkpOworb3B0aW1pemVT
ZXRNZXRob2QoRmxvYXQ2NEFycmF5KTsKK29wdGltaXplU2V0TWV0aG9kKEludDhBcnJheSk7Citv
cHRpbWl6ZVNldE1ldGhvZChJbnQxNkFycmF5KTsKK29wdGltaXplU2V0TWV0aG9kKEludDMyQXJy
YXkpOworb3B0aW1pemVTZXRNZXRob2QoVWludDhBcnJheSk7CitvcHRpbWl6ZVNldE1ldGhvZChV
aW50MTZBcnJheSk7CitvcHRpbWl6ZVNldE1ldGhvZChVaW50MzJBcnJheSk7CisKK30pKCk7CisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Fy
cmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NDczOCkKKysrIExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw4ICs0MywxNiBAQCBQQVNTIGFycmF5LnN1YmFycmF5KDIpLmxlbmd0
aCBpcyAoMzIgLyB0CiBQQVNTIGFycmF5LnN1YmFycmF5KC0yKS5sZW5ndGggaXMgMgogUEFTUyBh
cnJheS5zdWJhcnJheSgtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKQogUEFT
UyBTZXR0aW5nIEZsb2F0MzJBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNl
dCB3YXMgY2F1Z2h0Ci1QQVNTIFNldHRpbmcgRmxvYXQzMkFycmF5IGZyb20gZmFrZSBhcnJheSB3
aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBGbG9hdDMyQXJyYXkg
ZnJvbSBGbG9hdDMyQXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKK1BB
U1MgU2V0dGluZyBGbG9hdDMyQXJyYXkgZnJvbSBhcnJheSB3aXRoIG5lZ2F0aXZlIG9mZnNldCB3
YXMgY2F1Z2h0CitQQVNTIFNldHRpbmcgRmxvYXQzMkFycmF5IGZyb20gRmxvYXQzMkFycmF5IHdp
dGggbmVnYXRpdmUgb2Zmc2V0IHdhcyBjYXVnaHQKK1BBU1MgU2V0dGluZyBGbG9hdDMyQXJyYXkg
ZnJvbSBhcnJheSB3aXRoIC0wIG9mZnNldAorUEFTUyBTZXR0aW5nIEZsb2F0MzJBcnJheSBmcm9t
IEZsb2F0MzJBcnJheSB3aXRoIC0wIG9mZnNldAorUEFTUyBTZXR0aW5nIEZsb2F0MzJBcnJheSBm
cm9tIGFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0CitQQVNTIFNldHRpbmcgRmxvYXQzMkFycmF5
IGZyb20gRmxvYXQzMkFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0CitQQVNTIFNldHRpbmcgRmxv
YXQzMkFycmF5IGZyb20gYXJyYXkgd2l0aCBub24taW50ZWdlciBvZmZzZXQKK1BBU1MgU2V0dGlu
ZyBGbG9hdDMyQXJyYXkgZnJvbSBGbG9hdDMyQXJyYXkgd2l0aCBub24taW50ZWdlciBvZmZzZXQK
K1BBU1MgU2V0dGluZyBGbG9hdDMyQXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBs
ZW5ndGggd2FzIGNhdWdodAogUEFTUyBhcnJheS5nZXQgaXMgdW5kZWZpbmVkLgogUEFTUyBhcnJh
eS5zZXQoMCwgMSkgdGhyZXcgZXhjZXB0aW9uLgogUEFTUyB0ZXN0IHN0b3JpbmcgTmFOIGluIEZs
b2F0MzJBcnJheQpAQCAtODksOCArOTcsMTYgQEAgUEFTUyBhcnJheS5zdWJhcnJheSgyKS5sZW5n
dGggaXMgKDMyIC8gdAogUEFTUyBhcnJheS5zdWJhcnJheSgtMikubGVuZ3RoIGlzIDIKIFBBU1Mg
YXJyYXkuc3ViYXJyYXkoLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKIFBB
U1MgU2V0dGluZyBGbG9hdDY0QXJyYXkgZnJvbSBhcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZz
ZXQgd2FzIGNhdWdodAotUEFTUyBTZXR0aW5nIEZsb2F0NjRBcnJheSBmcm9tIGZha2UgYXJyYXkg
d2l0aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgRmxvYXQ2NEFycmF5
IGZyb20gRmxvYXQ2NEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CitQ
QVNTIFNldHRpbmcgRmxvYXQ2NEFycmF5IGZyb20gYXJyYXkgd2l0aCBuZWdhdGl2ZSBvZmZzZXQg
d2FzIGNhdWdodAorUEFTUyBTZXR0aW5nIEZsb2F0NjRBcnJheSBmcm9tIEZsb2F0NjRBcnJheSB3
aXRoIG5lZ2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0CitQQVNTIFNldHRpbmcgRmxvYXQ2NEFycmF5
IGZyb20gYXJyYXkgd2l0aCAtMCBvZmZzZXQKK1BBU1MgU2V0dGluZyBGbG9hdDY0QXJyYXkgZnJv
bSBGbG9hdDY0QXJyYXkgd2l0aCAtMCBvZmZzZXQKK1BBU1MgU2V0dGluZyBGbG9hdDY0QXJyYXkg
ZnJvbSBhcnJheSB3aXRoIGJvdW5kYXJ5IG9mZnNldAorUEFTUyBTZXR0aW5nIEZsb2F0NjRBcnJh
eSBmcm9tIEZsb2F0NjRBcnJheSB3aXRoIGJvdW5kYXJ5IG9mZnNldAorUEFTUyBTZXR0aW5nIEZs
b2F0NjRBcnJheSBmcm9tIGFycmF5IHdpdGggbm9uLWludGVnZXIgb2Zmc2V0CitQQVNTIFNldHRp
bmcgRmxvYXQ2NEFycmF5IGZyb20gRmxvYXQ2NEFycmF5IHdpdGggbm9uLWludGVnZXIgb2Zmc2V0
CitQQVNTIFNldHRpbmcgRmxvYXQ2NEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQg
bGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgYXJyYXkuZ2V0IGlzIHVuZGVmaW5lZC4KIFBBU1MgYXJy
YXkuc2V0KDAsIDEpIHRocmV3IGV4Y2VwdGlvbi4KIFBBU1MgdGVzdCBzdG9yaW5nIE5hTiBpbiBG
bG9hdDY0QXJyYXkKQEAgLTEzMSw4ICsxNDcsMTYgQEAgUEFTUyBhcnJheS5zdWJhcnJheSgyKS5s
ZW5ndGggaXMgKDMyIC8gdAogUEFTUyBhcnJheS5zdWJhcnJheSgtMikubGVuZ3RoIGlzIDIKIFBB
U1MgYXJyYXkuc3ViYXJyYXkoLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkK
IFBBU1MgU2V0dGluZyBJbnQ4QXJyYXkgZnJvbSBhcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZz
ZXQgd2FzIGNhdWdodAotUEFTUyBTZXR0aW5nIEludDhBcnJheSBmcm9tIGZha2UgYXJyYXkgd2l0
aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgSW50OEFycmF5IGZyb20g
SW50OEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CitQQVNTIFNldHRp
bmcgSW50OEFycmF5IGZyb20gYXJyYXkgd2l0aCBuZWdhdGl2ZSBvZmZzZXQgd2FzIGNhdWdodAor
UEFTUyBTZXR0aW5nIEludDhBcnJheSBmcm9tIEludDhBcnJheSB3aXRoIG5lZ2F0aXZlIG9mZnNl
dCB3YXMgY2F1Z2h0CitQQVNTIFNldHRpbmcgSW50OEFycmF5IGZyb20gYXJyYXkgd2l0aCAtMCBv
ZmZzZXQKK1BBU1MgU2V0dGluZyBJbnQ4QXJyYXkgZnJvbSBJbnQ4QXJyYXkgd2l0aCAtMCBvZmZz
ZXQKK1BBU1MgU2V0dGluZyBJbnQ4QXJyYXkgZnJvbSBhcnJheSB3aXRoIGJvdW5kYXJ5IG9mZnNl
dAorUEFTUyBTZXR0aW5nIEludDhBcnJheSBmcm9tIEludDhBcnJheSB3aXRoIGJvdW5kYXJ5IG9m
ZnNldAorUEFTUyBTZXR0aW5nIEludDhBcnJheSBmcm9tIGFycmF5IHdpdGggbm9uLWludGVnZXIg
b2Zmc2V0CitQQVNTIFNldHRpbmcgSW50OEFycmF5IGZyb20gSW50OEFycmF5IHdpdGggbm9uLWlu
dGVnZXIgb2Zmc2V0CitQQVNTIFNldHRpbmcgSW50OEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRo
IGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgYXJyYXkuZ2V0IGlzIHVuZGVmaW5lZC4K
IFBBU1MgYXJyYXkuc2V0KDAsIDEpIHRocmV3IGV4Y2VwdGlvbi4KIFBBU1MgdGVzdCBzdG9yaW5n
IE5hTiBpbiBJbnQ4QXJyYXkKQEAgLTE3OCw4ICsyMDIsMTYgQEAgUEFTUyBhcnJheS5zdWJhcnJh
eSgyKS5sZW5ndGggaXMgKDMyIC8gdAogUEFTUyBhcnJheS5zdWJhcnJheSgtMikubGVuZ3RoIGlz
IDIKIFBBU1MgYXJyYXkuc3ViYXJyYXkoLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBl
U2l6ZSkKIFBBU1MgU2V0dGluZyBJbnQxNkFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFu
Z2Ugb2Zmc2V0IHdhcyBjYXVnaHQKLVBBU1MgU2V0dGluZyBJbnQxNkFycmF5IGZyb20gZmFrZSBh
cnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBJbnQxNkFy
cmF5IGZyb20gSW50MTZBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodAor
UEFTUyBTZXR0aW5nIEludDE2QXJyYXkgZnJvbSBhcnJheSB3aXRoIG5lZ2F0aXZlIG9mZnNldCB3
YXMgY2F1Z2h0CitQQVNTIFNldHRpbmcgSW50MTZBcnJheSBmcm9tIEludDE2QXJyYXkgd2l0aCBu
ZWdhdGl2ZSBvZmZzZXQgd2FzIGNhdWdodAorUEFTUyBTZXR0aW5nIEludDE2QXJyYXkgZnJvbSBh
cnJheSB3aXRoIC0wIG9mZnNldAorUEFTUyBTZXR0aW5nIEludDE2QXJyYXkgZnJvbSBJbnQxNkFy
cmF5IHdpdGggLTAgb2Zmc2V0CitQQVNTIFNldHRpbmcgSW50MTZBcnJheSBmcm9tIGFycmF5IHdp
dGggYm91bmRhcnkgb2Zmc2V0CitQQVNTIFNldHRpbmcgSW50MTZBcnJheSBmcm9tIEludDE2QXJy
YXkgd2l0aCBib3VuZGFyeSBvZmZzZXQKK1BBU1MgU2V0dGluZyBJbnQxNkFycmF5IGZyb20gYXJy
YXkgd2l0aCBub24taW50ZWdlciBvZmZzZXQKK1BBU1MgU2V0dGluZyBJbnQxNkFycmF5IGZyb20g
SW50MTZBcnJheSB3aXRoIG5vbi1pbnRlZ2VyIG9mZnNldAorUEFTUyBTZXR0aW5nIEludDE2QXJy
YXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBh
cnJheS5nZXQgaXMgdW5kZWZpbmVkLgogUEFTUyBhcnJheS5zZXQoMCwgMSkgdGhyZXcgZXhjZXB0
aW9uLgogUEFTUyB0ZXN0IHN0b3JpbmcgTmFOIGluIEludDE2QXJyYXkKQEAgLTIyNSw4ICsyNTcs
MTYgQEAgUEFTUyBhcnJheS5zdWJhcnJheSgyKS5sZW5ndGggaXMgKDMyIC8gdAogUEFTUyBhcnJh
eS5zdWJhcnJheSgtMikubGVuZ3RoIGlzIDIKIFBBU1MgYXJyYXkuc3ViYXJyYXkoLTIxNDc0ODM2
NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKIFBBU1MgU2V0dGluZyBJbnQzMkFycmF5IGZy
b20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKLVBBU1MgU2V0dGlu
ZyBJbnQzMkFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVn
aHQKIFBBU1MgU2V0dGluZyBJbnQzMkFycmF5IGZyb20gSW50MzJBcnJheSB3aXRoIG91dC1vZi1y
YW5nZSBvZmZzZXQgd2FzIGNhdWdodAorUEFTUyBTZXR0aW5nIEludDMyQXJyYXkgZnJvbSBhcnJh
eSB3aXRoIG5lZ2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0CitQQVNTIFNldHRpbmcgSW50MzJBcnJh
eSBmcm9tIEludDMyQXJyYXkgd2l0aCBuZWdhdGl2ZSBvZmZzZXQgd2FzIGNhdWdodAorUEFTUyBT
ZXR0aW5nIEludDMyQXJyYXkgZnJvbSBhcnJheSB3aXRoIC0wIG9mZnNldAorUEFTUyBTZXR0aW5n
IEludDMyQXJyYXkgZnJvbSBJbnQzMkFycmF5IHdpdGggLTAgb2Zmc2V0CitQQVNTIFNldHRpbmcg
SW50MzJBcnJheSBmcm9tIGFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0CitQQVNTIFNldHRpbmcg
SW50MzJBcnJheSBmcm9tIEludDMyQXJyYXkgd2l0aCBib3VuZGFyeSBvZmZzZXQKK1BBU1MgU2V0
dGluZyBJbnQzMkFycmF5IGZyb20gYXJyYXkgd2l0aCBub24taW50ZWdlciBvZmZzZXQKK1BBU1Mg
U2V0dGluZyBJbnQzMkFycmF5IGZyb20gSW50MzJBcnJheSB3aXRoIG5vbi1pbnRlZ2VyIG9mZnNl
dAorUEFTUyBTZXR0aW5nIEludDMyQXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBs
ZW5ndGggd2FzIGNhdWdodAogUEFTUyBhcnJheS5nZXQgaXMgdW5kZWZpbmVkLgogUEFTUyBhcnJh
eS5zZXQoMCwgMSkgdGhyZXcgZXhjZXB0aW9uLgogUEFTUyB0ZXN0IHN0b3JpbmcgTmFOIGluIElu
dDMyQXJyYXkKQEAgLTI2Nyw4ICszMDcsMTYgQEAgUEFTUyBhcnJheS5zdWJhcnJheSgyKS5sZW5n
dGggaXMgKDMyIC8gdAogUEFTUyBhcnJheS5zdWJhcnJheSgtMikubGVuZ3RoIGlzIDIKIFBBU1Mg
YXJyYXkuc3ViYXJyYXkoLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKIFBB
U1MgU2V0dGluZyBVaW50OEFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0
IHdhcyBjYXVnaHQKLVBBU1MgU2V0dGluZyBVaW50OEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRo
IGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBVaW50OEFycmF5IGZyb20g
VWludDhBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodAorUEFTUyBTZXR0
aW5nIFVpbnQ4QXJyYXkgZnJvbSBhcnJheSB3aXRoIG5lZ2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0
CitQQVNTIFNldHRpbmcgVWludDhBcnJheSBmcm9tIFVpbnQ4QXJyYXkgd2l0aCBuZWdhdGl2ZSBv
ZmZzZXQgd2FzIGNhdWdodAorUEFTUyBTZXR0aW5nIFVpbnQ4QXJyYXkgZnJvbSBhcnJheSB3aXRo
IC0wIG9mZnNldAorUEFTUyBTZXR0aW5nIFVpbnQ4QXJyYXkgZnJvbSBVaW50OEFycmF5IHdpdGgg
LTAgb2Zmc2V0CitQQVNTIFNldHRpbmcgVWludDhBcnJheSBmcm9tIGFycmF5IHdpdGggYm91bmRh
cnkgb2Zmc2V0CitQQVNTIFNldHRpbmcgVWludDhBcnJheSBmcm9tIFVpbnQ4QXJyYXkgd2l0aCBi
b3VuZGFyeSBvZmZzZXQKK1BBU1MgU2V0dGluZyBVaW50OEFycmF5IGZyb20gYXJyYXkgd2l0aCBu
b24taW50ZWdlciBvZmZzZXQKK1BBU1MgU2V0dGluZyBVaW50OEFycmF5IGZyb20gVWludDhBcnJh
eSB3aXRoIG5vbi1pbnRlZ2VyIG9mZnNldAorUEFTUyBTZXR0aW5nIFVpbnQ4QXJyYXkgZnJvbSBm
YWtlIGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBhcnJheS5nZXQg
aXMgdW5kZWZpbmVkLgogUEFTUyBhcnJheS5zZXQoMCwgMSkgdGhyZXcgZXhjZXB0aW9uLgogUEFT
UyB0ZXN0IHN0b3JpbmcgTmFOIGluIFVpbnQ4QXJyYXkKQEAgLTMxNCw4ICszNjIsMTYgQEAgUEFT
UyBhcnJheS5zdWJhcnJheSgyKS5sZW5ndGggaXMgKDMyIC8gdAogUEFTUyBhcnJheS5zdWJhcnJh
eSgtMikubGVuZ3RoIGlzIDIKIFBBU1MgYXJyYXkuc3ViYXJyYXkoLTIxNDc0ODM2NDgpLmxlbmd0
aCBpcyAoMzIgLyB0eXBlU2l6ZSkKIFBBU1MgU2V0dGluZyBVaW50MTZBcnJheSBmcm9tIGFycmF5
IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0Ci1QQVNTIFNldHRpbmcgVWludDE2
QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFT
UyBTZXR0aW5nIFVpbnQxNkFycmF5IGZyb20gVWludDE2QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ug
b2Zmc2V0IHdhcyBjYXVnaHQKK1BBU1MgU2V0dGluZyBVaW50MTZBcnJheSBmcm9tIGFycmF5IHdp
dGggbmVnYXRpdmUgb2Zmc2V0IHdhcyBjYXVnaHQKK1BBU1MgU2V0dGluZyBVaW50MTZBcnJheSBm
cm9tIFVpbnQxNkFycmF5IHdpdGggbmVnYXRpdmUgb2Zmc2V0IHdhcyBjYXVnaHQKK1BBU1MgU2V0
dGluZyBVaW50MTZBcnJheSBmcm9tIGFycmF5IHdpdGggLTAgb2Zmc2V0CitQQVNTIFNldHRpbmcg
VWludDE2QXJyYXkgZnJvbSBVaW50MTZBcnJheSB3aXRoIC0wIG9mZnNldAorUEFTUyBTZXR0aW5n
IFVpbnQxNkFycmF5IGZyb20gYXJyYXkgd2l0aCBib3VuZGFyeSBvZmZzZXQKK1BBU1MgU2V0dGlu
ZyBVaW50MTZBcnJheSBmcm9tIFVpbnQxNkFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0CitQQVNT
IFNldHRpbmcgVWludDE2QXJyYXkgZnJvbSBhcnJheSB3aXRoIG5vbi1pbnRlZ2VyIG9mZnNldAor
UEFTUyBTZXR0aW5nIFVpbnQxNkFycmF5IGZyb20gVWludDE2QXJyYXkgd2l0aCBub24taW50ZWdl
ciBvZmZzZXQKK1BBU1MgU2V0dGluZyBVaW50MTZBcnJheSBmcm9tIGZha2UgYXJyYXkgd2l0aCBp
bnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNTIGFycmF5LmdldCBpcyB1bmRlZmluZWQuCiBQ
QVNTIGFycmF5LnNldCgwLCAxKSB0aHJldyBleGNlcHRpb24uCiBQQVNTIHRlc3Qgc3RvcmluZyBO
YU4gaW4gVWludDE2QXJyYXkKQEAgLTM2MSw4ICs0MTcsMTYgQEAgUEFTUyBhcnJheS5zdWJhcnJh
eSgyKS5sZW5ndGggaXMgKDMyIC8gdAogUEFTUyBhcnJheS5zdWJhcnJheSgtMikubGVuZ3RoIGlz
IDIKIFBBU1MgYXJyYXkuc3ViYXJyYXkoLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBl
U2l6ZSkKIFBBU1MgU2V0dGluZyBVaW50MzJBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0LW9mLXJh
bmdlIG9mZnNldCB3YXMgY2F1Z2h0Ci1QQVNTIFNldHRpbmcgVWludDMyQXJyYXkgZnJvbSBmYWtl
IGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFVpbnQz
MkFycmF5IGZyb20gVWludDMyQXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVn
aHQKK1BBU1MgU2V0dGluZyBVaW50MzJBcnJheSBmcm9tIGFycmF5IHdpdGggbmVnYXRpdmUgb2Zm
c2V0IHdhcyBjYXVnaHQKK1BBU1MgU2V0dGluZyBVaW50MzJBcnJheSBmcm9tIFVpbnQzMkFycmF5
IHdpdGggbmVnYXRpdmUgb2Zmc2V0IHdhcyBjYXVnaHQKK1BBU1MgU2V0dGluZyBVaW50MzJBcnJh
eSBmcm9tIGFycmF5IHdpdGggLTAgb2Zmc2V0CitQQVNTIFNldHRpbmcgVWludDMyQXJyYXkgZnJv
bSBVaW50MzJBcnJheSB3aXRoIC0wIG9mZnNldAorUEFTUyBTZXR0aW5nIFVpbnQzMkFycmF5IGZy
b20gYXJyYXkgd2l0aCBib3VuZGFyeSBvZmZzZXQKK1BBU1MgU2V0dGluZyBVaW50MzJBcnJheSBm
cm9tIFVpbnQzMkFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0CitQQVNTIFNldHRpbmcgVWludDMy
QXJyYXkgZnJvbSBhcnJheSB3aXRoIG5vbi1pbnRlZ2VyIG9mZnNldAorUEFTUyBTZXR0aW5nIFVp
bnQzMkFycmF5IGZyb20gVWludDMyQXJyYXkgd2l0aCBub24taW50ZWdlciBvZmZzZXQKK1BBU1Mg
U2V0dGluZyBVaW50MzJBcnJheSBmcm9tIGZha2UgYXJyYXkgd2l0aCBpbnZhbGlkIGxlbmd0aCB3
YXMgY2F1Z2h0CiBQQVNTIGFycmF5LmdldCBpcyB1bmRlZmluZWQuCiBQQVNTIGFycmF5LnNldCgw
LCAxKSB0aHJldyBleGNlcHRpb24uCiBQQVNTIHRlc3Qgc3RvcmluZyBOYU4gaW4gVWludDMyQXJy
YXkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11
bml0LXRlc3RzLmh0bWwJKHJldmlzaW9uIDk0NzM4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02MTYsMjAg
KzYxNiw5NSBAQCBmdW5jdGlvbiB0ZXN0U3ViYXJyYXlXaXRoRGVmYXVsdFZhbHVlcyh0CiAgICAg
fQogfQogCi1mdW5jdGlvbiB0ZXN0U2V0dGluZ0Zyb21BcnJheVdpdGhPdXRPZlJhbmdlT2Zmc2V0
KHR5cGUsIG5hbWUpIHsKLSAgICB2YXIgd2ViZ2xBcnJheSA9IG5ldyB0eXBlKDMyKTsKLSAgICB2
YXIgYXJyYXkgPSBbXTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICAg
ICAgYXJyYXkucHVzaChpKTsKK2Z1bmN0aW9uIHNldFdpdGhJbnZhbGlkT2Zmc2V0KHR5cGUsIG5h
bWUsIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVR5cGUsIHNv
dXJjZU5hbWUsIHNvdXJjZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9m
ZnNldCwgb2Zmc2V0RGVzY3JpcHRpb24pIHsKKyAgICB2YXIgd2ViZ2xBcnJheSA9IG5ldyB0eXBl
KGxlbmd0aCk7CisgICAgdmFyIHNvdXJjZUFycmF5ID0gbmV3IHNvdXJjZVR5cGUoc291cmNlTGVu
Z3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgaSsrKQorICAgICAg
ICBzb3VyY2VBcnJheVtpXSA9IDQyICsgaTsKKyAgICB0cnkgeworICAgICAgICB3ZWJnbEFycmF5
LnNldChzb3VyY2VBcnJheSwgb2Zmc2V0KTsKKyAgICAgICAgdGVzdEZhaWxlZCgiU2V0dGluZyAi
ICsgbmFtZSArICIgZnJvbSAiICsgc291cmNlTmFtZSArICIgd2l0aCAiICsKKyAgICAgICAgICAg
ICAgICAgICBvZmZzZXREZXNjcmlwdGlvbiArICIgb2Zmc2V0IHdhcyBub3QgY2F1Z2h0Iik7Cisg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJTZXR0aW5nICIgKyBuYW1lICsg
IiBmcm9tICIgKyBzb3VyY2VOYW1lICsgIiB3aXRoICIgKworICAgICAgICAgICAgICAgICAgIG9m
ZnNldERlc2NyaXB0aW9uICsgIiBvZmZzZXQgd2FzIGNhdWdodCIpOwogICAgIH0KK30KKworZnVu
Y3Rpb24gc2V0V2l0aFZhbGlkT2Zmc2V0KHR5cGUsIG5hbWUsIGxlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzb3VyY2VUeXBlLCBzb3VyY2VOYW1lLCBzb3VyY2VMZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBvZmZzZXREZXNjcmlwdGlvbikgewor
ICAgIHJ1bm5pbmcoIlNldHRpbmcgIiArIG5hbWUgKyAiIGZyb20gIiArIHNvdXJjZU5hbWUgKyAi
IHdpdGggIiArCisgICAgICAgICAgICBvZmZzZXREZXNjcmlwdGlvbiArICIgb2Zmc2V0Iik7Cisg
ICAgdmFyIHdlYmdsQXJyYXkgPSBuZXcgdHlwZShsZW5ndGgpOworICAgIHZhciBzb3VyY2VBcnJh
eSA9IG5ldyBzb3VyY2VUeXBlKHNvdXJjZUxlbmd0aCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBzb3VyY2VMZW5ndGg7IGkrKykKKyAgICAgICAgc291cmNlQXJyYXlbaV0gPSA0MiArIGk7CiAg
ICAgdHJ5IHsKLSAgICAgICAgd2ViZ2xBcnJheS5zZXQoYXJyYXksIDB4N0ZGRkZGRjgpOwotICAg
ICAgICB0ZXN0RmFpbGVkKCJTZXR0aW5nICIgKyBuYW1lICsgIiBmcm9tIGFycmF5IHdpdGggb3V0
LW9mLXJhbmdlIG9mZnNldCB3YXMgbm90IGNhdWdodCIpOworICAgICAgICB3ZWJnbEFycmF5LnNl
dChzb3VyY2VBcnJheSwgb2Zmc2V0KTsKKyAgICAgICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZz
ZXQpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICBhc3NlcnRFcSgiRWxlbWVudCAiICsgaSArIG9mZnNldCwgc291cmNlQXJyYXlb
aV0sIHdlYmdsQXJyYXlbaSArIG9mZnNldF0pOworICAgICAgICB9CisgICAgICAgIHBhc3MoKTsK
ICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIHRlc3RQYXNzZWQoIlNldHRpbmcgIiArIG5hbWUg
KyAiIGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQiKTsKKyAg
ICAgICAgZmFpbChlKTsKICAgICB9CiB9CiAKKworZnVuY3Rpb24gdGVzdFNldHRpbmdGcm9tQXJy
YXlXaXRoT3V0T2ZSYW5nZU9mZnNldCh0eXBlLCBuYW1lKSB7CisgICAgc2V0V2l0aEludmFsaWRP
ZmZzZXQodHlwZSwgbmFtZSwgMzIsIEFycmF5LCAiYXJyYXkiLCAxNiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAweDdGRkZGRkY4LCAib3V0LW9mLXJhbmdlIik7Cit9CisKK2Z1bmN0aW9uIHRl
c3RTZXR0aW5nRnJvbVR5cGVkQXJyYXlXaXRoT3V0T2ZSYW5nZU9mZnNldCh0eXBlLCBuYW1lKSB7
CisgICAgc2V0V2l0aEludmFsaWRPZmZzZXQodHlwZSwgbmFtZSwgMzIsIHR5cGUsIG5hbWUsIDE2
LAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRjgsICJvdXQtb2YtcmFuZ2UiKTsK
K30KKworZnVuY3Rpb24gdGVzdFNldHRpbmdGcm9tQXJyYXlXaXRoTmVnYXRpdmVPZmZzZXQodHlw
ZSwgbmFtZSkgeworICAgIHNldFdpdGhJbnZhbGlkT2Zmc2V0KHR5cGUsIG5hbWUsIDMyLCBBcnJh
eSwgImFycmF5IiwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTEsICJuZWdhdGl2ZSIp
OworfQorCitmdW5jdGlvbiB0ZXN0U2V0dGluZ0Zyb21UeXBlZEFycmF5V2l0aE5lZ2F0aXZlT2Zm
c2V0KHR5cGUsIG5hbWUpIHsKKyAgICBzZXRXaXRoSW52YWxpZE9mZnNldCh0eXBlLCBuYW1lLCAz
MiwgdHlwZSwgbmFtZSwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTEsICJuZWdhdGl2
ZSIpOworfQorCitmdW5jdGlvbiB0ZXN0U2V0dGluZ0Zyb21BcnJheVdpdGhNaW51c1plcm9PZmZz
ZXQodHlwZSwgbmFtZSkgeworICAgIHNldFdpdGhWYWxpZE9mZnNldCh0eXBlLCBuYW1lLCAzMiwg
QXJyYXksICJhcnJheSIsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAtMCwgIi0wIik7Cit9
CisKK2Z1bmN0aW9uIHRlc3RTZXR0aW5nRnJvbVR5cGVkQXJyYXlXaXRoTWludXNaZXJvT2Zmc2V0
KHR5cGUsIG5hbWUpIHsKKyAgICBzZXRXaXRoVmFsaWRPZmZzZXQodHlwZSwgbmFtZSwgMzIsIHR5
cGUsIG5hbWUsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAtMCwgIi0wIik7Cit9CisKK2Z1
bmN0aW9uIHRlc3RTZXR0aW5nRnJvbUFycmF5V2l0aEJvdW5kYXJ5T2Zmc2V0KHR5cGUsIG5hbWUp
IHsKKyAgICBzZXRXaXRoVmFsaWRPZmZzZXQodHlwZSwgbmFtZSwgMzIsIEFycmF5LCAiYXJyYXki
LCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgMTYsICJib3VuZGFyeSIpOworfQorCitmdW5j
dGlvbiB0ZXN0U2V0dGluZ0Zyb21UeXBlZEFycmF5V2l0aEJvdW5kYXJ5T2Zmc2V0KHR5cGUsIG5h
bWUpIHsKKyAgICBzZXRXaXRoVmFsaWRPZmZzZXQodHlwZSwgbmFtZSwgMzIsIHR5cGUsIG5hbWUs
IDE2LAorICAgICAgICAgICAgICAgICAgICAgICAxNiwgImJvdW5kYXJ5Iik7Cit9CisKK2Z1bmN0
aW9uIHRlc3RTZXR0aW5nRnJvbUFycmF5V2l0aE5vbkludGVnZXJPZmZzZXQodHlwZSwgbmFtZSkg
eworICAgIHNldFdpdGhWYWxpZE9mZnNldCh0eXBlLCBuYW1lLCAzMiwgQXJyYXksICJhcnJheSIs
IDE2LAorICAgICAgICAgICAgICAgICAgICAgICAxNi45OTksICJub24taW50ZWdlciIpOworfQor
CitmdW5jdGlvbiB0ZXN0U2V0dGluZ0Zyb21UeXBlZEFycmF5V2l0aE5vbkludGVnZXJPZmZzZXQo
dHlwZSwgbmFtZSkgeworICAgIHNldFdpdGhWYWxpZE9mZnNldCh0eXBlLCBuYW1lLCAzMiwgdHlw
ZSwgbmFtZSwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgIDE2Ljk5OSwgIm5vbi1pbnRlZ2Vy
Iik7Cit9CisKIGZ1bmN0aW9uIHRlc3RTZXR0aW5nRnJvbUZha2VBcnJheVdpdGhPdXRPZlJhbmdl
TGVuZ3RoKHR5cGUsIG5hbWUpIHsKICAgICB2YXIgd2ViZ2xBcnJheSA9IG5ldyB0eXBlKDMyKTsK
ICAgICB2YXIgYXJyYXkgPSB7fTsKQEAgLTY0MiwxOSArNzE3LDYgQEAgZnVuY3Rpb24gdGVzdFNl
dHRpbmdGcm9tRmFrZUFycmF5V2l0aE91dAogICAgIH0KIH0KIAotZnVuY3Rpb24gdGVzdFNldHRp
bmdGcm9tVHlwZWRBcnJheVdpdGhPdXRPZlJhbmdlT2Zmc2V0KHR5cGUsIG5hbWUpIHsKLSAgICB2
YXIgd2ViZ2xBcnJheSA9IG5ldyB0eXBlKDMyKTsKLSAgICB2YXIgc3JjQXJyYXkgPSBuZXcgdHlw
ZSgxNik7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgICAgIHNyY0Fy
cmF5W2ldID0gaTsKLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAgICAgd2ViZ2xBcnJheS5zZXQoc3Jj
QXJyYXksIDB4N0ZGRkZGRjgpOwotICAgICAgICB0ZXN0RmFpbGVkKCJTZXR0aW5nICIgKyBuYW1l
ICsgIiBmcm9tICIgKyBuYW1lICsgIiB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIG5vdCBj
YXVnaHQiKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIHRlc3RQYXNzZWQoIlNldHRpbmcg
IiArIG5hbWUgKyAiIGZyb20gIiArIG5hbWUgKyAiIHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3
YXMgY2F1Z2h0Iik7Ci0gICAgfQotfQogCiBmdW5jdGlvbiBuZWdhdGl2ZVRlc3RHZXRBbmRTZXRN
ZXRob2RzKHR5cGUsIG5hbWUpIHsKICAgICBhcnJheSA9IG5ldyB0eXBlKFsyLCAzXSk7CkBAIC04
NzIsOCArOTM0LDE2IEBAIGZ1bmN0aW9uIHJ1blRlc3RzKCkgewogICAgIHRlc3RTdWJhcnJheVdp
dGhPdXRPZlJhbmdlVmFsdWVzKHR5cGUsIG5hbWUsIHRlc3RDYXNlLmVsZW1lbnRTaXplSW5CeXRl
cyk7CiAgICAgdGVzdFN1YmFycmF5V2l0aERlZmF1bHRWYWx1ZXModHlwZSwgbmFtZSwgdGVzdENh
c2UuZWxlbWVudFNpemVJbkJ5dGVzKTsKICAgICB0ZXN0U2V0dGluZ0Zyb21BcnJheVdpdGhPdXRP
ZlJhbmdlT2Zmc2V0KHR5cGUsIG5hbWUpOwotICAgIHRlc3RTZXR0aW5nRnJvbUZha2VBcnJheVdp
dGhPdXRPZlJhbmdlTGVuZ3RoKHR5cGUsIG5hbWUpOwogICAgIHRlc3RTZXR0aW5nRnJvbVR5cGVk
QXJyYXlXaXRoT3V0T2ZSYW5nZU9mZnNldCh0eXBlLCBuYW1lKTsKKyAgICB0ZXN0U2V0dGluZ0Zy
b21BcnJheVdpdGhOZWdhdGl2ZU9mZnNldCh0eXBlLCBuYW1lKTsKKyAgICB0ZXN0U2V0dGluZ0Zy
b21UeXBlZEFycmF5V2l0aE5lZ2F0aXZlT2Zmc2V0KHR5cGUsIG5hbWUpOworICAgIHRlc3RTZXR0
aW5nRnJvbUFycmF5V2l0aE1pbnVzWmVyb09mZnNldCh0eXBlLCBuYW1lKTsKKyAgICB0ZXN0U2V0
dGluZ0Zyb21UeXBlZEFycmF5V2l0aE1pbnVzWmVyb09mZnNldCh0eXBlLCBuYW1lKTsKKyAgICB0
ZXN0U2V0dGluZ0Zyb21BcnJheVdpdGhCb3VuZGFyeU9mZnNldCh0eXBlLCBuYW1lKTsKKyAgICB0
ZXN0U2V0dGluZ0Zyb21UeXBlZEFycmF5V2l0aEJvdW5kYXJ5T2Zmc2V0KHR5cGUsIG5hbWUpOwor
ICAgIHRlc3RTZXR0aW5nRnJvbUFycmF5V2l0aE5vbkludGVnZXJPZmZzZXQodHlwZSwgbmFtZSk7
CisgICAgdGVzdFNldHRpbmdGcm9tVHlwZWRBcnJheVdpdGhOb25JbnRlZ2VyT2Zmc2V0KHR5cGUs
IG5hbWUpOworICAgIHRlc3RTZXR0aW5nRnJvbUZha2VBcnJheVdpdGhPdXRPZlJhbmdlTGVuZ3Ro
KHR5cGUsIG5hbWUpOwogICAgIG5lZ2F0aXZlVGVzdEdldEFuZFNldE1ldGhvZHModHlwZSwgbmFt
ZSk7CiAgICAgdGVzdE5hTkNvbnZlcnNpb24odHlwZSwgbmFtZSk7CiAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>