<?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>23740</bug_id>
          
          <creation_ts>2009-02-04 14:01:24 -0800</creation_ts>
          <short_desc>table-layout: fixed overflow not painted in normal order</short_desc>
          <delta_ts>2009-02-24 17:31:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://m8y.org/tmp/testcase103.xhtml</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="nemo">bugs</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>108324</commentid>
    <comment_count>0</comment_count>
    <who name="nemo">bugs</who>
    <bug_when>2009-02-04 14:01:24 -0800</bug_when>
    <thetext>As described in http://m8y.org/tmp/testcase103.xhtml, after initially blaming Webkit, I decided that Firefox&apos; behaviour, even though it had been as I had initially expected, was inconsistent.

However, after bz pointed out the relevant portion of the spec on painting order, I understood that, in fact, Webkit appears to be ignoring the painting of backgrounds first, then text.

And that, in fact, I&apos;ve come to expect that behaviour throughout the web when content overflows.

Furthermore, bz pointed out that normally webkit does the right thing.

He offered the following data URI as a demonstration.
data:text/html,&lt;div style=&quot;background: red; color: white; height: 100px; width: 200px&quot;&gt;Text&lt;/div&gt;&lt;div style=&quot;margin-top: -100px; background: green; width: 100px; height: 100px&quot;&gt;&lt;/div&gt;

The workaround is to specify an explicit z-index for webkit, which fortunately I can do in this case fairly easily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110668</commentid>
    <comment_count>1</comment_count>
      <attachid>27900</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-02-23 18:41:45 -0800</bug_when>
    <thetext>Created attachment 27900
Patch to fix stacking order issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110794</commentid>
    <comment_count>2</comment_count>
      <attachid>27900</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-24 12:55:31 -0800</bug_when>
    <thetext>Comment on attachment 27900
Patch to fix stacking order issue

Hyatt and I talked about this a lot over IRC.  He&apos;s gonna update the patch and then I&apos;ll make an official review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110832</commentid>
    <comment_count>3</comment_count>
    <who name="nemo">bugs</who>
    <bug_when>2009-02-24 15:03:42 -0800</bug_when>
    <thetext>Sweet. Thanks.
I thought initially this was going to end up a WONTFIX.

Nice to not have to worry about it.  It did suck up an afternoon figuring out what the heck was going on.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110846</commentid>
    <comment_count>4</comment_count>
      <attachid>27940</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-02-24 15:56:26 -0800</bug_when>
    <thetext>Created attachment 27940
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110847</commentid>
    <comment_count>5</comment_count>
      <attachid>27940</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-24 16:01:35 -0800</bug_when>
    <thetext>Comment on attachment 27940
Patch

The changelog doens&apos;t mention your isMask() changes.  your test cases are missing newlines at the end.  you added some spaces after shouldBeNormalFlowOnly which you didn&apos;t mean to.

Otherwise this looks fine, as far as I can tell.  You&apos;ll need a ChangeLog for the LayoutTests directory as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110865</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-02-24 17:31:23 -0800</bug_when>
    <thetext>Fixed in r41203.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27900</attachid>
            <date>2009-02-23 18:41:45 -0800</date>
            <delta_ts>2009-02-24 12:55:31 -0800</delta_ts>
            <desc>Patch to fix stacking order issue</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>38986</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQxMTY2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODAgQEAKKzIwMDktMDIt
MjMgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzc0MCwgcGFpbnRpbmcgb3JkZXIgd3JvbmcgZm9yIG5vcm1hbCBmbG93IGVs
ZW1lbnRzIHdpdGggb3ZlcmZsb3c6IGhpZGRlbgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCByZXdvcmtzIHRoZSBwYWludGluZyBvZiBvdmVyZmxvdy4gIFRoZXJlIGlzIG5vdyB0aGUgY29u
Y2VwdCBvZiBhICJzZWxmLXBhaW50aW5nIGxheWVyLiIgIEFsbAorICAgICAgICBsYXllcnMgYXJl
IGNvbnNpZGVyZWQgdG8gYmUgc2VsZi1wYWludGluZyBleGNlcHQgZm9yIG92ZXJmbG93IGxheWVy
cyB0aGF0IGFyZSBub3JtYWwgZmxvdyAoYW5kIHRoYXQgZG9uJ3QgaGF2ZQorICAgICAgICByZWZs
ZWN0aW9ucyBvciBtYXNrcykuCisgICAgICAgIAorICAgICAgICBJZiBhbiBvdmVyZmxvdyBsYXll
ciBpcyBub3Qgc2VsZi1wYWludGluZywgdGhlbiBpdCBlbmRzIHVwIHBhaW50ZWQgYnkgaXRzIHBh
cmVudCBqdXN0IGxpa2UgYW55IG90aGVyIG5vcm1hbCBmbG93IG9iamVjdC4KKyAgICAgICAgVGhl
IG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBjbGlwIGhhcyB0byBiZSBwdXNoZWQgYW5kIHBv
cHBlZCB3aGVuIHBhaW50aW5nIHRoZSBvYmplY3QncyBjaGlsZHJlbi4KKyAgICAgICAgCisgICAg
ICAgIFRoZSBsaWdodHdlaWdodCBjbGlwcGluZyBzY2hlbWUgdXNlZCBmb3IgY29udHJvbHMgaGFz
IGJlZW4gZXh0ZW5kZWQgdG8gY292ZXIgb3ZlcmZsb3cgbm93IGluIHRoaXMgc2ltcGxpZmllZCBj
YXNlLiAgV2l0aAorICAgICAgICB0aGUgY29kZSBjb25zb2xpZGF0ZWQgaW50byByZXVzYWJsZSBw
dXNoL3BvcCBmdW5jdGlvbnMsIGFsbCBvZiB0aGUgcmVuZGVyZXJzIHRoYXQgdXNlIG92ZXJmbG93
IGhhdmUgYmVlbiBwYXRjaGVkIHRvCisgICAgICAgIHVzZSB0aGUgbmV3IGZ1bmN0aW9ucy4KKyAg
ICAgICAgCisgICAgICAgIEhpdCB0ZXN0aW5nIGhhcyBhbHNvIGJlZW4gcGF0Y2hlZCB0byBjaGVj
ayB0aGUgb3ZlcmZsb3cgY2xpcCByZWN0IGZpcnN0IGJlZm9yZSByZWN1cnJpbmcgaW50byBjaGls
ZHJlbi4KKyAgICAgICAgCisgICAgICAgIFNjcm9sbGJhciBwYWludCBoYXMgYmVlbiBtb3ZlZCBp
bnRvIFJlbmRlckJsb2NrIGZvciBub3csIHNpbmNlIG5vbmUgb2YgdGhlIHRhYmxlIG9iamVjdHMg
c3VwcG9ydCBzY3JvbGxiYXJzCisgICAgICAgIHlldCwgYW5kIHNjcm9sbGJhciBoaXQgdGVzdGlu
ZyB3YXMgYWxyZWFkeSB0aGVyZSBhbnl3YXkuICBOb3cgdGhlIHR3byBjb2RlIHBhdGhzIGFyZSBt
b3JlIHN5bW1ldHJpY2FsLgorICAgICAgICAKKyAgICAgICAgQSBjb3VwbGUgb2YgdGVzdCBjYXNl
cyBoYXZlIGJlZW4gYWRkZWQgdG8gZmFzdC9vdmVyZmxvdyB0byB0ZXN0IHRoZSBzdGFja2luZyBv
cmRlci4gIE1hbnkgbGF5b3V0IHRlc3QgcmVzdWx0cyBoYXZlIGNoYW5nZWQKKyAgICAgICAgYWxz
bywgc2luY2UgRHVtcFJlbmRlclRyZWUgbm93IGR1bXBzIGluIHRoZSBuZXcgc3RhY2sgb3JkZXIg
YWxzby4KKyAKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVGbG93Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZXBhaW50T3ZlcmhhbmdpbmdG
bG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpwYWludE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6cGFpbnRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omluc2VydEZs
b2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpmbG9hdFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxvd2VzdFBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyaWdodG1vc3RQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6bGVmdG1vc3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpoaXRUZXN0Q29udGVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OnB1c2hDb250ZW50c0NsaXApOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94Ojpwb3BDb250ZW50c0NsaXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3gu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRPYmplY3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6aGFzU2VsZlBhaW50aW5nTGF5ZXIpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpzaG91bGRCZU5vcm1hbEZsb3dPbmx5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1NlbGZQYWludGluZ0xheWVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlOjpwYWludE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93Ojpub2RlQXRQ
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6cGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9u
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUxheWVycyk6CisKIDIwMDktMDItMjMgIEp1bGllbiBD
aGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCkluZGV4OiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA0MTA5MykKKysrIHJl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUzLDcgKzU1Myw3
IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKIHsKICAgICAvLyBD
aGVjayBjaGlsZHJlbiBmaXJzdC4KICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGxhc3RDaGls
ZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldk9uTGluZSgpKSB7Ci0gICAgICAgIGlmICghY3Vy
ci0+cmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSAmJiBjdXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIHgsIHksIHR4LCB0eSkpIHsKKyAgICAgICAgaWYgKChjdXJyLT5yZW5kZXJlcigpLT5p
c1RleHQoKSB8fCAhY3Vyci0+Ym94TW9kZWxPYmplY3QoKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIo
KSkgJiYgY3Vyci0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHkpKSB7
CiAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50
UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludChSZW5kZXJP
YmplY3Q6OgogICAgICAgICAgICAgLy8gb3V0bGluZXMuCiAgICAgICAgICAgICBpZiAocmVuZGVy
ZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgJiYgcmVuZGVyZXIoKS0+aGFz
T3V0bGluZSgpICYmICFpc1Jvb3RJbmxpbmVCb3goKSkgewogICAgICAgICAgICAgICAgIFJlbmRl
cklubGluZSogaW5saW5lRmxvdyA9IHRvUmVuZGVySW5saW5lKHJlbmRlcmVyKCkpOwotICAgICAg
ICAgICAgICAgIGlmICgoaW5saW5lRmxvdy0+Y29udGludWF0aW9uKCkgfHwgaW5saW5lRmxvdy0+
aXNJbmxpbmVDb250aW51YXRpb24oKSkgJiYgIXJlbmRlcmVyKCktPmhhc0xheWVyKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoKGlubGluZUZsb3ctPmNvbnRpbnVhdGlvbigpIHx8IGlubGluZUZs
b3ctPmlzSW5saW5lQ29udGludWF0aW9uKCkpICYmICFib3hNb2RlbE9iamVjdCgpLT5oYXNTZWxm
UGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBvdXJzZWx2ZXMg
dG8gdGhlIGNvbnRhaW5pbmcgYmxvY2sgb2YgdGhlIGVudGlyZSBjb250aW51YXRpb24gc28gdGhh
dCBpdCBjYW4KICAgICAgICAgICAgICAgICAgICAgLy8gcGFpbnQgdXMgYXRvbWljYWxseS4KICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gcmVuZGVyZXIoKS0+Y29udGFp
bmluZ0Jsb2NrKCktPmNvbnRhaW5pbmdCbG9jaygpOwpAQCAtNjI0LDcgKzYyNCw3IEBAIHZvaWQg
SW5saW5lRmxvd0JveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjoKICAgICAvLyAzLiBQYWludCBvdXIg
Y2hpbGRyZW4uCiAgICAgaWYgKHBhaW50UGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSB7
CiAgICAgICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJy
ID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnItPnJlbmRlcmVy
KCktPmhhc0xheWVyKCkpCisgICAgICAgICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS0+aXNUZXh0
KCkgfHwgIWN1cnItPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpCiAg
ICAgICAgICAgICAgICAgY3Vyci0+cGFpbnQoY2hpbGRJbmZvLCB0eCwgdHkpOwogICAgICAgICB9
CiAgICAgfQpJbmRleDogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA0MTE1MykKKysrIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDcsNyArMTU0Nyw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2EKICAgICAgICAgICAgIC8vIE9ubHkg
cmVwYWludCB0aGUgb2JqZWN0IGlmIGl0IGlzIG92ZXJoYW5naW5nLCBpcyBub3QgaW4gaXRzIG93
biBsYXllciwgYW5kCiAgICAgICAgICAgICAvLyBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8gcGFp
bnQgKG1fc2hvdWxkUGFpbnQgaXMgc2V0KS4gV2hlbiBwYWludEFsbERlc2NlbmRhbnRzIGlzIHRy
dWUsIHRoZSBsYXR0ZXIKICAgICAgICAgICAgIC8vIGNvbmRpdGlvbiBpcyByZXBsYWNlZCB3aXRo
IGJlaW5nIGEgZGVzY2VuZGFudCBvZiB1cy4KLSAgICAgICAgICAgIGlmIChyLT5tX2JvdHRvbSA+
IGhlaWdodCgpICYmIChwYWludEFsbERlc2NlbmRhbnRzICYmIHItPm1fcmVuZGVyZXItPmlzRGVz
Y2VuZGFudE9mKHRoaXMpIHx8IHItPm1fc2hvdWxkUGFpbnQpICYmICFyLT5tX3JlbmRlcmVyLT5o
YXNMYXllcigpKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHItPm1fYm90dG9t
ID4gaGVpZ2h0KCkgJiYgKHBhaW50QWxsRGVzY2VuZGFudHMgJiYgci0+bV9yZW5kZXJlci0+aXNE
ZXNjZW5kYW50T2YodGhpcykgfHwgci0+bV9zaG91bGRQYWludCkgJiYgIXItPm1fcmVuZGVyZXIt
Pmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgci0+bV9yZW5kZXJlci0+cmVwYWludCgpOwogICAgICAgICAgICAgICAgIHItPm1fcmVuZGVy
ZXItPnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cygpOwogICAgICAgICAgICAgfQpAQCAtMTU3NCwz
NiArMTU3NCwxNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCB1c2VDb250cm9sQ2xpcCA9IHBo
YXNlICE9IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQgJiYgcGhhc2UgIT0gUGFpbnRQaGFzZVNl
bGZPdXRsaW5lICYmIHBoYXNlICE9IFBhaW50UGhhc2VNYXNrICYmIGhhc0NvbnRyb2xDbGlwKCk7
Ci0KLSAgICAvLyBQdXNoIGEgY2xpcC4KLSAgICBpZiAodXNlQ29udHJvbENsaXApIHsKLSAgICAg
ICAgaWYgKHBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lKQotICAgICAgICAgICAgcGFpbnRJbmZv
LnBoYXNlID0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXM7Ci0gICAgICAgIGVsc2UgaWYgKHBoYXNl
ID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkgewotICAgICAgICAgICAgcGFpbnRJ
bmZvLnBoYXNlID0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZDsKLSAgICAgICAgICAgIHBhaW50
T2JqZWN0KHBhaW50SW5mbywgdHgsIHR5KTsKLSAgICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9
IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7Ci0gICAgICAgIH0KLSAgICAgICAgSW50
UmVjdCBjbGlwUmVjdChjb250cm9sQ2xpcFJlY3QodHgsIHR5KSk7Ci0gICAgICAgIGlmIChjbGlw
UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKGNsaXBSZWN0
KTsKLSAgICB9Ci0KKyAgICBib29sIHB1c2hlZENsaXAgPSBwdXNoQ29udGVudHNDbGlwKHBhaW50
SW5mbywgdHgsIHR5KTsKICAgICBwYWludE9iamVjdChwYWludEluZm8sIHR4LCB0eSk7Ci0gICAg
Ci0gICAgLy8gUG9wIHRoZSBjbGlwLgotICAgIGlmICh1c2VDb250cm9sQ2xpcCkgewotICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgICAgICBpZiAocGhhc2UgPT0gUGFp
bnRQaGFzZU91dGxpbmUpIHsKLSAgICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhh
c2VTZWxmT3V0bGluZTsKLSAgICAgICAgICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgdHgsIHR5
KTsKLSAgICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9IHBoYXNlOwotICAgICAgICB9IGVsc2Ug
aWYgKHBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkKLSAgICAgICAgICAg
IHBhaW50SW5mby5waGFzZSA9IHBoYXNlOwotICAgIH0KKyAgICBpZiAocHVzaGVkQ2xpcCkKKyAg
ICAgICAgcG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIHR4LCB0eSk7CisKKyAgICAv
LyBPdXIgc2Nyb2xsYmFyIHdpZGdldHMgcGFpbnQgZXhhY3RseSB3aGVuIHdlIHRlbGwgdGhlbSB0
bywgc28gdGhhdCB0aGV5IHdvcmsgcHJvcGVybHkgd2l0aAorICAgIC8vIHotaW5kZXguICBXZSBw
YWludCBhZnRlciB3ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRlciwgc28gdGhhdCB0aGUg
c2Nyb2xsYmFycyB3aWxsCisgICAgLy8gc2l0IGFib3ZlIHRoZSBiYWNrZ3JvdW5kL2JvcmRlci4K
KyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgKHBoYXNlID09IFBhaW50UGhhc2VCbG9ja0Jh
Y2tncm91bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kKSkKKyAg
ICAgICAgbGF5ZXIoKS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0LCB0
eCwgdHksIHBhaW50SW5mby5yZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1
bW5SdWxlcyhQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCkBAIC0xNzI3LDcg
KzE3MDcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXll
cigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpKQorICAgICAgICBpZiAoIWNoaWxkLT5oYXNTZWxm
UGFpbnRpbmdMYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpKQogICAgICAgICAgICAgY2hp
bGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2UtYnJl
YWstYWZ0ZXI6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFpbC4KQEAgLTE4
MTUsNyArMTc5NSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYK
ICAgICBpZiAoKHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgcGFpbnRQaGFzZSA9
PSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcykpIHsKICAgICAgICAgaWYgKGlubGluZUNvbnRpbnVh
dGlvbigpICYmIGlubGluZUNvbnRpbnVhdGlvbigpLT5oYXNPdXRsaW5lKCkgJiYgaW5saW5lQ29u
dGludWF0aW9uKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7CiAgICAgICAg
ICAgICBSZW5kZXJJbmxpbmUqIGlubGluZVJlbmRlcmVyID0gdG9SZW5kZXJJbmxpbmUoaW5saW5l
Q29udGludWF0aW9uKCktPm5vZGUoKS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICBpZiAoIWlu
bGluZVJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICAgICAgaWYgKCFpbmxpbmVSZW5kZXJl
ci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKICAgICAgICAgICAgICAgICBjb250YWluaW5nQmxv
Y2soKS0+YWRkQ29udGludWF0aW9uV2l0aE91dGxpbmUoaW5saW5lUmVuZGVyZXIpOwogICAgICAg
ICAgICAgZWxzZSBpZiAoIWlubGluZVJlbmRlcmVyLT5maXJzdExpbmVCb3goKSkKICAgICAgICAg
ICAgICAgICBpbmxpbmVSZW5kZXJlci0+cGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCB0
eCAtIHgoKSArIGlubGluZVJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKS0+eCgpLApAQCAtMTg0
Miw3ICsxODIyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMoUGFpbnRJbmZvJgog
ICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0
aW5nT2JqZWN0cyk7CiAgICAgZm9yICg7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgewogICAg
ICAgICAvLyBPbmx5IHBhaW50IHRoZSBvYmplY3QgaWYgb3VyIG1fc2hvdWxkUGFpbnQgZmxhZyBp
cyBzZXQuCi0gICAgICAgIGlmIChyLT5tX3Nob3VsZFBhaW50ICYmICFyLT5tX3JlbmRlcmVyLT5o
YXNMYXllcigpKSB7CisgICAgICAgIGlmIChyLT5tX3Nob3VsZFBhaW50ICYmICFyLT5tX3JlbmRl
cmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICBQYWludEluZm8gY3Vy
cmVudFBhaW50SW5mbyhwYWludEluZm8pOwogICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5w
aGFzZSA9IHByZXNlcnZlUGhhc2UgPyBwYWludEluZm8ucGhhc2UgOiBQYWludFBoYXNlQmxvY2tC
YWNrZ3JvdW5kOwogICAgICAgICAgICAgaW50IGN1cnJlbnRUWCA9IHR4ICsgci0+bV9sZWZ0IC0g
ci0+bV9yZW5kZXJlci0+eCgpICsgci0+bV9yZW5kZXJlci0+bWFyZ2luTGVmdCgpOwpAQCAtMjM3
Niw3ICsyMzU2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUgog
ICAgIG5ld09iai0+bV90b3AgPSAtMTsKICAgICBuZXdPYmotPm1fYm90dG9tID0gLTE7CiAgICAg
bmV3T2JqLT5tX3dpZHRoID0gby0+d2lkdGgoKSArIG8tPm1hcmdpbkxlZnQoKSArIG8tPm1hcmdp
blJpZ2h0KCk7Ci0gICAgbmV3T2JqLT5tX3Nob3VsZFBhaW50ID0gIW8tPmhhc0xheWVyKCk7IC8v
IElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQgd2lsbCBwYWludCBpdHNlbGYuICBPdGhlcndp
c2Ugc29tZW9uZSBlbHNlIHdpbGwuCisgICAgbmV3T2JqLT5tX3Nob3VsZFBhaW50ID0gIW8tPmhh
c1NlbGZQYWludGluZ0xheWVyKCk7IC8vIElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQgd2ls
bCBwYWludCBpdHNlbGYuICBPdGhlcndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCiAgICAgbmV3T2Jq
LT5tX2lzRGVzY2VuZGFudCA9IHRydWU7CiAgICAgbmV3T2JqLT5tX3JlbmRlcmVyID0gbzsKIApA
QCAtMjY3Miw3ICsyNjUyLDcgQEAgSW50UmVjdCBSZW5kZXJCbG9jazo6ZmxvYXRSZWN0KCkgY29u
c3QKICAgICBGbG9hdGluZ09iamVjdCogcjsKICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9y
PEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwogICAgIGZvciAoOyAociA9
IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKLSAgICAgICAgaWYgKHItPm1fc2hvdWxkUGFpbnQgJiYg
IXItPm1fcmVuZGVyZXItPmhhc0xheWVyKCkpIHsKKyAgICAgICAgaWYgKHItPm1fc2hvdWxkUGFp
bnQgJiYgIXItPm1fcmVuZGVyZXItPmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAg
ICAgIEludFJlY3QgY2hpbGRSZWN0ID0gci0+bV9yZW5kZXJlci0+b3ZlcmZsb3dSZWN0KGZhbHNl
KTsKICAgICAgICAgICAgIGNoaWxkUmVjdC5tb3ZlKHItPm1fbGVmdCArIHItPm1fcmVuZGVyZXIt
Pm1hcmdpbkxlZnQoKSwgci0+bV90b3AgKyByLT5tX3JlbmRlcmVyLT5tYXJnaW5Ub3AoKSk7CiAg
ICAgICAgICAgICByZXN1bHQudW5pdGUoY2hpbGRSZWN0KTsKQEAgLTI3NDEsNyArMjcyMSw3IEBA
IGludCBSZW5kZXJCbG9jazo6bG93ZXN0UG9zaXRpb24oYm9vbCBpbmMKICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIHI7CiAgICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdP
YmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7CiAgICAgICAgIGZvciAoIDsgKHIgPSBpdC5j
dXJyZW50KCkpOyArK2l0ICkgewotICAgICAgICAgICAgaWYgKHItPm1fc2hvdWxkUGFpbnQgfHwg
ci0+bV9yZW5kZXJlci0+aGFzTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKHItPm1fc2hvdWxk
UGFpbnQgfHwgci0+bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAg
ICAgICAgICAgIGludCBscCA9IHItPm1fdG9wICsgci0+bV9yZW5kZXJlci0+bWFyZ2luVG9wKCkg
KyByLT5tX3JlbmRlcmVyLT5sb3dlc3RQb3NpdGlvbihmYWxzZSk7CiAgICAgICAgICAgICAgICAg
Ym90dG9tID0gbWF4KGJvdHRvbSwgbHAgKyByZWxhdGl2ZU9mZnNldCk7CiAgICAgICAgICAgICB9
CkBAIC0yODE3LDcgKzI3OTcsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OnJpZ2h0bW9zdFBvc2l0aW9u
KGJvb2wgCiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByOwogICAgICAgICBEZXByZWNhdGVkUHRy
TGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwogICAg
ICAgICBmb3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCApIHsKLSAgICAgICAgICAgIGlm
IChyLT5tX3Nob3VsZFBhaW50IHx8IHItPm1fcmVuZGVyZXItPmhhc0xheWVyKCkpIHsKKyAgICAg
ICAgICAgIGlmIChyLT5tX3Nob3VsZFBhaW50IHx8IHItPm1fcmVuZGVyZXItPmhhc1NlbGZQYWlu
dGluZ0xheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpbnQgcnAgPSByLT5tX2xlZnQgKyByLT5t
X3JlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgKyByLT5tX3JlbmRlcmVyLT5yaWdodG1vc3RQb3NpdGlv
bihmYWxzZSk7CiAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHJwICsgcmVsYXRp
dmVPZmZzZXQpOwogICAgICAgICAgICAgfQpAQCAtMjg5OCw3ICsyODc4LDcgQEAgaW50IFJlbmRl
ckJsb2NrOjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgICAgICBGbG9hdGluZ09iamVjdCog
cjsKICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQo
Km1fZmxvYXRpbmdPYmplY3RzKTsKICAgICAgICAgZm9yICggOyAociA9IGl0LmN1cnJlbnQoKSk7
ICsraXQgKSB7Ci0gICAgICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCB8fCByLT5tX3JlbmRl
cmVyLT5oYXNMYXllcigpKSB7CisgICAgICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCB8fCBy
LT5tX3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICAgICAg
aW50IGxwID0gci0+bV9sZWZ0ICsgci0+bV9yZW5kZXJlci0+bWFyZ2luTGVmdCgpICsgci0+bV9y
ZW5kZXJlci0+bGVmdG1vc3RQb3NpdGlvbihmYWxzZSk7CiAgICAgICAgICAgICAgICAgbGVmdCA9
IG1pbihsZWZ0LCBscCArIHJlbGF0aXZlT2Zmc2V0KTsKICAgICAgICAgICAgIH0KQEAgLTMwOTQs
NyArMzA3NCw4IEBAIGludCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmUKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFwcGVu
ZChmbG9hdGluZ09iaik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobWFrZUNo
aWxkUGFpbnRPdGhlckZsb2F0cyAmJiAhci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5kZXJl
ci0+aGFzTGF5ZXIoKSAmJiByLT5tX3JlbmRlcmVyLT5pc0Rlc2NlbmRhbnRPZihjaGlsZCkgJiYg
ci0+bV9yZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKSA9PSBjaGlsZC0+ZW5jbG9zaW5nTGF5ZXIo
KSkKKyAgICAgICAgfSBlbHNlIGlmIChtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRzICYmICFyLT5t
X3Nob3VsZFBhaW50ICYmICFyLT5tX3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYm
CisgICAgICAgICAgICAgICAgICAgci0+bV9yZW5kZXJlci0+aXNEZXNjZW5kYW50T2YoY2hpbGQp
ICYmIHItPm1fcmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCkgPT0gY2hpbGQtPmVuY2xvc2luZ0xh
eWVyKCkpCiAgICAgICAgICAgICAvLyBUaGUgZmxvYXQgaXMgbm90IG92ZXJoYW5naW5nIGZyb20g
dGhpcyBibG9jaywgc28gaWYgaXQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjaGlsZCwgdGhlIGNo
aWxkIHNob3VsZAogICAgICAgICAgICAgLy8gcGFpbnQgaXQgKHRoZSBvdGhlciBjYXNlIGlzIHRo
YXQgaXQgaXMgaW50cnVkaW5nIGludG8gdGhlIGNoaWxkKSwgdW5sZXNzIGl0IGhhcyBpdHMgb3du
IGxheWVyIG9yIGVuY2xvc2luZwogICAgICAgICAgICAgLy8gbGF5ZXIuCkBAIC0zMTAyLDcgKzMw
ODMsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5nRmxvYXRzKFJlCiAgICAgICAg
ICAgICAvLyBpdCBzaG91bGQgcGFpbnQuCiAgICAgICAgICAgICByLT5tX3Nob3VsZFBhaW50ID0g
dHJ1ZTsKIAotICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5kZXJlci0+
aGFzTGF5ZXIoKSkgeworICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5k
ZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgSW50UmVjdCBmbG9h
dE92ZXJmbG93UmVjdCA9IHItPm1fcmVuZGVyZXItPm92ZXJmbG93UmVjdChmYWxzZSk7CiAgICAg
ICAgICAgICBmbG9hdE92ZXJmbG93UmVjdC5tb3ZlKHItPm1fbGVmdCArIHItPm1fcmVuZGVyZXIt
Pm1hcmdpbkxlZnQoKSwgci0+bV90b3AgKyByLT5tX3JlbmRlcmVyLT5tYXJnaW5Ub3AoKSk7CiAg
ICAgICAgICAgICBmbG9hdHNPdmVyZmxvd1JlY3QudW5pdGUoZmxvYXRPdmVyZmxvd1JlY3QpOwpA
QCAtMzI2NSwxNSArMzI0NiwxOCBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25z
dCBIaXRUCiAgICAgfQogCiAgICAgaWYgKGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChyZXN1bHQs
IF94LCBfeSwgdHgsIHR5KSkgewotICAgICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0
QmxvY2tCYWNrZ3JvdW5kKSB7CisgICAgICAgIGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RC
bG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tn
cm91bmQpIHsKICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2lu
dChfeCAtIHR4LCBfeSAtIHR5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgIC8vIElmIHdlIGhhdmUgbGln
aHR3ZWlnaHQgY29udHJvbCBjbGlwcGluZywgdGhlbiB3ZSBjYW4ndCBoYXZlIGFueSBzcGlsbG91
dC4gCi0gICAgaWYgKCFoYXNDb250cm9sQ2xpcCgpIHx8IGNvbnRyb2xDbGlwUmVjdCh0eCwgdHkp
LmNvbnRhaW5zKF94LCBfeSkpIHsKKyAgICAvLyBJZiB3ZSBoYXZlIGNsaXBwaW5nLCB0aGVuIHdl
IGNhbid0IGhhdmUgYW55IHNwaWxsb3V0LgorICAgIGJvb2wgdXNlT3ZlcmZsb3dDbGlwID0gaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyKCk7CisgICAgYm9vbCB1c2VD
bGlwID0gKGhhc0NvbnRyb2xDbGlwKCkgfHwgdXNlT3ZlcmZsb3dDbGlwKTsKKyAgICBib29sIGNo
ZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGNvbnRyb2xDbGlw
UmVjdCh0eCwgdHkpLmNvbnRhaW5zKF94LCBfeSkgOiBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSku
Y29udGFpbnMoX3gsIF95KSk7CisgICAgaWYgKGNoZWNrQ2hpbGRyZW4pIHsKICAgICAgICAgLy8g
SGl0IHRlc3QgZGVzY2VuZGFudHMgZmlyc3QuCiAgICAgICAgIGludCBzY3JvbGxlZFggPSB0eDsK
ICAgICAgICAgaW50IHNjcm9sbGVkWSA9IHR5OwpAQCAtMzI5OCw3ICszMjgyLDcgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgICAgICAgICAgRmxvYXRpbmdP
YmplY3QqIG87CiAgICAgICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5n
T2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwogICAgICAgICAgICAgZm9yIChpdC50b0xh
c3QoKTsgKG8gPSBpdC5jdXJyZW50KCkpOyAtLWl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG8t
Pm1fc2hvdWxkUGFpbnQgJiYgIW8tPm1fcmVuZGVyZXItPmhhc0xheWVyKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoby0+bV9zaG91bGRQYWludCAmJiAhby0+bV9yZW5kZXJlci0+aGFzU2VsZlBh
aW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgICAgICBpbnQgeG9mZnNldCA9IHNjcm9s
bGVkWCArIG8tPm1fbGVmdCArIG8tPm1fcmVuZGVyZXItPm1hcmdpbkxlZnQoKSAtIG8tPm1fcmVu
ZGVyZXItPngoKTsKICAgICAgICAgICAgICAgICAgICAgaW50IHlvZmZzZXQgPSAgc2Nyb2xsZWRZ
ICsgby0+bV90b3AgKyBvLT5tX3JlbmRlcmVyLT5tYXJnaW5Ub3AoKSAtIG8tPm1fcmVuZGVyZXIt
PnkoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG8tPm1fcmVuZGVyZXItPmhpdFRlc3QocmVx
dWVzdCwgcmVzdWx0LCBJbnRQb2ludChfeCwgX3kpLCB4b2Zmc2V0LCB5b2Zmc2V0KSkgewpAQCAt
MzM2OSwxMCArMzM1Myw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb250ZW50cyhjb25z
dCAKICAgICAgICAgSGl0VGVzdEFjdGlvbiBjaGlsZEhpdFRlc3QgPSBoaXRUZXN0QWN0aW9uOwog
ICAgICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmRz
KQogICAgICAgICAgICAgY2hpbGRIaXRUZXN0ID0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5k
OwotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogV2UgaGF2ZSB0byBza2lwIG92ZXIgaW5saW5lIGZsb3dzLCBzaW5jZSB0aGV5IGNhbiBzaG93
IHVwIGluc2lkZSBSZW5kZXJUYWJsZXMgYXQgdGhlIG1vbWVudCAoYSBkZW1vdGVkIGlubGluZSA8
Zm9ybT4gZm9yIGV4YW1wbGUpLiAgSWYgd2UgZXZlciBpbXBsZW1lbnQgYQotICAgICAgICAgICAg
Ly8gdGFibGUtc3BlY2lmaWMgaGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQgZG8gZm9y
IHBlcmZvcm1hbmNlIHJlYXNvbnMgYW55d2F5KSwgdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hl
Y2suCi0gICAgICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmICFjaGlsZC0+aXNGbG9h
dGluZygpICYmICFjaGlsZC0+aXNSZW5kZXJJbmxpbmUoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGNoaWxkSGl0VGVzdCkpIHsKKyAgICAgICAg
Zm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbGFzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5wcmV2aW91c1NpYmxpbmdCb3goKSkgeworICAgICAgICAgICAgaWYgKCFjaGlsZC0+aGFz
U2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZC0+bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGNoaWxkSGl0VGVzdCkpIHsK
ICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAt
IHR4LCB5IC0gdHkpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IH0KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA0MTA5MykKKysrIHJlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTUsMTEgKzU1NSw4IEBAIGJvb2wgUmVuZGVyQm94Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXMKIAogICAgIC8vIENoZWNrIGtpZHMgZmlyc3QuCiAgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICAvLyBGSVhNRTogV2UgaGF2ZSB0byBz
a2lwIG92ZXIgaW5saW5lIGZsb3dzLCBzaW5jZSB0aGV5IGNhbiBzaG93IHVwIGluc2lkZSB0YWJs
ZSByb3dzCi0gICAgICAgIC8vIGF0IHRoZSBtb21lbnQgKGEgZGVtb3RlZCBpbmxpbmUgPGZvcm0+
IGZvciBleGFtcGxlKS4gSWYgd2UgZXZlciBpbXBsZW1lbnQgYQotICAgICAgICAvLyB0YWJsZS1z
cGVjaWZpYyBoaXQtdGVzdCBtZXRob2QgKHdoaWNoIHdlIHNob3VsZCBkbyBmb3IgcGVyZm9ybWFu
Y2UgcmVhc29ucyBhbnl3YXkpLAotICAgICAgICAvLyB0aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBj
aGVjay4KLSAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiAhY2hpbGQtPmlzUmVuZGVy
SW5saW5lKCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywgeVBv
cywgdHgsIHR5LCBhY3Rpb24pKSB7CisgICAgICAgIEFTU0VSVCghY2hpbGQtPmhhc0xheWVyKCkp
OworICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmIGNoaWxkLT5ub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHhQb3MsIHlQb3MsIHR4LCB0eSwgYWN0aW9uKSkgewogICAgICAgICAg
ICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHhQb3MgLSB0eCwgeVBvcyAt
IHR5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtODUyLDYgKzg0
OSw0MyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQoaW50CiAKICNlbmRp
ZgogCitib29sIFJlbmRlckJveDo6cHVzaENvbnRlbnRzQ2xpcChQYWludEluZm8mIHBhaW50SW5m
bywgaW50IHR4LCBpbnQgdHkpCit7CisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBo
YXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91
dGxpbmUgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VNYXNrKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgIGJvb2wgaXNDb250cm9sQ2xpcCA9IGhhc0NvbnRyb2xD
bGlwKCk7CisgICAgYm9vbCBpc092ZXJmbG93Q2xpcCA9IGhhc092ZXJmbG93Q2xpcCgpICYmICFs
YXllcigpLT5pc1NlbGZQYWludGluZ0xheWVyKCk7CisgICAgCisgICAgaWYgKCFpc0NvbnRyb2xD
bGlwICYmICFpc092ZXJmbG93Q2xpcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUpCisgICAgICAgIHBhaW50
SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzOworICAgIGVsc2UgaWYgKHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpIHsKKyAgICAgICAg
cGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZDsKKyAgICAgICAgcGFp
bnRPYmplY3QocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQ
YWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOworICAgIH0KKyAgICBJbnRSZWN0IGNsaXBS
ZWN0KGlzQ29udHJvbENsaXAgPyBjb250cm9sQ2xpcFJlY3QodHgsIHR5KSA6IG92ZXJmbG93Q2xp
cFJlY3QodHgsIHR5KSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICBwYWlu
dEluZm8uY29udGV4dC0+Y2xpcChjbGlwUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgUmVuZGVyQm94Ojpwb3BDb250ZW50c0NsaXAoUGFpbnRJbmZvJiBwYWludEluZm8sIFBhaW50
UGhhc2Ugb3JpZ2luYWxQaGFzZSwgaW50IHR4LCBpbnQgdHkpCit7CisgICAgQVNTRVJUKGhhc0Nv
bnRyb2xDbGlwKCkgfHwgKGhhc092ZXJmbG93Q2xpcCgpICYmICFsYXllcigpLT5pc1NlbGZQYWlu
dGluZ0xheWVyKCkpKTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CisgICAg
aWYgKG9yaWdpbmFsUGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUpIHsKKyAgICAgICAgcGFpbnRJ
bmZvLnBoYXNlID0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lOworICAgICAgICBwYWludE9iamVjdChw
YWludEluZm8sIHR4LCB0eSk7CisgICAgICAgIHBhaW50SW5mby5waGFzZSA9IG9yaWdpbmFsUGhh
c2U7CisgICAgfSBlbHNlIGlmIChvcmlnaW5hbFBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2Nr
QmFja2dyb3VuZCkKKyAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gb3JpZ2luYWxQaGFzZTsKK30K
KwogSW50UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpCiB7
CiAgICAgLy8gRklYTUU6IFdoZW4gb3ZlcmZsb3ctY2xpcCAoQ1NTMykgaXMgaW1wbGVtZW50ZWQs
IHdlJ2xsIG9idGFpbiB0aGUgcHJvcGVydHkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCb3guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDQxMDkzKQorKysg
cmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDEwIEBA
IHB1YmxpYzoKICAgICBJbnRSZWN0IGNsaXBSZWN0KGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0
dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgSW50UmVjdCBjb250cm9sQ2xpcFJlY3QoaW50IC8qdHgqLywgaW50IC8qdHkqLykgY29u
c3QgeyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgYm9vbCBwdXNoQ29udGVudHNDbGlwKFBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2b2lkIHBvcENvbnRlbnRzQ2xpcChQYWludElu
Zm8mLCBQYWludFBoYXNlIG9yaWdpbmFsUGhhc2UsIGludCB0eCwgaW50IHR5KTsKIAorICAgIHZp
cnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBpbnQgLyp0eCovLCBpbnQgLyp0eSov
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVj
b3JhdGlvbnMoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBw
YWludE1hc2soUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0
dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCogPSAw
KTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gNDEwOTMpCisr
KyByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw2ICs2MCwxMSBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkZXN0cm95KCkKICAgICBS
ZW5kZXJPYmplY3Q6OmRlc3Ryb3koKTsKIH0KIAorYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyICYmIG1f
bGF5ZXItPmlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKK30KKwogdm9pZCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogbmV3U3R5bGUpCiB7CiAgICAgc193YXNGbG9hdGluZyA9IGlzRmxvYXRpbmcoKTsKSW5k
ZXg6IHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiA0MTA5MykKKysrIHJlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVC
b3hNb2RlbEluZm9Gcm9tU3R5bGUoKTsKIAorICAgIGJvb2wgaGFzU2VsZlBhaW50aW5nTGF5ZXIo
KSBjb25zdDsKICAgICBSZW5kZXJMYXllciogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVy
OyB9CiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1Jv
b3QoKSB8fCBpc1Bvc2l0aW9uZWQoKSB8fCBpc1JlbFBvc2l0aW9uZWQoKSB8fCBpc1RyYW5zcGFy
ZW50KCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzTWFzaygp
IHx8IGhhc1JlZmxlY3Rpb24oKTsgfQogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDQxMTU0
KQorKysgcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzOCwx
MSArMTkzOCw2IEBAIFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRlckxheWVyKiByb28KICAg
ICAgICAgUmVuZGVyT2JqZWN0OjpQYWludEluZm8gcGFpbnRJbmZvKHAsIGRhbWFnZVJlY3QsIFBh
aW50UGhhc2VCbG9ja0JhY2tncm91bmQsIGZhbHNlLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwg
MCk7CiAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKIAotICAg
ICAgICAvLyBPdXIgc2Nyb2xsYmFyIHdpZGdldHMgcGFpbnQgZXhhY3RseSB3aGVuIHdlIHRlbGwg
dGhlbSB0bywgc28gdGhhdCB0aGV5IHdvcmsgcHJvcGVybHkgd2l0aAotICAgICAgICAvLyB6LWlu
ZGV4LiAgV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNv
IHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAotICAgICAgICAvLyBzaXQgYWJvdmUgdGhlIGJhY2tn
cm91bmQvYm9yZGVyLgotICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMocCwgeCwgeSwgZGFt
YWdlUmVjdCk7Ci0gICAgICAgIAogICAgICAgICAvLyBSZXN0b3JlIHRoZSBjbGlwLgogICAgICAg
ICByZXN0b3JlQ2xpcChwLCBwYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7CiAgICAgfQpAQCAt
MTk4Nyw5ICsxOTgyLDExIEBAIFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRlckxheWVyKiBy
b28KICAgICAKICAgICAvLyBQYWludCBhbnkgY2hpbGQgbGF5ZXJzIHRoYXQgaGF2ZSBvdmVyZmxv
dy4KICAgICBpZiAobV9ub3JtYWxGbG93TGlzdCkKLSAgICAgICAgZm9yIChWZWN0b3I8UmVuZGVy
TGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX25vcm1hbEZsb3dMaXN0LT5iZWdpbigpOyBpdCAhPSBt
X25vcm1hbEZsb3dMaXN0LT5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGl0WzBdLT5wYWludExh
eWVyKHJvb3RMYXllciwgcCwgcGFpbnREaXJ0eVJlY3QsIGhhdmVUcmFuc3BhcmVuY3ksIHBhaW50
UmVzdHJpY3Rpb24sIHBhaW50aW5nUm9vdCwgZmFsc2UsIHRlbXBvcmFyeUNsaXBSZWN0cyk7Ci0g
ICAgCisgICAgICAgIGZvciAoVmVjdG9yPFJlbmRlckxheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9u
b3JtYWxGbG93TGlzdC0+YmVnaW4oKTsgaXQgIT0gbV9ub3JtYWxGbG93TGlzdC0+ZW5kKCk7ICsr
aXQpIHsKKyAgICAgICAgICAgIGlmIChpdFswXS0+aXNTZWxmUGFpbnRpbmdMYXllcigpKQorICAg
ICAgICAgICAgICAgIGl0WzBdLT5wYWludExheWVyKHJvb3RMYXllciwgcCwgcGFpbnREaXJ0eVJl
Y3QsIGhhdmVUcmFuc3BhcmVuY3ksIHBhaW50UmVzdHJpY3Rpb24sIHBhaW50aW5nUm9vdCwgZmFs
c2UsIHRlbXBvcmFyeUNsaXBSZWN0cyk7CisgICAgICAgIH0KKwogICAgIC8vIE5vdyB3YWxrIHRo
ZSBzb3J0ZWQgbGlzdCBvZiBjaGlsZHJlbiB3aXRoIHBvc2l0aXZlIHotaW5kaWNlcy4KICAgICBp
ZiAobV9wb3NaT3JkZXJMaXN0KQogICAgICAgICBmb3IgKFZlY3RvcjxSZW5kZXJMYXllcio+Ojpp
dGVyYXRvciBpdCA9IG1fcG9zWk9yZGVyTGlzdC0+YmVnaW4oKTsgaXQgIT0gbV9wb3NaT3JkZXJM
aXN0LT5lbmQoKTsgKytpdCkKQEAgLTIxMjAsNyArMjExNyw4IEBAIFJlbmRlckxheWVyKiBSZW5k
ZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAvLyBOb3cgY2hlY2sgb3VyIG92ZXJmbG93IG9i
amVjdHMuCiAgICAgaWYgKG1fbm9ybWFsRmxvd0xpc3QpIHsKICAgICAgICAgZm9yIChpbnQgaSA9
IG1fbm9ybWFsRmxvd0xpc3QtPnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAg
ICBpbnNpZGVMYXllciA9IG1fbm9ybWFsRmxvd0xpc3QtPmF0KGkpLT5oaXRUZXN0TGF5ZXIocm9v
dExheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQpOworICAg
ICAgICAgICAgaWYgKG1fbm9ybWFsRmxvd0xpc3QtPmF0KGkpLT5pc1NlbGZQYWludGluZ0xheWVy
KCkpCisgICAgICAgICAgICAgICAgaW5zaWRlTGF5ZXIgPSBtX25vcm1hbEZsb3dMaXN0LT5hdChp
KS0+aGl0VGVzdExheWVyKHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwg
aGl0VGVzdFBvaW50KTsKICAgICAgICAgICAgIGlmIChpbnNpZGVMYXllcikKICAgICAgICAgICAg
ICAgICByZXR1cm4gaW5zaWRlTGF5ZXI7CiAgICAgICAgIH0KQEAgLTI3NDIsMTMgKzI3NDAsMTgg
QEAgdm9pZCBSZW5kZXJMYXllcjo6c2V0QmFja2luZ05lZWRzUmVwYWludAogCiBib29sIFJlbmRl
ckxheWVyOjpzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHJl
bmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCktPmhhc1JlZmxlY3Rpb24o
KSkgJiYgCisgICAgcmV0dXJuIChyZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSB8fCByZW5k
ZXJlcigpLT5oYXNSZWZsZWN0aW9uKCkgfHwgcmVuZGVyZXIoKS0+aGFzTWFzaygpKSAmJiAKICAg
ICAgICAgICAgIXJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpICYmCiAgICAgICAgICAgICFyZW5k
ZXJlcigpLT5pc1JlbFBvc2l0aW9uZWQoKSAmJgogICAgICAgICAgICAhcmVuZGVyZXIoKS0+aGFz
VHJhbnNmb3JtKCkgJiYKICAgICAgICAgICAgIWlzVHJhbnNwYXJlbnQoKTsKIH0KIAorYm9vbCBS
ZW5kZXJMYXllcjo6aXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuICFp
c05vcm1hbEZsb3dPbmx5KCkgfHwgcmVuZGVyZXIoKS0+aGFzUmVmbGVjdGlvbigpIHx8IHJlbmRl
cmVyKCktPmhhc01hc2soKSB8fCByZW5kZXJlcigpLT5pc1RhYmxlUm93KCk7Cit9CisKIHZvaWQg
UmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVu
ZGVyU3R5bGUqKQogewogICAgIGJvb2wgaXNOb3JtYWxGbG93T25seSA9IHNob3VsZEJlTm9ybWFs
Rmxvd09ubHkoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA0MTE1NCkKKysrIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsNiArMjE4LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc3VzcGVuZE1hcnF1ZWVzKCk7CiAKICAgICBib29sIGlzTm9ybWFsRmxvd09ubHko
KSBjb25zdCB7IHJldHVybiBtX2lzTm9ybWFsRmxvd09ubHk7IH0KKyAgICBib29sIGlzU2VsZlBh
aW50aW5nTGF5ZXIoKSBjb25zdDsKIAogICAgIGJvb2wgcmVxdWlyZXNTbG93UmVwYWludHMoKSBj
b25zdDsKIApAQCAtNDU3LDcgKzQ1OCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXB1dGVT
Y3JvbGxEaW1lbnNpb25zKGJvb2wqIG5lZWRIQmFyID0gMCwgYm9vbCogbmVlZFZCYXIgPSAwKTsK
IAotICAgIGJvb2wgc2hvdWxkQmVOb3JtYWxGbG93T25seSgpIGNvbnN0OworICAgIGJvb2wgc2hv
dWxkQmVOb3JtYWxGbG93T25seSgpIGNvbnN0OyAgICAKIAogICAgIHZpcnR1YWwgdm9pZCB2YWx1
ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxi
YXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2
aXNpb24gNDEwOTMpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NTAsNiArNDUwLDE1IEBAIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnQKICAgICBpZiAodHggKyBvdmVyZmxvd0xlZnQoZmFsc2UpID49IHBhaW50SW5mby5yZWN0
LnJpZ2h0KCkgKyBvcyB8fCB0eCArIG92ZXJmbG93V2lkdGgoZmFsc2UpIDw9IHBhaW50SW5mby5y
ZWN0LngoKSAtIG9zKQogICAgICAgICByZXR1cm47CiAKKyAgICBib29sIHB1c2hlZENsaXAgPSBw
dXNoQ29udGVudHNDbGlwKHBhaW50SW5mbywgdHgsIHR5KTsgICAgCisgICAgcGFpbnRPYmplY3Qo
cGFpbnRJbmZvLCB0eCwgdHkpOworICAgIGlmIChwdXNoZWRDbGlwKQorICAgICAgICBwb3BDb250
ZW50c0NsaXAocGFpbnRJbmZvLCBwYWludFBoYXNlLCB0eCwgdHkpOworfQorCit2b2lkIFJlbmRl
clRhYmxlOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkp
Cit7CisgICAgUGFpbnRQaGFzZSBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwogICAgIGlm
ICgocGFpbnRQaGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBhaW50UGhhc2Ug
PT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBoYXNCb3hEZWNvcmF0aW9ucygp
ICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQogICAgICAgICBwYWludEJveERl
Y29yYXRpb25zKHBhaW50SW5mbywgdHgsIHR5KTsKIApAQCAtNDYxLDE5ICs0NzAsMjAgQEAgdm9p
ZCBSZW5kZXJUYWJsZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgIC8vIFdlJ3JlIGRvbmUu
ICBXZSBkb24ndCBib3RoZXIgcGFpbnRpbmcgYW55IGNoaWxkcmVuLgogICAgIGlmIChwYWludFBo
YXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpCiAgICAgICAgIHJldHVybjsKLQorICAg
IAogICAgIC8vIFdlIGRvbid0IHBhaW50IG91ciBvd24gYmFja2dyb3VuZCwgYnV0IHdlIGRvIGxl
dCB0aGUga2lkcyBwYWludCB0aGVpciBiYWNrZ3JvdW5kcy4KICAgICBpZiAocGFpbnRQaGFzZSA9
PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzKQogICAgICAgICBwYWludFBoYXNlID0g
UGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kOworCiAgICAgUGFpbnRJbmZvIGluZm8ocGFp
bnRJbmZvKTsKICAgICBpbmZvLnBoYXNlID0gcGFpbnRQaGFzZTsKICAgICBpbmZvLnBhaW50aW5n
Um9vdCA9IHBhaW50aW5nUm9vdEZvckNoaWxkcmVuKHBhaW50SW5mbyk7CiAKICAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgKGNoaWxk
LT5pc1RhYmxlU2VjdGlvbigpIHx8IGNoaWxkID09IG1fY2FwdGlvbikpCisgICAgICAgIGlmIChj
aGlsZC0+aXNCb3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXll
cigpICYmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pKQog
ICAgICAgICAgICAgY2hpbGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CiAgICAgfQotCisgICAgCiAg
ICAgaWYgKGNvbGxhcHNlQm9yZGVycygpICYmIHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxk
QmxvY2tCYWNrZ3JvdW5kICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7CiAg
ICAgICAgIC8vIENvbGxlY3QgYWxsIHRoZSB1bmlxdWUgYm9yZGVyIHN0eWxlcyB0aGF0IHdlIHdh
bnQgdG8gcGFpbnQgaW4gYSBzb3J0ZWQgbGlzdC4gIE9uY2Ugd2UKICAgICAgICAgLy8gaGF2ZSBh
bGwgdGhlIHN0eWxlcyBzb3J0ZWQsIHdlIHRoZW4gZG8gaW5kaXZpZHVhbCBwYXNzZXMsIHBhaW50
aW5nIGVhY2ggc3R5bGUgb2YgYm9yZGVyCkBAIC0xMTM1LDQgKzExNDUsMzEgQEAgSW50UmVjdCBS
ZW5kZXJUYWJsZTo6b3ZlcmZsb3dDbGlwUmVjdChpbgogICAgIHJldHVybiByZWN0OwogfQogCiti
b29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB0eCwgaW50
IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK3sKKyAgICB0eCArPSB4KCk7CisgICAgdHkgKz0g
eSgpOworCisgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KKyAgICBpZiAoIWhhc092ZXJmbG93Q2xp
cCgpIHx8IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyh4UG9zLCB5UG9zKSkgewor
ICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQt
PmlzQm94KCkgJiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAm
JiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQgPT0gbV9jYXB0aW9uKSAmJgorICAg
ICAgICAgICAgICAgIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHhQb3MsIHlQ
b3MsIHR4LCB0eSwgYWN0aW9uKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBJbnRQb2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0eSkpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3IgdGhpcyBwdXJwb3NlIGFsd2F5cyBhc3N1bWUg
dGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhlCisgICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAo
d2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVudHMgbGlrZSBpbWFnZXMpLgorICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHByb2JhYmx5IG5vdCByaWdodCwgYnV0IHdhcyBpbmhlcml0ZWQgZnJv
bSBSZW5kZXJCb3gncyB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kLgorICAgIGlmICh2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgJiYgYWN0aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5kICYmIEludFJlY3QodHgs
IHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkuY29udGFpbnMoeFBvcywgeVBvcykpIHsKKyAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHhQb3MgLSB0eCwgeVBvcyAtIHR5
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KwogfQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDQxMDkzKQorKysgcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDExICs3NSwxMyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCogb2xkQ2hpbGQpOwogCiAgICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1
YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNYXNrKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgs
IGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBj
YWxjUHJlZldpZHRocygpOwotCisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4UG9zLCBpbnQgeVBvcywgaW50IHR4
LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIAogICAgIHZpcnR1YWwgaW50IGZpcnN0TGlu
ZUJveEJhc2VsaW5lKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIFJlbmRlckJsb2NrKiBmaXJzdExp
bmVCbG9jaygpIGNvbnN0OwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDQxMDkz
KQorKysgcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
OSwyMiArNjQ5LDE3IEBAIGludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZCb3R0b20oYm8K
IAogdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSkKIHsKLSAgICB0eCArPSB4KCk7Ci0gICAgdHkgKz0geSgpOwotCi0gICAgLy8g
Y2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuLi4KLSAgICBpbnQgb3MgPSAy
ICogbWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7Ci0KICAgICBpZiAocGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJsZUJvcmRlcnMgJiYgc3R5bGUoKS0+
dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKLSAgICAgICAgaWYgKHR5IC0gdGFibGUoKS0+b3V0
ZXJCb3JkZXJUb3AoKSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zIHx8Ci0gICAgICAg
ICAgICAgICAgdHkgKyBoZWlnaHQoKSArIHRhYmxlKCktPm91dGVyQm9yZGVyQm90dG9tKCkgPD0g
cGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHBh
aW50Q29sbGFwc2VkQm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHdpZHRoKCksIGhl
aWdodCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAodHkgKyBvdmVyZmxvd1RvcChmYWxz
ZSkgPj0gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgKyBvcyB8fCB0eSArIG92ZXJmbG93SGVpZ2h0
KGZhbHNlKSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBhaW50SW5mbywgdHgsIHR5KTsKLSAg
ICB9CisgICAgICAgIHR4ICs9IHgoKTsKKyAgICAgICAgdHkgKz0geSgpOworICAgICAgICBpbnQg
b3MgPSAyICogbWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7CisgICAgICAgIGlm
ICh0eSAtIHRhYmxlKCktPm91dGVyQm9yZGVyVG9wKCkgPCBwYWludEluZm8ucmVjdC5ib3R0b20o
KSArIG9zICYmCisgICAgICAgICAgICB0eSArIGhlaWdodCgpICsgdGFibGUoKS0+b3V0ZXJCb3Jk
ZXJCb3R0b20oKSA+IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQorICAgICAgICAgICAgcGFpbnRD
b2xsYXBzZWRCb3JkZXIocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0
KCkpOworICAgICAgICByZXR1cm47CisgICAgfSAKKyAgICAKKyAgICBSZW5kZXJCbG9jazo6cGFp
bnQocGFpbnRJbmZvLCB0eCwgdHkpOwogfQogCiBzdGF0aWMgRUJvcmRlclN0eWxlIGNvbGxhcHNl
ZEJvcmRlclN0eWxlKEVCb3JkZXJTdHlsZSBzdHlsZSkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJU
YWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAko
cmV2aXNpb24gNDEwOTMpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODMsNyArMTgzLDcgQEAgYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9p
bnQoY29uc3QgSAogICAgICAgICAvLyBhdCB0aGUgbW9tZW50IChhIGRlbW90ZWQgaW5saW5lIDxm
b3JtPiBmb3IgZXhhbXBsZSkuIElmIHdlIGV2ZXIgaW1wbGVtZW50IGEKICAgICAgICAgLy8gdGFi
bGUtc3BlY2lmaWMgaGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQgZG8gZm9yIHBlcmZv
cm1hbmNlIHJlYXNvbnMgYW55d2F5KSwKICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3ZlIHRo
aXMgY2hlY2suCi0gICAgICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgIWNoaWxkLT5pc1Jl
bmRlcklubGluZSgpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHks
IHR4LCB0eSwgYWN0aW9uKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVDZWxsKCkgJiYg
IXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiBjaGlsZC0+bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGFjdGlvbikpIHsKICAgICAg
ICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0
eSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE5NCwxMCArMTk0
LDkgQEAgYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSAogCiB2b2lkIFJl
bmRlclRhYmxlUm93OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkp
CiB7Ci0gICAgQVNTRVJUKGhhc0xheWVyKCkpOworICAgIEFTU0VSVChoYXNTZWxmUGFpbnRpbmdM
YXllcigpKTsKICAgICBpZiAoIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ2VsbCgpKSB7CiAg
ICAgICAgICAgICAvLyBQYWludCB0aGUgcm93IGJhY2tncm91bmQgYmVoaW5kIHRoZSBjZWxsLgpA
QCAtMjA1LDcgKzIwNCw3IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OnBhaW50KFBhaW50SW5mbyYg
cGEKICAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJUYWJsZUNlbGwqPihjaGlsZCk7CiAgICAgICAgICAgICAgICAgY2VsbC0+cGFpbnRCYWNr
Z3JvdW5kc0JlaGluZENlbGwocGFpbnRJbmZvLCB0eCwgdHksIHRoaXMpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSkKKyAgICAgICAgICAgIGlmICgh
dG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKQogICAgICAgICAgICAg
ICAgIGNoaWxkLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcv
UmVuZGVyVGFibGVSb3cuaAkocmV2aXNpb24gNDEwOTMpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFi
bGVSb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gaXNUcmFuc3BhcmVudCgp
IHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc01hc2soKTsgfQog
CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKwog
ICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRS
ZWN0KiA9IDApOwogCiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZl
cmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CkluZGV4OiByZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmNwcAkocmV2aXNpb24gNDEwOTMpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM5LDggKzkzOSwyMCBAQCB2b2lkIFJlbmRlclRh
YmxlU2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZvCiAgICAgdHggKz0geCgpOwogICAgIHR5ICs9IHko
KTsKIAorICAgIFBhaW50UGhhc2UgcGhhc2UgPSBwYWludEluZm8ucGhhc2U7CisgICAgYm9vbCBw
dXNoZWRDbGlwID0gcHVzaENvbnRlbnRzQ2xpcChwYWludEluZm8sIHR4LCB0eSk7CisgICAgcGFp
bnRPYmplY3QocGFpbnRJbmZvLCB0eCwgdHkpOworICAgIGlmIChwdXNoZWRDbGlwKQorICAgICAg
ICBwb3BDb250ZW50c0NsaXAocGFpbnRJbmZvLCBwaGFzZSwgdHgsIHR5KTsKK30KKwordm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSkKK3sKICAgICAvLyBDaGVjayB3aGljaCByb3dzIGFuZCBjb2xzIGFyZSB2aXNp
YmxlIGFuZCBvbmx5IHBhaW50IHRoZXNlLgogICAgIC8vIEZJWE1FOiBDb3VsZCB1c2UgYSBiaW5h
cnkgc2VhcmNoIGhlcmUuCisgICAgdW5zaWduZWQgdG90YWxSb3dzID0gbV9ncmlkUm93czsKKyAg
ICB1bnNpZ25lZCB0b3RhbENvbHMgPSB0YWJsZSgpLT5jb2x1bW5zKCkuc2l6ZSgpOworCiAgICAg
UGFpbnRQaGFzZSBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwogICAgIGludCB4ID0gcGFp
bnRJbmZvLnJlY3QueCgpOwogICAgIGludCB5ID0gcGFpbnRJbmZvLnJlY3QueSgpOwpAQCAtMTAy
NywxMSArMTAzOSwxMSBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZv
CiAKICAgICAgICAgICAgICAgICAgICAgLy8gUGFpbnQgdGhlIHJvdyBuZXh0LCBidXQgb25seSBp
ZiBpdCBkb2Vzbid0IGhhdmUgYSBsYXllci4gIElmIGEgcm93IGhhcyBhIGxheWVyLCBpdCB3aWxs
IGJlIHJlc3BvbnNpYmxlIGZvcgogICAgICAgICAgICAgICAgICAgICAvLyBwYWludGluZyB0aGUg
cm93IGJhY2tncm91bmQgZm9yIHRoZSBjZWxsLgotICAgICAgICAgICAgICAgICAgICBpZiAoIXJv
dy0+aGFzTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3ctPmhhc1NlbGZQYWlu
dGluZ0xheWVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLT5wYWludEJhY2tncm91
bmRzQmVoaW5kQ2VsbChwYWludEluZm8sIHR4LCB0eSwgcm93KTsKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAoKCFjZWxsLT5oYXNMYXllcigpICYmICFyb3ctPmhhc0xh
eWVyKCkpIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQ29sbGFwc2VkVGFibGVCb3Jk
ZXJzKQorICAgICAgICAgICAgICAgIGlmICgoIWNlbGwtPmhhc1NlbGZQYWludGluZ0xheWVyKCkg
JiYgIXJvdy0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2VDb2xsYXBzZWRUYWJsZUJvcmRlcnMpCiAgICAgICAgICAgICAgICAgICAgIGNlbGwt
PnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTEyNCwxMiArMTEzNiwxNSBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQo
Y29uCiAgICAgdHggKz0geCgpOwogICAgIHR5ICs9IHkoKTsKIAorICAgIGlmIChoYXNPdmVyZmxv
d0NsaXAoKSAmJiAhb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmNvbnRhaW5zKHhQb3MsIHlQb3Mp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQg
PSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBXZSBoYXZlIHRvIHNraXAgb3ZlciBpbmxpbmUgZmxvd3MsIHNp
bmNlIHRoZXkgY2FuIHNob3cgdXAgaW5zaWRlIHRhYmxlIHJvd3MKICAgICAgICAgLy8gYXQgdGhl
IG1vbWVudCAoYSBkZW1vdGVkIGlubGluZSA8Zm9ybT4gZm9yIGV4YW1wbGUpLiBJZiB3ZSBldmVy
IGltcGxlbWVudCBhCiAgICAgICAgIC8vIHRhYmxlLXNwZWNpZmljIGhpdC10ZXN0IG1ldGhvZCAo
d2hpY2ggd2Ugc2hvdWxkIGRvIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIGFueXdheSksCiAgICAg
ICAgIC8vIHRoZW4gd2UgY2FuIHJlbW92ZSB0aGlzIGNoZWNrLgotICAgICAgICBpZiAoIWNoaWxk
LT5oYXNMYXllcigpICYmICFjaGlsZC0+aXNSZW5kZXJJbmxpbmUoKSAmJiBjaGlsZC0+bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5UG9zLCB0eCwgdHksIGFjdGlvbikpIHsKKyAg
ICAgICAgaWYgKGNoaWxkLT5pc0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQ
YWludGluZ0xheWVyKCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBv
cywgeVBvcywgdHgsIHR5LCBhY3Rpb24pKSB7CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCShyZXZp
c2lvbiA0MTA5MykKKysrIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBAIHB1YmxpYzoKICAgICBpbnQgb3V0ZXJCb3JkZXJSaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0ZXJCb3JkZXJSaWdodDsgfQogCiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworCiAgICAgdmlydHVhbCB2
b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7CiAK
ICAgICBpbnQgbnVtUm93cygpIGNvbnN0IHsgcmV0dXJuIG1fZ3JpZFJvd3M7IH0KSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDQxMTU0KQorKysgcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODksNyArMzg5LDcgQEAgdm9pZCB3cml0
ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTwogICAgIH0KIAogICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IG8uZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY2hpbGQtPmhhc0xheWVyKCkpCisgICAgICAgIGlm
IChjaGlsZC0+aGFzTGF5ZXIoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNoaWxkKS0+aGFz
U2VsZlBhaW50aW5nTGF5ZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB3cml0
ZSh0cywgKmNoaWxkLCBpbmRlbnQgKyAxKTsKICAgICB9CkBAIC00NzIsMTAgKzQ3MiwxMSBAQCBz
dGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtJiB0cywgCiAgICAgaWYgKHNob3VsZFBh
aW50KQogICAgICAgICB3cml0ZSh0cywgKmwsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlw
UmVjdFRvQXBwbHksIG91dGxpbmVSZWN0LCBuZWdMaXN0ICYmIG5lZ0xpc3QtPnNpemUoKSA+IDAs
IGluZGVudCk7CiAKLSAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiogb3ZlcmZsb3dMaXN0ID0gbC0+
bm9ybWFsRmxvd0xpc3QoKTsKLSAgICBpZiAob3ZlcmZsb3dMaXN0KSB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgIT0gb3ZlcmZsb3dMaXN0LT5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIHdyaXRlTGF5ZXJzKHRzLCByb290TGF5ZXIsIG92ZXJmbG93TGlzdC0+YXQoaSksIHBhaW50
RGlydHlSZWN0LCBpbmRlbnQpOworICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBub3JtYWxGbG93
TGlzdCA9IGwtPm5vcm1hbEZsb3dMaXN0KCk7CisgICAgaWYgKG5vcm1hbEZsb3dMaXN0KSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbm9ybWFsRmxvd0xpc3QtPnNpemUoKTsg
KytpKQorICAgICAgICAgICAgaWYgKG5vcm1hbEZsb3dMaXN0LT5hdChpKS0+aXNTZWxmUGFpbnRp
bmdMYXllcigpKQorICAgICAgICAgICAgICAgIHdyaXRlTGF5ZXJzKHRzLCByb290TGF5ZXIsIG5v
cm1hbEZsb3dMaXN0LT5hdChpKSwgcGFpbnREaXJ0eVJlY3QsIGluZGVudCk7CiAgICAgfQogCiAg
ICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIHBvc0xpc3QgPSBsLT5wb3NaT3JkZXJMaXN0KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27940</attachid>
            <date>2009-02-24 15:56:26 -0800</date>
            <delta_ts>2009-02-24 16:01:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>41926</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTE4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODAgQEAKKzIwMDktMDItMjMgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc0MCwgcGFpbnRpbmcgb3JkZXIg
d3JvbmcgZm9yIG5vcm1hbCBmbG93IGVsZW1lbnRzIHdpdGggb3ZlcmZsb3c6IGhpZGRlbgorICAg
ICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCByZXdvcmtzIHRoZSBwYWludGluZyBvZiBvdmVyZmxv
dy4gIFRoZXJlIGlzIG5vdyB0aGUgY29uY2VwdCBvZiBhICJzZWxmLXBhaW50aW5nIGxheWVyLiIg
IEFsbAorICAgICAgICBsYXllcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc2VsZi1wYWludGluZyBl
eGNlcHQgZm9yIG92ZXJmbG93IGxheWVycyB0aGF0IGFyZSBub3JtYWwgZmxvdyAoYW5kIHRoYXQg
ZG9uJ3QgaGF2ZQorICAgICAgICByZWZsZWN0aW9ucyBvciBtYXNrcykuCisgICAgICAgIAorICAg
ICAgICBJZiBhbiBvdmVyZmxvdyBsYXllciBpcyBub3Qgc2VsZi1wYWludGluZywgdGhlbiBpdCBl
bmRzIHVwIHBhaW50ZWQgYnkgaXRzIHBhcmVudCBqdXN0IGxpa2UgYW55IG90aGVyIG5vcm1hbCBm
bG93IG9iamVjdC4KKyAgICAgICAgVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBjbGlw
IGhhcyB0byBiZSBwdXNoZWQgYW5kIHBvcHBlZCB3aGVuIHBhaW50aW5nIHRoZSBvYmplY3QncyBj
aGlsZHJlbi4KKyAgICAgICAgCisgICAgICAgIFRoZSBsaWdodHdlaWdodCBjbGlwcGluZyBzY2hl
bWUgdXNlZCBmb3IgY29udHJvbHMgaGFzIGJlZW4gZXh0ZW5kZWQgdG8gY292ZXIgb3ZlcmZsb3cg
bm93IGluIHRoaXMgc2ltcGxpZmllZCBjYXNlLiAgV2l0aAorICAgICAgICB0aGUgY29kZSBjb25z
b2xpZGF0ZWQgaW50byByZXVzYWJsZSBwdXNoL3BvcCBmdW5jdGlvbnMsIGFsbCBvZiB0aGUgcmVu
ZGVyZXJzIHRoYXQgdXNlIG92ZXJmbG93IGhhdmUgYmVlbiBwYXRjaGVkIHRvCisgICAgICAgIHVz
ZSB0aGUgbmV3IGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgIEhpdCB0ZXN0aW5nIGhhcyBh
bHNvIGJlZW4gcGF0Y2hlZCB0byBjaGVjayB0aGUgb3ZlcmZsb3cgY2xpcCByZWN0IGZpcnN0IGJl
Zm9yZSByZWN1cnJpbmcgaW50byBjaGlsZHJlbi4KKyAgICAgICAgCisgICAgICAgIFNjcm9sbGJh
ciBwYWludCBoYXMgYmVlbiBtb3ZlZCBpbnRvIFJlbmRlckJsb2NrIGZvciBub3csIHNpbmNlIG5v
bmUgb2YgdGhlIHRhYmxlIG9iamVjdHMgc3VwcG9ydCBzY3JvbGxiYXJzCisgICAgICAgIHlldCwg
YW5kIHNjcm9sbGJhciBoaXQgdGVzdGluZyB3YXMgYWxyZWFkeSB0aGVyZSBhbnl3YXkuICBOb3cg
dGhlIHR3byBjb2RlIHBhdGhzIGFyZSBtb3JlIHN5bW1ldHJpY2FsLgorICAgICAgICAKKyAgICAg
ICAgQSBjb3VwbGUgb2YgdGVzdCBjYXNlcyBoYXZlIGJlZW4gYWRkZWQgdG8gZmFzdC9vdmVyZmxv
dyB0byB0ZXN0IHRoZSBzdGFja2luZyBvcmRlci4gIE1hbnkgbGF5b3V0IHRlc3QgcmVzdWx0cyBo
YXZlIGNoYW5nZWQKKyAgICAgICAgYWxzbywgc2luY2UgRHVtcFJlbmRlclRyZWUgbm93IGR1bXBz
IGluIHRoZSBuZXcgc3RhY2sgb3JkZXIgYWxzby4KKyAKKyAgICAgICAgKiByZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQ
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpyZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENoaWxk
cmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpmbG9hdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
Omxvd2VzdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyaWdodG1v
c3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGVmdG1vc3RQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9h
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29udGVudHMpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2Rl
QXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnB1c2hDb250ZW50c0NsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpwb3BDb250ZW50c0NsaXApOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
cGFpbnRPYmplY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6aGFzU2VsZlBhaW50
aW5nTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzaG91bGRCZU5v
cm1hbEZsb3dPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1NlbGZQYWlu
dGluZ0xheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpwYWludE9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJs
ZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZVJvdzo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUxheWVycyk6
CisKIDIwMDktMDItMjQgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVG
bG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAkocmV2aXNpb24gNDExODgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUzLDcgKzU1Myw3IEBAIGJvb2wgSW5saW5lRmxvd0Jv
eDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKIHsKICAgICAvLyBDaGVjayBjaGlsZHJlbiBmaXJzdC4K
ICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGxhc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+cHJldk9uTGluZSgpKSB7Ci0gICAgICAgIGlmICghY3Vyci0+cmVuZGVyZXIoKS0+aGFzTGF5
ZXIoKSAmJiBjdXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSkp
IHsKKyAgICAgICAgaWYgKChjdXJyLT5yZW5kZXJlcigpLT5pc1RleHQoKSB8fCAhY3Vyci0+Ym94
TW9kZWxPYmplY3QoKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgJiYgY3Vyci0+bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHkpKSB7CiAgICAgICAgICAgICByZW5kZXJl
cigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5IC0gdHkp
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC01OTMsNyArNTkzLDcg
QEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludChSZW5kZXJPYmplY3Q6OgogICAgICAgICAgICAg
Ly8gb3V0bGluZXMuCiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IFZJU0lCTEUgJiYgcmVuZGVyZXIoKS0+aGFzT3V0bGluZSgpICYmICFpc1Jvb3RJ
bmxpbmVCb3goKSkgewogICAgICAgICAgICAgICAgIFJlbmRlcklubGluZSogaW5saW5lRmxvdyA9
IHRvUmVuZGVySW5saW5lKHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgIGlmICgoaW5saW5l
Rmxvdy0+Y29udGludWF0aW9uKCkgfHwgaW5saW5lRmxvdy0+aXNJbmxpbmVDb250aW51YXRpb24o
KSkgJiYgIXJlbmRlcmVyKCktPmhhc0xheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGlu
bGluZUZsb3ctPmNvbnRpbnVhdGlvbigpIHx8IGlubGluZUZsb3ctPmlzSW5saW5lQ29udGludWF0
aW9uKCkpICYmICFib3hNb2RlbE9iamVjdCgpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIEFkZCBvdXJzZWx2ZXMgdG8gdGhlIGNvbnRhaW5pbmcgYmxv
Y2sgb2YgdGhlIGVudGlyZSBjb250aW51YXRpb24gc28gdGhhdCBpdCBjYW4KICAgICAgICAgICAg
ICAgICAgICAgLy8gcGFpbnQgdXMgYXRvbWljYWxseS4KICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyQmxvY2sqIGJsb2NrID0gcmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCktPmNvbnRhaW5p
bmdCbG9jaygpOwpAQCAtNjI0LDcgKzYyNCw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnQo
UmVuZGVyT2JqZWN0OjoKICAgICAvLyAzLiBQYWludCBvdXIgY2hpbGRyZW4uCiAgICAgaWYgKHBh
aW50UGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSB7CiAgICAgICAgIGZvciAoSW5saW5l
Qm94KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgp
KSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnItPnJlbmRlcmVyKCktPmhhc0xheWVyKCkpCisgICAg
ICAgICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkgfHwgIWN1cnItPmJveE1vZGVs
T2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpCiAgICAgICAgICAgICAgICAgY3Vyci0+
cGFpbnQoY2hpbGRJbmZvLCB0eCwgdHkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gNDExODgpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDcsNyArMTU0Nyw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2EKICAgICAgICAgICAgIC8vIE9u
bHkgcmVwYWludCB0aGUgb2JqZWN0IGlmIGl0IGlzIG92ZXJoYW5naW5nLCBpcyBub3QgaW4gaXRz
IG93biBsYXllciwgYW5kCiAgICAgICAgICAgICAvLyBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8g
cGFpbnQgKG1fc2hvdWxkUGFpbnQgaXMgc2V0KS4gV2hlbiBwYWludEFsbERlc2NlbmRhbnRzIGlz
IHRydWUsIHRoZSBsYXR0ZXIKICAgICAgICAgICAgIC8vIGNvbmRpdGlvbiBpcyByZXBsYWNlZCB3
aXRoIGJlaW5nIGEgZGVzY2VuZGFudCBvZiB1cy4KLSAgICAgICAgICAgIGlmIChyLT5tX2JvdHRv
bSA+IGhlaWdodCgpICYmIChwYWludEFsbERlc2NlbmRhbnRzICYmIHItPm1fcmVuZGVyZXItPmlz
RGVzY2VuZGFudE9mKHRoaXMpIHx8IHItPm1fc2hvdWxkUGFpbnQpICYmICFyLT5tX3JlbmRlcmVy
LT5oYXNMYXllcigpKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHItPm1fYm90
dG9tID4gaGVpZ2h0KCkgJiYgKHBhaW50QWxsRGVzY2VuZGFudHMgJiYgci0+bV9yZW5kZXJlci0+
aXNEZXNjZW5kYW50T2YodGhpcykgfHwgci0+bV9zaG91bGRQYWludCkgJiYgIXItPm1fcmVuZGVy
ZXItPmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgci0+bV9yZW5kZXJlci0+cmVwYWludCgpOwogICAgICAgICAgICAgICAgIHItPm1fcmVu
ZGVyZXItPnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cygpOwogICAgICAgICAgICAgfQpAQCAtMTU3
NCwzNiArMTU3NCwxNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCB1c2VDb250cm9sQ2xpcCA9
IHBoYXNlICE9IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQgJiYgcGhhc2UgIT0gUGFpbnRQaGFz
ZVNlbGZPdXRsaW5lICYmIHBoYXNlICE9IFBhaW50UGhhc2VNYXNrICYmIGhhc0NvbnRyb2xDbGlw
KCk7Ci0KLSAgICAvLyBQdXNoIGEgY2xpcC4KLSAgICBpZiAodXNlQ29udHJvbENsaXApIHsKLSAg
ICAgICAgaWYgKHBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lKQotICAgICAgICAgICAgcGFpbnRJ
bmZvLnBoYXNlID0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXM7Ci0gICAgICAgIGVsc2UgaWYgKHBo
YXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkgewotICAgICAgICAgICAgcGFp
bnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZDsKLSAgICAgICAgICAgIHBh
aW50T2JqZWN0KHBhaW50SW5mbywgdHgsIHR5KTsKLSAgICAgICAgICAgIHBhaW50SW5mby5waGFz
ZSA9IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7Ci0gICAgICAgIH0KLSAgICAgICAg
SW50UmVjdCBjbGlwUmVjdChjb250cm9sQ2xpcFJlY3QodHgsIHR5KSk7Ci0gICAgICAgIGlmIChj
bGlwUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKGNsaXBS
ZWN0KTsKLSAgICB9Ci0KKyAgICBib29sIHB1c2hlZENsaXAgPSBwdXNoQ29udGVudHNDbGlwKHBh
aW50SW5mbywgdHgsIHR5KTsKICAgICBwYWludE9iamVjdChwYWludEluZm8sIHR4LCB0eSk7Ci0g
ICAgCi0gICAgLy8gUG9wIHRoZSBjbGlwLgotICAgIGlmICh1c2VDb250cm9sQ2xpcCkgewotICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgICAgICBpZiAocGhhc2UgPT0g
UGFpbnRQaGFzZU91dGxpbmUpIHsKLSAgICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50
UGhhc2VTZWxmT3V0bGluZTsKLSAgICAgICAgICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgdHgs
IHR5KTsKLSAgICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9IHBoYXNlOwotICAgICAgICB9IGVs
c2UgaWYgKHBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkKLSAgICAgICAg
ICAgIHBhaW50SW5mby5waGFzZSA9IHBoYXNlOwotICAgIH0KKyAgICBpZiAocHVzaGVkQ2xpcCkK
KyAgICAgICAgcG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIHR4LCB0eSk7CisKKyAg
ICAvLyBPdXIgc2Nyb2xsYmFyIHdpZGdldHMgcGFpbnQgZXhhY3RseSB3aGVuIHdlIHRlbGwgdGhl
bSB0bywgc28gdGhhdCB0aGV5IHdvcmsgcHJvcGVybHkgd2l0aAorICAgIC8vIHotaW5kZXguICBX
ZSBwYWludCBhZnRlciB3ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRlciwgc28gdGhhdCB0
aGUgc2Nyb2xsYmFycyB3aWxsCisgICAgLy8gc2l0IGFib3ZlIHRoZSBiYWNrZ3JvdW5kL2JvcmRl
ci4KKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgKHBoYXNlID09IFBhaW50UGhhc2VCbG9j
a0JhY2tncm91bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kKSkK
KyAgICAgICAgbGF5ZXIoKS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0
LCB0eCwgdHksIHBhaW50SW5mby5yZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRD
b2x1bW5SdWxlcyhQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCkBAIC0xNzI3
LDcgKzE3MDcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWNoaWxkLT5oYXNM
YXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpKQorICAgICAgICBpZiAoIWNoaWxkLT5oYXNT
ZWxmUGFpbnRpbmdMYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpKQogICAgICAgICAgICAg
Y2hpbGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2Ut
YnJlYWstYWZ0ZXI6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFpbC4KQEAg
LTE4MTUsNyArMTc5NSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBhaW50SW5m
byYKICAgICBpZiAoKHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgcGFpbnRQaGFz
ZSA9PSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcykpIHsKICAgICAgICAgaWYgKGlubGluZUNvbnRp
bnVhdGlvbigpICYmIGlubGluZUNvbnRpbnVhdGlvbigpLT5oYXNPdXRsaW5lKCkgJiYgaW5saW5l
Q29udGludWF0aW9uKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7CiAgICAg
ICAgICAgICBSZW5kZXJJbmxpbmUqIGlubGluZVJlbmRlcmVyID0gdG9SZW5kZXJJbmxpbmUoaW5s
aW5lQ29udGludWF0aW9uKCktPm5vZGUoKS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICBpZiAo
IWlubGluZVJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICAgICAgaWYgKCFpbmxpbmVSZW5k
ZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKICAgICAgICAgICAgICAgICBjb250YWluaW5n
QmxvY2soKS0+YWRkQ29udGludWF0aW9uV2l0aE91dGxpbmUoaW5saW5lUmVuZGVyZXIpOwogICAg
ICAgICAgICAgZWxzZSBpZiAoIWlubGluZVJlbmRlcmVyLT5maXJzdExpbmVCb3goKSkKICAgICAg
ICAgICAgICAgICBpbmxpbmVSZW5kZXJlci0+cGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0
LCB0eCAtIHgoKSArIGlubGluZVJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKS0+eCgpLApAQCAt
MTg0Miw3ICsxODIyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMoUGFpbnRJbmZv
JgogICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zs
b2F0aW5nT2JqZWN0cyk7CiAgICAgZm9yICg7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgewog
ICAgICAgICAvLyBPbmx5IHBhaW50IHRoZSBvYmplY3QgaWYgb3VyIG1fc2hvdWxkUGFpbnQgZmxh
ZyBpcyBzZXQuCi0gICAgICAgIGlmIChyLT5tX3Nob3VsZFBhaW50ICYmICFyLT5tX3JlbmRlcmVy
LT5oYXNMYXllcigpKSB7CisgICAgICAgIGlmIChyLT5tX3Nob3VsZFBhaW50ICYmICFyLT5tX3Jl
bmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICBQYWludEluZm8g
Y3VycmVudFBhaW50SW5mbyhwYWludEluZm8pOwogICAgICAgICAgICAgY3VycmVudFBhaW50SW5m
by5waGFzZSA9IHByZXNlcnZlUGhhc2UgPyBwYWludEluZm8ucGhhc2UgOiBQYWludFBoYXNlQmxv
Y2tCYWNrZ3JvdW5kOwogICAgICAgICAgICAgaW50IGN1cnJlbnRUWCA9IHR4ICsgci0+bV9sZWZ0
IC0gci0+bV9yZW5kZXJlci0+eCgpICsgci0+bV9yZW5kZXJlci0+bWFyZ2luTGVmdCgpOwpAQCAt
MjM3Niw3ICsyMzU2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3Qo
UgogICAgIG5ld09iai0+bV90b3AgPSAtMTsKICAgICBuZXdPYmotPm1fYm90dG9tID0gLTE7CiAg
ICAgbmV3T2JqLT5tX3dpZHRoID0gby0+d2lkdGgoKSArIG8tPm1hcmdpbkxlZnQoKSArIG8tPm1h
cmdpblJpZ2h0KCk7Ci0gICAgbmV3T2JqLT5tX3Nob3VsZFBhaW50ID0gIW8tPmhhc0xheWVyKCk7
IC8vIElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQgd2lsbCBwYWludCBpdHNlbGYuICBPdGhl
cndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCisgICAgbmV3T2JqLT5tX3Nob3VsZFBhaW50ID0gIW8t
Pmhhc1NlbGZQYWludGluZ0xheWVyKCk7IC8vIElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQg
d2lsbCBwYWludCBpdHNlbGYuICBPdGhlcndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCiAgICAgbmV3
T2JqLT5tX2lzRGVzY2VuZGFudCA9IHRydWU7CiAgICAgbmV3T2JqLT5tX3JlbmRlcmVyID0gbzsK
IApAQCAtMjY3Miw3ICsyNjUyLDcgQEAgSW50UmVjdCBSZW5kZXJCbG9jazo6ZmxvYXRSZWN0KCkg
Y29uc3QKICAgICBGbG9hdGluZ09iamVjdCogcjsKICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJh
dG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwogICAgIGZvciAoOyAo
ciA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKLSAgICAgICAgaWYgKHItPm1fc2hvdWxkUGFpbnQg
JiYgIXItPm1fcmVuZGVyZXItPmhhc0xheWVyKCkpIHsKKyAgICAgICAgaWYgKHItPm1fc2hvdWxk
UGFpbnQgJiYgIXItPm1fcmVuZGVyZXItPmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAg
ICAgICAgIEludFJlY3QgY2hpbGRSZWN0ID0gci0+bV9yZW5kZXJlci0+b3ZlcmZsb3dSZWN0KGZh
bHNlKTsKICAgICAgICAgICAgIGNoaWxkUmVjdC5tb3ZlKHItPm1fbGVmdCArIHItPm1fcmVuZGVy
ZXItPm1hcmdpbkxlZnQoKSwgci0+bV90b3AgKyByLT5tX3JlbmRlcmVyLT5tYXJnaW5Ub3AoKSk7
CiAgICAgICAgICAgICByZXN1bHQudW5pdGUoY2hpbGRSZWN0KTsKQEAgLTI3NDEsNyArMjcyMSw3
IEBAIGludCBSZW5kZXJCbG9jazo6bG93ZXN0UG9zaXRpb24oYm9vbCBpbmMKICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIHI7CiAgICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRp
bmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7CiAgICAgICAgIGZvciAoIDsgKHIgPSBp
dC5jdXJyZW50KCkpOyArK2l0ICkgewotICAgICAgICAgICAgaWYgKHItPm1fc2hvdWxkUGFpbnQg
fHwgci0+bV9yZW5kZXJlci0+aGFzTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKHItPm1fc2hv
dWxkUGFpbnQgfHwgci0+bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAg
ICAgICAgICAgICAgIGludCBscCA9IHItPm1fdG9wICsgci0+bV9yZW5kZXJlci0+bWFyZ2luVG9w
KCkgKyByLT5tX3JlbmRlcmVyLT5sb3dlc3RQb3NpdGlvbihmYWxzZSk7CiAgICAgICAgICAgICAg
ICAgYm90dG9tID0gbWF4KGJvdHRvbSwgbHAgKyByZWxhdGl2ZU9mZnNldCk7CiAgICAgICAgICAg
ICB9CkBAIC0yODE3LDcgKzI3OTcsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OnJpZ2h0bW9zdFBvc2l0
aW9uKGJvb2wgCiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByOwogICAgICAgICBEZXByZWNhdGVk
UHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwog
ICAgICAgICBmb3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCApIHsKLSAgICAgICAgICAg
IGlmIChyLT5tX3Nob3VsZFBhaW50IHx8IHItPm1fcmVuZGVyZXItPmhhc0xheWVyKCkpIHsKKyAg
ICAgICAgICAgIGlmIChyLT5tX3Nob3VsZFBhaW50IHx8IHItPm1fcmVuZGVyZXItPmhhc1NlbGZQ
YWludGluZ0xheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpbnQgcnAgPSByLT5tX2xlZnQgKyBy
LT5tX3JlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgKyByLT5tX3JlbmRlcmVyLT5yaWdodG1vc3RQb3Np
dGlvbihmYWxzZSk7CiAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHJwICsgcmVs
YXRpdmVPZmZzZXQpOwogICAgICAgICAgICAgfQpAQCAtMjg5OCw3ICsyODc4LDcgQEAgaW50IFJl
bmRlckJsb2NrOjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgICAgICBGbG9hdGluZ09iamVj
dCogcjsKICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4g
aXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKICAgICAgICAgZm9yICggOyAociA9IGl0LmN1cnJlbnQo
KSk7ICsraXQgKSB7Ci0gICAgICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCB8fCByLT5tX3Jl
bmRlcmVyLT5oYXNMYXllcigpKSB7CisgICAgICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCB8
fCByLT5tX3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICAg
ICAgaW50IGxwID0gci0+bV9sZWZ0ICsgci0+bV9yZW5kZXJlci0+bWFyZ2luTGVmdCgpICsgci0+
bV9yZW5kZXJlci0+bGVmdG1vc3RQb3NpdGlvbihmYWxzZSk7CiAgICAgICAgICAgICAgICAgbGVm
dCA9IG1pbihsZWZ0LCBscCArIHJlbGF0aXZlT2Zmc2V0KTsKICAgICAgICAgICAgIH0KQEAgLTMw
OTQsNyArMzA3NCw4IEBAIGludCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmUK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFw
cGVuZChmbG9hdGluZ09iaik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobWFr
ZUNoaWxkUGFpbnRPdGhlckZsb2F0cyAmJiAhci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5k
ZXJlci0+aGFzTGF5ZXIoKSAmJiByLT5tX3JlbmRlcmVyLT5pc0Rlc2NlbmRhbnRPZihjaGlsZCkg
JiYgci0+bV9yZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKSA9PSBjaGlsZC0+ZW5jbG9zaW5nTGF5
ZXIoKSkKKyAgICAgICAgfSBlbHNlIGlmIChtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRzICYmICFy
LT5tX3Nob3VsZFBhaW50ICYmICFyLT5tX3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigp
ICYmCisgICAgICAgICAgICAgICAgICAgci0+bV9yZW5kZXJlci0+aXNEZXNjZW5kYW50T2YoY2hp
bGQpICYmIHItPm1fcmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCkgPT0gY2hpbGQtPmVuY2xvc2lu
Z0xheWVyKCkpCiAgICAgICAgICAgICAvLyBUaGUgZmxvYXQgaXMgbm90IG92ZXJoYW5naW5nIGZy
b20gdGhpcyBibG9jaywgc28gaWYgaXQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjaGlsZCwgdGhl
IGNoaWxkIHNob3VsZAogICAgICAgICAgICAgLy8gcGFpbnQgaXQgKHRoZSBvdGhlciBjYXNlIGlz
IHRoYXQgaXQgaXMgaW50cnVkaW5nIGludG8gdGhlIGNoaWxkKSwgdW5sZXNzIGl0IGhhcyBpdHMg
b3duIGxheWVyIG9yIGVuY2xvc2luZwogICAgICAgICAgICAgLy8gbGF5ZXIuCkBAIC0zMTAyLDcg
KzMwODMsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5nRmxvYXRzKFJlCiAgICAg
ICAgICAgICAvLyBpdCBzaG91bGQgcGFpbnQuCiAgICAgICAgICAgICByLT5tX3Nob3VsZFBhaW50
ID0gdHJ1ZTsKIAotICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5kZXJl
ci0+aGFzTGF5ZXIoKSkgeworICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9y
ZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgSW50UmVjdCBm
bG9hdE92ZXJmbG93UmVjdCA9IHItPm1fcmVuZGVyZXItPm92ZXJmbG93UmVjdChmYWxzZSk7CiAg
ICAgICAgICAgICBmbG9hdE92ZXJmbG93UmVjdC5tb3ZlKHItPm1fbGVmdCArIHItPm1fcmVuZGVy
ZXItPm1hcmdpbkxlZnQoKSwgci0+bV90b3AgKyByLT5tX3JlbmRlcmVyLT5tYXJnaW5Ub3AoKSk7
CiAgICAgICAgICAgICBmbG9hdHNPdmVyZmxvd1JlY3QudW5pdGUoZmxvYXRPdmVyZmxvd1JlY3Qp
OwpAQCAtMzI2NCwxNiArMzI0NSwxNiBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChj
b25zdCBIaXRUCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKGlz
UG9pbnRJbk92ZXJmbG93Q29udHJvbChyZXN1bHQsIF94LCBfeSwgdHgsIHR5KSkgewotICAgICAg
ICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kKSB7Ci0gICAgICAg
ICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSB0eCwgX3kgLSB0
eSkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICgoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5k
IHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1Bv
aW50SW5PdmVyZmxvd0NvbnRyb2wocmVzdWx0LCBfeCwgX3ksIHR4LCB0eSkpIHsKKyAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0gdHgsIF95IC0gdHkpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgIC8vIElmIHdlIGhhdmUgbGlnaHR3
ZWlnaHQgY29udHJvbCBjbGlwcGluZywgdGhlbiB3ZSBjYW4ndCBoYXZlIGFueSBzcGlsbG91dC4g
Ci0gICAgaWYgKCFoYXNDb250cm9sQ2xpcCgpIHx8IGNvbnRyb2xDbGlwUmVjdCh0eCwgdHkpLmNv
bnRhaW5zKF94LCBfeSkpIHsKKyAgICAvLyBJZiB3ZSBoYXZlIGNsaXBwaW5nLCB0aGVuIHdlIGNh
bid0IGhhdmUgYW55IHNwaWxsb3V0LgorICAgIGJvb2wgdXNlT3ZlcmZsb3dDbGlwID0gaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyKCk7CisgICAgYm9vbCB1c2VDbGlw
ID0gKGhhc0NvbnRyb2xDbGlwKCkgfHwgdXNlT3ZlcmZsb3dDbGlwKTsKKyAgICBib29sIGNoZWNr
Q2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGNvbnRyb2xDbGlwUmVj
dCh0eCwgdHkpLmNvbnRhaW5zKF94LCBfeSkgOiBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuY29u
dGFpbnMoX3gsIF95KSk7CisgICAgaWYgKGNoZWNrQ2hpbGRyZW4pIHsKICAgICAgICAgLy8gSGl0
IHRlc3QgZGVzY2VuZGFudHMgZmlyc3QuCiAgICAgICAgIGludCBzY3JvbGxlZFggPSB0eDsKICAg
ICAgICAgaW50IHNjcm9sbGVkWSA9IHR5OwpAQCAtMzI5OCw3ICszMjc5LDcgQEAgYm9vbCBSZW5k
ZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIG87CiAgICAgICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2Jq
ZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwogICAgICAgICAgICAgZm9yIChpdC50b0xhc3Qo
KTsgKG8gPSBpdC5jdXJyZW50KCkpOyAtLWl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG8tPm1f
c2hvdWxkUGFpbnQgJiYgIW8tPm1fcmVuZGVyZXItPmhhc0xheWVyKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoby0+bV9zaG91bGRQYWludCAmJiAhby0+bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50
aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgICAgICBpbnQgeG9mZnNldCA9IHNjcm9sbGVk
WCArIG8tPm1fbGVmdCArIG8tPm1fcmVuZGVyZXItPm1hcmdpbkxlZnQoKSAtIG8tPm1fcmVuZGVy
ZXItPngoKTsKICAgICAgICAgICAgICAgICAgICAgaW50IHlvZmZzZXQgPSAgc2Nyb2xsZWRZICsg
by0+bV90b3AgKyBvLT5tX3JlbmRlcmVyLT5tYXJnaW5Ub3AoKSAtIG8tPm1fcmVuZGVyZXItPnko
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG8tPm1fcmVuZGVyZXItPmhpdFRlc3QocmVxdWVz
dCwgcmVzdWx0LCBJbnRQb2ludChfeCwgX3kpLCB4b2Zmc2V0LCB5b2Zmc2V0KSkgewpAQCAtMzM2
OSwxMCArMzM1MCw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb250ZW50cyhjb25zdCAK
ICAgICAgICAgSGl0VGVzdEFjdGlvbiBjaGlsZEhpdFRlc3QgPSBoaXRUZXN0QWN0aW9uOwogICAg
ICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmRzKQog
ICAgICAgICAgICAgY2hpbGRIaXRUZXN0ID0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kOwot
ICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
V2UgaGF2ZSB0byBza2lwIG92ZXIgaW5saW5lIGZsb3dzLCBzaW5jZSB0aGV5IGNhbiBzaG93IHVw
IGluc2lkZSBSZW5kZXJUYWJsZXMgYXQgdGhlIG1vbWVudCAoYSBkZW1vdGVkIGlubGluZSA8Zm9y
bT4gZm9yIGV4YW1wbGUpLiAgSWYgd2UgZXZlciBpbXBsZW1lbnQgYQotICAgICAgICAgICAgLy8g
dGFibGUtc3BlY2lmaWMgaGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQgZG8gZm9yIHBl
cmZvcm1hbmNlIHJlYXNvbnMgYW55d2F5KSwgdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2su
Ci0gICAgICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGlu
ZygpICYmICFjaGlsZC0+aXNSZW5kZXJJbmxpbmUoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVx
dWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGNoaWxkSGl0VGVzdCkpIHsKKyAgICAgICAgZm9y
IChSZW5kZXJCb3gqIGNoaWxkID0gbGFzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5wcmV2aW91c1NpYmxpbmdCb3goKSkgeworICAgICAgICAgICAgaWYgKCFjaGlsZC0+aGFzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZC0+bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGNoaWxkSGl0VGVzdCkpIHsKICAg
ICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4
LCB5IC0gdHkpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNDExODgpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTUsMTEgKzU1NSw4
IEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXMKIAogICAgIC8vIENo
ZWNrIGtpZHMgZmlyc3QuCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICAv
LyBGSVhNRTogV2UgaGF2ZSB0byBza2lwIG92ZXIgaW5saW5lIGZsb3dzLCBzaW5jZSB0aGV5IGNh
biBzaG93IHVwIGluc2lkZSB0YWJsZSByb3dzCi0gICAgICAgIC8vIGF0IHRoZSBtb21lbnQgKGEg
ZGVtb3RlZCBpbmxpbmUgPGZvcm0+IGZvciBleGFtcGxlKS4gSWYgd2UgZXZlciBpbXBsZW1lbnQg
YQotICAgICAgICAvLyB0YWJsZS1zcGVjaWZpYyBoaXQtdGVzdCBtZXRob2QgKHdoaWNoIHdlIHNo
b3VsZCBkbyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbnl3YXkpLAotICAgICAgICAvLyB0aGVu
IHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KLSAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIo
KSAmJiAhY2hpbGQtPmlzUmVuZGVySW5saW5lKCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVl
c3QsIHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5LCBhY3Rpb24pKSB7CisgICAgICAgIEFTU0VS
VCghY2hpbGQtPmhhc0xheWVyKCkpOworICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYm
IGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHhQb3MsIHlQb3MsIHR4LCB0eSwg
YWN0aW9uKSkgewogICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBv
aW50KHhQb3MgLSB0eCwgeVBvcyAtIHR5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQpAQCAtODUyLDYgKzg0OSw0MyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRDdXN0b21I
aWdobGlnaHQoaW50CiAKICNlbmRpZgogCitib29sIFJlbmRlckJveDo6cHVzaENvbnRlbnRzQ2xp
cChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit7CisgICAgaWYgKHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhh
c2VNYXNrKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGJvb2wgaXNDb250
cm9sQ2xpcCA9IGhhc0NvbnRyb2xDbGlwKCk7CisgICAgYm9vbCBpc092ZXJmbG93Q2xpcCA9IGhh
c092ZXJmbG93Q2xpcCgpICYmICFsYXllcigpLT5pc1NlbGZQYWludGluZ0xheWVyKCk7CisgICAg
CisgICAgaWYgKCFpc0NvbnRyb2xDbGlwICYmICFpc092ZXJmbG93Q2xpcCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91
dGxpbmUpCisgICAgICAgIHBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVz
OworICAgIGVsc2UgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0Jh
Y2tncm91bmQpIHsKKyAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUJsb2NrQmFj
a2dyb3VuZDsKKyAgICAgICAgcGFpbnRPYmplY3QocGFpbnRJbmZvLCB0eCwgdHkpOworICAgICAg
ICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOworICAg
IH0KKyAgICBJbnRSZWN0IGNsaXBSZWN0KGlzQ29udHJvbENsaXAgPyBjb250cm9sQ2xpcFJlY3Qo
dHgsIHR5KSA6IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KSk7CisgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNhdmUoKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChjbGlwUmVjdCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyQm94Ojpwb3BDb250ZW50c0NsaXAoUGFpbnRJ
bmZvJiBwYWludEluZm8sIFBhaW50UGhhc2Ugb3JpZ2luYWxQaGFzZSwgaW50IHR4LCBpbnQgdHkp
Cit7CisgICAgQVNTRVJUKGhhc0NvbnRyb2xDbGlwKCkgfHwgKGhhc092ZXJmbG93Q2xpcCgpICYm
ICFsYXllcigpLT5pc1NlbGZQYWludGluZ0xheWVyKCkpKTsKKworICAgIHBhaW50SW5mby5jb250
ZXh0LT5yZXN0b3JlKCk7CisgICAgaWYgKG9yaWdpbmFsUGhhc2UgPT0gUGFpbnRQaGFzZU91dGxp
bmUpIHsKKyAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lOwor
ICAgICAgICBwYWludE9iamVjdChwYWludEluZm8sIHR4LCB0eSk7CisgICAgICAgIHBhaW50SW5m
by5waGFzZSA9IG9yaWdpbmFsUGhhc2U7CisgICAgfSBlbHNlIGlmIChvcmlnaW5hbFBoYXNlID09
IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkKKyAgICAgICAgcGFpbnRJbmZvLnBoYXNl
ID0gb3JpZ2luYWxQaGFzZTsKK30KKwogSW50UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJl
Y3QoaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgLy8gRklYTUU6IFdoZW4gb3ZlcmZsb3ctY2xpcCAo
Q1NTMykgaXMgaW1wbGVtZW50ZWQsIHdlJ2xsIG9idGFpbiB0aGUgcHJvcGVydHkKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA0MTE4OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDEwIEBAIHB1YmxpYzoKICAg
ICBJbnRSZWN0IGNsaXBSZWN0KGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIGJvb2wgaGFz
Q29udHJvbENsaXAoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgSW50UmVj
dCBjb250cm9sQ2xpcFJlY3QoaW50IC8qdHgqLywgaW50IC8qdHkqLykgY29uc3QgeyByZXR1cm4g
SW50UmVjdCgpOyB9CisgICAgYm9vbCBwdXNoQ29udGVudHNDbGlwKFBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5KTsKKyAgICB2b2lkIHBvcENvbnRlbnRzQ2xpcChQYWludEluZm8mLCBQYWludFBo
YXNlIG9yaWdpbmFsUGhhc2UsIGludCB0eCwgaW50IHR5KTsKIAorICAgIHZpcnR1YWwgdm9pZCBw
YWludE9iamVjdChQYWludEluZm8mLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFp
bnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludE1hc2soUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQgaW1h
Z2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCogPSAwKTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDQxMTg4
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MCw2ICs2MCwxMSBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkZXN0
cm95KCkKICAgICBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKTsKIH0KIAorYm9vbCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X2xheWVyICYmIG1fbGF5ZXItPmlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKK30KKwogdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCiB7CiAgICAgc193YXNGbG9hdGluZyA9IGlzRmxv
YXRpbmcoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAko
cmV2aXNpb24gNDExODgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCb3hNb2RlbEluZm9Gcm9tU3R5bGUo
KTsKIAorICAgIGJvb2wgaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKICAgICBSZW5kZXJM
YXllciogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9CiAgICAgdmlydHVhbCBib29s
IHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1Jvb3QoKSB8fCBpc1Bvc2l0aW9uZWQo
KSB8fCBpc1JlbFBvc2l0aW9uZWQoKSB8fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFzT3ZlcmZsb3dD
bGlwKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzTWFzaygpIHx8IGhhc1JlZmxlY3Rpb24oKTsg
fQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA0MTE4OCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkz
OCwxMSArMTkzOCw2IEBAIFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRlckxheWVyKiByb28K
ICAgICAgICAgUmVuZGVyT2JqZWN0OjpQYWludEluZm8gcGFpbnRJbmZvKHAsIGRhbWFnZVJlY3Qs
IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQsIGZhbHNlLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJl
ciwgMCk7CiAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKIAot
ICAgICAgICAvLyBPdXIgc2Nyb2xsYmFyIHdpZGdldHMgcGFpbnQgZXhhY3RseSB3aGVuIHdlIHRl
bGwgdGhlbSB0bywgc28gdGhhdCB0aGV5IHdvcmsgcHJvcGVybHkgd2l0aAotICAgICAgICAvLyB6
LWluZGV4LiAgV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIs
IHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAotICAgICAgICAvLyBzaXQgYWJvdmUgdGhlIGJh
Y2tncm91bmQvYm9yZGVyLgotICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMocCwgeCwgeSwg
ZGFtYWdlUmVjdCk7Ci0gICAgICAgIAogICAgICAgICAvLyBSZXN0b3JlIHRoZSBjbGlwLgogICAg
ICAgICByZXN0b3JlQ2xpcChwLCBwYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7CiAgICAgfQpA
QCAtMTk4Nyw5ICsxOTgyLDExIEBAIFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRlckxheWVy
KiByb28KICAgICAKICAgICAvLyBQYWludCBhbnkgY2hpbGQgbGF5ZXJzIHRoYXQgaGF2ZSBvdmVy
Zmxvdy4KICAgICBpZiAobV9ub3JtYWxGbG93TGlzdCkKLSAgICAgICAgZm9yIChWZWN0b3I8UmVu
ZGVyTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX25vcm1hbEZsb3dMaXN0LT5iZWdpbigpOyBpdCAh
PSBtX25vcm1hbEZsb3dMaXN0LT5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGl0WzBdLT5wYWlu
dExheWVyKHJvb3RMYXllciwgcCwgcGFpbnREaXJ0eVJlY3QsIGhhdmVUcmFuc3BhcmVuY3ksIHBh
aW50UmVzdHJpY3Rpb24sIHBhaW50aW5nUm9vdCwgZmFsc2UsIHRlbXBvcmFyeUNsaXBSZWN0cyk7
Ci0gICAgCisgICAgICAgIGZvciAoVmVjdG9yPFJlbmRlckxheWVyKj46Oml0ZXJhdG9yIGl0ID0g
bV9ub3JtYWxGbG93TGlzdC0+YmVnaW4oKTsgaXQgIT0gbV9ub3JtYWxGbG93TGlzdC0+ZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChpdFswXS0+aXNTZWxmUGFpbnRpbmdMYXllcigpKQor
ICAgICAgICAgICAgICAgIGl0WzBdLT5wYWludExheWVyKHJvb3RMYXllciwgcCwgcGFpbnREaXJ0
eVJlY3QsIGhhdmVUcmFuc3BhcmVuY3ksIHBhaW50UmVzdHJpY3Rpb24sIHBhaW50aW5nUm9vdCwg
ZmFsc2UsIHRlbXBvcmFyeUNsaXBSZWN0cyk7CisgICAgICAgIH0KKwogICAgIC8vIE5vdyB3YWxr
IHRoZSBzb3J0ZWQgbGlzdCBvZiBjaGlsZHJlbiB3aXRoIHBvc2l0aXZlIHotaW5kaWNlcy4KICAg
ICBpZiAobV9wb3NaT3JkZXJMaXN0KQogICAgICAgICBmb3IgKFZlY3RvcjxSZW5kZXJMYXllcio+
OjppdGVyYXRvciBpdCA9IG1fcG9zWk9yZGVyTGlzdC0+YmVnaW4oKTsgaXQgIT0gbV9wb3NaT3Jk
ZXJMaXN0LT5lbmQoKTsgKytpdCkKQEAgLTIxMjAsNyArMjExNyw4IEBAIFJlbmRlckxheWVyKiBS
ZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAvLyBOb3cgY2hlY2sgb3VyIG92ZXJmbG93
IG9iamVjdHMuCiAgICAgaWYgKG1fbm9ybWFsRmxvd0xpc3QpIHsKICAgICAgICAgZm9yIChpbnQg
aSA9IG1fbm9ybWFsRmxvd0xpc3QtPnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAg
ICAgICBpbnNpZGVMYXllciA9IG1fbm9ybWFsRmxvd0xpc3QtPmF0KGkpLT5oaXRUZXN0TGF5ZXIo
cm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQpOwor
ICAgICAgICAgICAgaWYgKG1fbm9ybWFsRmxvd0xpc3QtPmF0KGkpLT5pc1NlbGZQYWludGluZ0xh
eWVyKCkpCisgICAgICAgICAgICAgICAgaW5zaWRlTGF5ZXIgPSBtX25vcm1hbEZsb3dMaXN0LT5h
dChpKS0+aGl0VGVzdExheWVyKHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVj
dCwgaGl0VGVzdFBvaW50KTsKICAgICAgICAgICAgIGlmIChpbnNpZGVMYXllcikKICAgICAgICAg
ICAgICAgICByZXR1cm4gaW5zaWRlTGF5ZXI7CiAgICAgICAgIH0KQEAgLTI3NDIsMTMgKzI3NDAs
MTggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2V0QmFja2luZ05lZWRzUmVwYWludAogCiBib29sIFJl
bmRlckxheWVyOjpzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
KHJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCktPmhhc1JlZmxlY3Rp
b24oKSkgJiYgCisgICAgcmV0dXJuIChyZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSB8fCBy
ZW5kZXJlcigpLT5oYXNSZWZsZWN0aW9uKCkgfHwgcmVuZGVyZXIoKS0+aGFzTWFzaygpKSAmJiAK
ICAgICAgICAgICAgIXJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpICYmCiAgICAgICAgICAgICFy
ZW5kZXJlcigpLT5pc1JlbFBvc2l0aW9uZWQoKSAmJgogICAgICAgICAgICAhcmVuZGVyZXIoKS0+
aGFzVHJhbnNmb3JtKCkgJiYKICAgICAgICAgICAgIWlzVHJhbnNwYXJlbnQoKTsKIH0KIAorYm9v
bCBSZW5kZXJMYXllcjo6aXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFpc05vcm1hbEZsb3dPbmx5KCkgfHwgcmVuZGVyZXIoKS0+aGFzUmVmbGVjdGlvbigpIHx8IHJl
bmRlcmVyKCktPmhhc01hc2soKSB8fCByZW5kZXJlcigpLT5pc1RhYmxlUm93KCk7Cit9CisKIHZv
aWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqKQogewogICAgIGJvb2wgaXNOb3JtYWxGbG93T25seSA9IHNob3VsZEJlTm9y
bWFsRmxvd09ubHkoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gNDEx
ODgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTgsNiArMjE4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3VzcGVuZE1hcnF1ZWVzKCk7CiAK
ICAgICBib29sIGlzTm9ybWFsRmxvd09ubHkoKSBjb25zdCB7IHJldHVybiBtX2lzTm9ybWFsRmxv
d09ubHk7IH0KKyAgICBib29sIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKIAogICAgIGJv
b2wgcmVxdWlyZXNTbG93UmVwYWludHMoKSBjb25zdDsKIApAQCAtNDU3LDcgKzQ1OCw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKGJvb2wqIG5lZWRIQmFy
ID0gMCwgYm9vbCogbmVlZFZCYXIgPSAwKTsKIAotICAgIGJvb2wgc2hvdWxkQmVOb3JtYWxGbG93
T25seSgpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkQmVOb3JtYWxGbG93T25seSgpIGNvbnN0OyAg
ICAKIAogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJl
Y3QmKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDQxMTg4KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTAsNiArNDUwLDE1IEBAIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQK
ICAgICBpZiAodHggKyBvdmVyZmxvd0xlZnQoZmFsc2UpID49IHBhaW50SW5mby5yZWN0LnJpZ2h0
KCkgKyBvcyB8fCB0eCArIG92ZXJmbG93V2lkdGgoZmFsc2UpIDw9IHBhaW50SW5mby5yZWN0Lngo
KSAtIG9zKQogICAgICAgICByZXR1cm47CiAKKyAgICBib29sIHB1c2hlZENsaXAgPSBwdXNoQ29u
dGVudHNDbGlwKHBhaW50SW5mbywgdHgsIHR5KTsgICAgCisgICAgcGFpbnRPYmplY3QocGFpbnRJ
bmZvLCB0eCwgdHkpOworICAgIGlmIChwdXNoZWRDbGlwKQorICAgICAgICBwb3BDb250ZW50c0Ns
aXAocGFpbnRJbmZvLCBwYWludFBoYXNlLCB0eCwgdHkpOworfQorCit2b2lkIFJlbmRlclRhYmxl
OjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCit7Cisg
ICAgUGFpbnRQaGFzZSBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwogICAgIGlmICgocGFp
bnRQaGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBhaW50UGhhc2UgPT0gUGFp
bnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBoYXNCb3hEZWNvcmF0aW9ucygpICYmIHN0
eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQogICAgICAgICBwYWludEJveERlY29yYXRp
b25zKHBhaW50SW5mbywgdHgsIHR5KTsKIApAQCAtNDYxLDE5ICs0NzAsMjAgQEAgdm9pZCBSZW5k
ZXJUYWJsZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgIC8vIFdlJ3JlIGRvbmUuICBXZSBk
b24ndCBib3RoZXIgcGFpbnRpbmcgYW55IGNoaWxkcmVuLgogICAgIGlmIChwYWludFBoYXNlID09
IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpCiAgICAgICAgIHJldHVybjsKLQorICAgIAogICAg
IC8vIFdlIGRvbid0IHBhaW50IG91ciBvd24gYmFja2dyb3VuZCwgYnV0IHdlIGRvIGxldCB0aGUg
a2lkcyBwYWludCB0aGVpciBiYWNrZ3JvdW5kcy4KICAgICBpZiAocGFpbnRQaGFzZSA9PSBQYWlu
dFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzKQogICAgICAgICBwYWludFBoYXNlID0gUGFpbnRQ
aGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kOworCiAgICAgUGFpbnRJbmZvIGluZm8ocGFpbnRJbmZv
KTsKICAgICBpbmZvLnBoYXNlID0gcGFpbnRQaGFzZTsKICAgICBpbmZvLnBhaW50aW5nUm9vdCA9
IHBhaW50aW5nUm9vdEZvckNoaWxkcmVuKHBhaW50SW5mbyk7CiAKICAgICBmb3IgKFJlbmRlck9i
amVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgKGNoaWxkLT5pc1Rh
YmxlU2VjdGlvbigpIHx8IGNoaWxkID09IG1fY2FwdGlvbikpCisgICAgICAgIGlmIChjaGlsZC0+
aXNCb3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYm
IChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pKQogICAgICAg
ICAgICAgY2hpbGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CiAgICAgfQotCisgICAgCiAgICAgaWYg
KGNvbGxhcHNlQm9yZGVycygpICYmIHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tC
YWNrZ3JvdW5kICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7CiAgICAgICAg
IC8vIENvbGxlY3QgYWxsIHRoZSB1bmlxdWUgYm9yZGVyIHN0eWxlcyB0aGF0IHdlIHdhbnQgdG8g
cGFpbnQgaW4gYSBzb3J0ZWQgbGlzdC4gIE9uY2Ugd2UKICAgICAgICAgLy8gaGF2ZSBhbGwgdGhl
IHN0eWxlcyBzb3J0ZWQsIHdlIHRoZW4gZG8gaW5kaXZpZHVhbCBwYXNzZXMsIHBhaW50aW5nIGVh
Y2ggc3R5bGUgb2YgYm9yZGVyCkBAIC0xMTM1LDQgKzExNDUsMjkgQEAgSW50UmVjdCBSZW5kZXJU
YWJsZTo6b3ZlcmZsb3dDbGlwUmVjdChpbgogICAgIHJldHVybiByZWN0OwogfQogCitib29sIFJl
bmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB0eCwgaW50IHR5LCBI
aXRUZXN0QWN0aW9uIGFjdGlvbikKK3sKKyAgICB0eCArPSB4KCk7CisgICAgdHkgKz0geSgpOwor
CisgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8
IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94
KCkgJiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hp
bGQtPmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQgPT0gbV9jYXB0aW9uKSAmJgorICAgICAgICAg
ICAgICAgIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHhQb3MsIHlQb3MsIHR4
LCB0eSwgYWN0aW9uKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBJbnRQb2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0eSkpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hl
Y2sgb3VyIGJvdW5kcyBuZXh0LgorICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgKGFj
dGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRC
bG9ja0JhY2tncm91bmQpICYmIEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkuY29u
dGFpbnMoeFBvcywgeVBvcykpIHsKKyAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IEludFBvaW50KHhQb3MgLSB0eCwgeVBvcyAtIHR5KSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5oCShyZXZpc2lvbiA0MTE4OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDExICs3NSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCogb2xkQ2hpbGQpOwogCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwg
dm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRNYXNrKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGlu
dCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBjYWxj
UHJlZldpZHRocygpOwotCisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4UG9zLCBpbnQgeVBvcywgaW50IHR4LCBp
bnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIAogICAgIHZpcnR1YWwgaW50IGZpcnN0TGluZUJv
eEJhc2VsaW5lKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIFJlbmRlckJsb2NrKiBmaXJzdExpbmVC
bG9jaygpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShy
ZXZpc2lvbiA0MTE4OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY0OSwyMiArNjQ5LDE3IEBAIGludCBSZW5kZXJUYWJsZUNlbGw6
OmJvcmRlckhhbGZCb3R0b20oYm8KIAogdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICB0eCArPSB4KCk7Ci0gICAg
dHkgKz0geSgpOwotCi0gICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBh
bGwuLi4KLSAgICBpbnQgb3MgPSAyICogbWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFz
ZSk7Ci0KICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJs
ZUJvcmRlcnMgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKLSAgICAgICAg
aWYgKHR5IC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJUb3AoKSA+PSBwYWludEluZm8ucmVjdC5ib3R0
b20oKSArIG9zIHx8Ci0gICAgICAgICAgICAgICAgdHkgKyBoZWlnaHQoKSArIHRhYmxlKCktPm91
dGVyQm9yZGVyQm90dG9tKCkgPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHBhaW50Q29sbGFwc2VkQm9yZGVyKHBhaW50SW5mby5jb250ZXh0
LCB0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
dHkgKyBvdmVyZmxvd1RvcChmYWxzZSkgPj0gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgKyBvcyB8
fCB0eSArIG92ZXJmbG93SGVpZ2h0KGZhbHNlKSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBh
aW50SW5mbywgdHgsIHR5KTsKLSAgICB9CisgICAgICAgIHR4ICs9IHgoKTsKKyAgICAgICAgdHkg
Kz0geSgpOworICAgICAgICBpbnQgb3MgPSAyICogbWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5m
by5waGFzZSk7CisgICAgICAgIGlmICh0eSAtIHRhYmxlKCktPm91dGVyQm9yZGVyVG9wKCkgPCBw
YWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zICYmCisgICAgICAgICAgICB0eSArIGhlaWdodCgp
ICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20oKSA+IHBhaW50SW5mby5yZWN0LnkoKSAtIG9z
KQorICAgICAgICAgICAgcGFpbnRDb2xsYXBzZWRCb3JkZXIocGFpbnRJbmZvLmNvbnRleHQsIHR4
LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICByZXR1cm47CisgICAgfSAKKyAgICAK
KyAgICBSZW5kZXJCbG9jazo6cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogfQogCiBzdGF0aWMg
RUJvcmRlclN0eWxlIGNvbGxhcHNlZEJvcmRlclN0eWxlKEVCb3JkZXJTdHlsZSBzdHlsZSkKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJldmlzaW9uIDQxMTg4KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODMsNyArMTgzLDcgQEAgYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSAog
ICAgICAgICAvLyBhdCB0aGUgbW9tZW50IChhIGRlbW90ZWQgaW5saW5lIDxmb3JtPiBmb3IgZXhh
bXBsZSkuIElmIHdlIGV2ZXIgaW1wbGVtZW50IGEKICAgICAgICAgLy8gdGFibGUtc3BlY2lmaWMg
aGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQgZG8gZm9yIHBlcmZvcm1hbmNlIHJlYXNv
bnMgYW55d2F5KSwKICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCi0g
ICAgICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgIWNoaWxkLT5pc1JlbmRlcklubGluZSgp
ICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgYWN0
aW9uKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVDZWxsKCkgJiYgIXRvUmVuZGVyQm94
KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVx
dWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGFjdGlvbikpIHsKICAgICAgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE5NCwxMCArMTk0LDkgQEAgYm9vbCBS
ZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSAogCiB2b2lkIFJlbmRlclRhYmxlUm93
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgQVNT
RVJUKGhhc0xheWVyKCkpOworICAgIEFTU0VSVChoYXNTZWxmUGFpbnRpbmdMYXllcigpKTsKICAg
ICBpZiAoIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ2VsbCgpKSB7CiAgICAgICAgICAgICAv
LyBQYWludCB0aGUgcm93IGJhY2tncm91bmQgYmVoaW5kIHRoZSBjZWxsLgpAQCAtMjA1LDcgKzIw
NCw3IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAgICAg
ICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNl
bGwqPihjaGlsZCk7CiAgICAgICAgICAgICAgICAgY2VsbC0+cGFpbnRCYWNrZ3JvdW5kc0JlaGlu
ZENlbGwocGFpbnRJbmZvLCB0eCwgdHksIHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSkKKyAgICAgICAgICAgIGlmICghdG9SZW5kZXJCb3go
Y2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKQogICAgICAgICAgICAgICAgIGNoaWxkLT5w
YWludChwYWludEluZm8sIHR4LCB0eSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlUm93LmgJKHJldmlzaW9uIDQxMTg4KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVSb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gaXNU
cmFuc3BhcmVudCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhh
c01hc2soKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwg
aW50IHR5KTsKKwogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRy
LCBjb25zdCBJbnRSZWN0KiA9IDApOwogCiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5n
ZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDQxMTg4KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTM5LDggKzkzOSwyMCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnQoUGFp
bnRJbmZvCiAgICAgdHggKz0geCgpOwogICAgIHR5ICs9IHkoKTsKIAorICAgIFBhaW50UGhhc2Ug
cGhhc2UgPSBwYWludEluZm8ucGhhc2U7CisgICAgYm9vbCBwdXNoZWRDbGlwID0gcHVzaENvbnRl
bnRzQ2xpcChwYWludEluZm8sIHR4LCB0eSk7CisgICAgcGFpbnRPYmplY3QocGFpbnRJbmZvLCB0
eCwgdHkpOworICAgIGlmIChwdXNoZWRDbGlwKQorICAgICAgICBwb3BDb250ZW50c0NsaXAocGFp
bnRJbmZvLCBwaGFzZSwgdHgsIHR5KTsKK30KKwordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBh
aW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKK3sKICAgICAv
LyBDaGVjayB3aGljaCByb3dzIGFuZCBjb2xzIGFyZSB2aXNpYmxlIGFuZCBvbmx5IHBhaW50IHRo
ZXNlLgogICAgIC8vIEZJWE1FOiBDb3VsZCB1c2UgYSBiaW5hcnkgc2VhcmNoIGhlcmUuCisgICAg
dW5zaWduZWQgdG90YWxSb3dzID0gbV9ncmlkUm93czsKKyAgICB1bnNpZ25lZCB0b3RhbENvbHMg
PSB0YWJsZSgpLT5jb2x1bW5zKCkuc2l6ZSgpOworCiAgICAgUGFpbnRQaGFzZSBwYWludFBoYXNl
ID0gcGFpbnRJbmZvLnBoYXNlOwogICAgIGludCB4ID0gcGFpbnRJbmZvLnJlY3QueCgpOwogICAg
IGludCB5ID0gcGFpbnRJbmZvLnJlY3QueSgpOwpAQCAtMTAyNywxMSArMTAzOSwxMSBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZvCiAKICAgICAgICAgICAgICAgICAg
ICAgLy8gUGFpbnQgdGhlIHJvdyBuZXh0LCBidXQgb25seSBpZiBpdCBkb2Vzbid0IGhhdmUgYSBs
YXllci4gIElmIGEgcm93IGhhcyBhIGxheWVyLCBpdCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvcgog
ICAgICAgICAgICAgICAgICAgICAvLyBwYWludGluZyB0aGUgcm93IGJhY2tncm91bmQgZm9yIHRo
ZSBjZWxsLgotICAgICAgICAgICAgICAgICAgICBpZiAoIXJvdy0+aGFzTGF5ZXIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFyb3ctPmhhc1NlbGZQYWludGluZ0xheWVyKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjZWxsLT5wYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChwYWludElu
Zm8sIHR4LCB0eSwgcm93KTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBp
ZiAoKCFjZWxsLT5oYXNMYXllcigpICYmICFyb3ctPmhhc0xheWVyKCkpIHx8IHBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlQ29sbGFwc2VkVGFibGVCb3JkZXJzKQorICAgICAgICAgICAgICAg
IGlmICgoIWNlbGwtPmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIXJvdy0+aGFzU2VsZlBhaW50
aW5nTGF5ZXIoKSkgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJs
ZUJvcmRlcnMpCiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPnBhaW50KHBhaW50SW5mbywgdHgs
IHR5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTEyNCwxMiArMTEzNiwxNSBAQCBi
b29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgdHggKz0geCgpOwog
ICAgIHR5ICs9IHkoKTsKIAorICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhb3ZlcmZsb3dD
bGlwUmVjdCh0eCwgdHkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBX
ZSBoYXZlIHRvIHNraXAgb3ZlciBpbmxpbmUgZmxvd3MsIHNpbmNlIHRoZXkgY2FuIHNob3cgdXAg
aW5zaWRlIHRhYmxlIHJvd3MKICAgICAgICAgLy8gYXQgdGhlIG1vbWVudCAoYSBkZW1vdGVkIGlu
bGluZSA8Zm9ybT4gZm9yIGV4YW1wbGUpLiBJZiB3ZSBldmVyIGltcGxlbWVudCBhCiAgICAgICAg
IC8vIHRhYmxlLXNwZWNpZmljIGhpdC10ZXN0IG1ldGhvZCAod2hpY2ggd2Ugc2hvdWxkIGRvIGZv
ciBwZXJmb3JtYW5jZSByZWFzb25zIGFueXdheSksCiAgICAgICAgIC8vIHRoZW4gd2UgY2FuIHJl
bW92ZSB0aGlzIGNoZWNrLgotICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmICFjaGls
ZC0+aXNSZW5kZXJJbmxpbmUoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCB4UG9zLCB5UG9zLCB0eCwgdHksIGFjdGlvbikpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc0Jv
eCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgY2hp
bGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5LCBhY3Rp
b24pKSB7CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQo
eFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkocmV2aXNpb24g
NDExODgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBAIHB1YmxpYzoKICAgICBpbnQgb3V0ZXJCb3JkZXJS
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0ZXJCb3JkZXJSaWdodDsgfQogCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworCiAgICAgdmlydHVh
bCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7
CiAKICAgICBpbnQgbnVtUm93cygpIGNvbnN0IHsgcmV0dXJuIG1fZ3JpZFJvd3M7IH0KSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA0MTE4OCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NzIsMTAgKzQ3MiwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtJiB0
cywgCiAgICAgaWYgKHNob3VsZFBhaW50KQogICAgICAgICB3cml0ZSh0cywgKmwsIGxheWVyQm91
bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0LCBuZWdMaXN0ICYm
IG5lZ0xpc3QtPnNpemUoKSA+IDAsIGluZGVudCk7CiAKLSAgICBWZWN0b3I8UmVuZGVyTGF5ZXIq
Piogb3ZlcmZsb3dMaXN0ID0gbC0+bm9ybWFsRmxvd0xpc3QoKTsKLSAgICBpZiAob3ZlcmZsb3dM
aXN0KSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gb3ZlcmZsb3dMaXN0LT5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgIHdyaXRlTGF5ZXJzKHRzLCByb290TGF5ZXIsIG92ZXJm
bG93TGlzdC0+YXQoaSksIHBhaW50RGlydHlSZWN0LCBpbmRlbnQpOworICAgIFZlY3RvcjxSZW5k
ZXJMYXllcio+KiBub3JtYWxGbG93TGlzdCA9IGwtPm5vcm1hbEZsb3dMaXN0KCk7CisgICAgaWYg
KG5vcm1hbEZsb3dMaXN0KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbm9y
bWFsRmxvd0xpc3QtPnNpemUoKTsgKytpKQorICAgICAgICAgICAgd3JpdGVMYXllcnModHMsIHJv
b3RMYXllciwgbm9ybWFsRmxvd0xpc3QtPmF0KGkpLCBwYWludERpcnR5UmVjdCwgaW5kZW50KTsK
ICAgICB9CiAKICAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiogcG9zTGlzdCA9IGwtPnBvc1pPcmRl
ckxpc3QoKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3ctZmxvYXQt
c3RhY2tpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L292ZXJmbG93L292
ZXJmbG93LWZsb2F0LXN0YWNraW5nLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L292ZXJmbG93L292ZXJmbG93LWZsb2F0LXN0YWNraW5nLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTMgQEAKKzxodG1sPgorPGJvZHk+CitNYWtlIHN1cmUgdGhhdCBmbG9hdGluZyBv
dmVyZmxvdzphdXRvL2hpZGRlbi9zY3JvbGwgYmxvY2tzIHN0YWNrIHByb3Blcmx5IHdpdGggb3Ro
ZXIgZmxvYXRzIGF0IHRoZSBzYW1lIGxldmVsLgorCis8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0OyBv
dmVyZmxvdzphdXRvOyB3aWR0aDozMDBweDsgaGVpZ2h0OjMwMHB4OyBiYWNrZ3JvdW5kLWNvbG9y
OmxpbWU7ICI+SGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJy
PgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVs
bG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29y
bGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+
CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxs
byB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3Js
ZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4K
K0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxv
IHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxk
PGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgor
SGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8g
d29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8
YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitI
ZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3
b3JsZDxicj4KKzwvZGl2PgorPGRpdiBzdHlsZT0iZmxvYXQ6bGVmdDsgYmFja2dyb3VuZC1jb2xv
cjp5ZWxsb3c7d2lkdGg6MzAwcHg7aGVpZ2h0OjMwMHB4OyBmb250LXNpemU6NDhweDsgbWFyZ2lu
LWxlZnQ6LTUwcHgiPlRoaXMgYmxvY2sgc2hvdWxkIGJlIG9uIHRvcCBvZiB0aGUgb3ZlcmZsb3cg
YmxvY2suPC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9vdmVyZmxvdy9vdmVyZmxvdy1zdGFja2luZy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3ctc3RhY2tpbmcuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3ctc3RhY2tpbmcuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorPGh0bWw+Cis8Ym9keT4KK01ha2Ugc3VyZSB0
aGF0IG92ZXJmbG93OmF1dG8vaGlkZGVuL3Njcm9sbCBibG9ja3MgaW50ZXJsZWF2ZSB0aGVpciBi
YWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kIHdpdGggb3RoZXIgb3ZlcmxhcHBpbmcgYmxvY2tzIGlu
IHRoZSBub3JtYWwgZmxvdy4KKworPGRpdiBzdHlsZT0ib3ZlcmZsb3c6YXV0bzsgd2lkdGg6MzAw
cHg7IGhlaWdodDozMDBweDsgYmFja2dyb3VuZC1jb2xvcjpsaW1lOyAiPkhlbGxvIHdvcmxkPGJy
PgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVs
bG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29y
bGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+
CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxs
byB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3Js
ZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4K
K0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxv
IHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxk
PGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgor
SGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8g
d29ybGQ8YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8
YnI+CitIZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitI
ZWxsbyB3b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+CitIZWxsbyB3
b3JsZDxicj4KK0hlbGxvIHdvcmxkPGJyPgorSGVsbG8gd29ybGQ8YnI+Cis8L2Rpdj4KKzxkaXYg
c3R5bGU9ImJhY2tncm91bmQtY29sb3I6eWVsbG93O3dpZHRoOjMwMHB4O2hlaWdodDozMDBweDsg
Zm9udC1zaXplOjQ4cHg7IG1hcmdpbi10b3A6LTUwcHgiPlRoaXMgdGV4dCBvdmVybGFwcy48L2Rp
dj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>
<flag name="review"
          id="13606"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>