<?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>94724</bug_id>
          
          <creation_ts>2012-08-22 10:32:53 -0700</creation_ts>
          <short_desc>[BlackBerry] Extend LayerFilterRenderer in preparation for CSS Shaders</short_desc>
          <delta_ts>2012-08-24 08:12:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit BlackBerry</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>94728</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Joshua Netterfield">jnetterfield</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>anilsson</cc>
    
    <cc>mifenton</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>702035</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-08-22 10:32:53 -0700</bug_when>
    <thetext>There are some features missing in LayerFilterRenderer that are needed to implement CSS Shaders for BB10.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703452</commentid>
    <comment_count>1</comment_count>
      <attachid>160262</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-08-23 15:22:22 -0700</bug_when>
    <thetext>Created attachment 160262
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704077</commentid>
    <comment_count>2</comment_count>
      <attachid>160262</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-08-24 07:01:37 -0700</bug_when>
    <thetext>Comment on attachment 160262
Patch

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

LGTM, but please remove copy/paste in favor of LayerRenderer::orthoMatrix()

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp:240
&gt; +static void orthogonalProjectionMatrix(TransformationMatrix&amp; matrix, float left, float right, float bottom, float top)

This code is already available in LayerRenderer::orthoMatrix(), no need for copy/paste

&gt; Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.h:48
&gt; +    virtual void onCompletion() { }

The &quot;on&quot; prefix is not typically used in WebKit, instead they use the will/did/should or other prefixes. In this case, maybe a better name that doesn&apos;t even need a prefix can be made. The name is nothing to R- for, but it is unusual for the WebKit codebase.

Since the calling function is called cleanUp() maybe this could be called cleanUp() to, but I&apos;m not sure. To me, it looks like the clean up performed is mostly related to restoring state, so maybe restoreState() or something along those lines would make sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704088</commentid>
    <comment_count>3</comment_count>
      <attachid>160419</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-08-24 07:22:01 -0700</bug_when>
    <thetext>Created attachment 160419
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704097</commentid>
    <comment_count>4</comment_count>
      <attachid>160419</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-08-24 07:40:07 -0700</bug_when>
    <thetext>Comment on attachment 160419
Patch

Looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704115</commentid>
    <comment_count>5</comment_count>
      <attachid>160419</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 08:12:32 -0700</bug_when>
    <thetext>Comment on attachment 160419
Patch

Clearing flags on attachment: 160419

Committed r126587: &lt;http://trac.webkit.org/changeset/126587&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704116</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 08:12:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160262</attachid>
            <date>2012-08-23 15:22:22 -0700</date>
            <delta_ts>2012-08-24 07:21:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94724-20120823182038.patch</filename>
            <type>text/plain</type>
            <size>22142</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NDgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGNlOTcxNjkzMDllYTA1
ZmUyNTQzYzY2MGZiNTliMWU3MjBhY2MwMC4uMjA5N2E3NTA2NzlmNmI0MGJkNzU1NzY5NGIwYzZk
ZjljYThmNjgwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA4LTIzICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tC
ZXJyeV0gRXh0ZW5kIExheWVyRmlsdGVyUmVuZGVyZXIgaW4gcHJlcGFyYXRpb24gZm9yIENTUyBT
aGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
NDcyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExh
eWVyRmlsdGVyUmVuZGVyZXIgZGVmaW5lcyBhIENTUyBGaWx0ZXIgaW4gdGVybXMgb2Ygb25lIG9y
IG1vcmUgYEFjdGlvbmBzLgorICAgICAgICBBIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24gaG9s
ZHMgYSB2ZXJ0ZXggc2hhZGVyLCBhIGZyYWdtZW50IHNoYWRlciwgYW5kCisgICAgICAgIHplcm8g
b3IgbW9yZSBgUGFyYW1ldGVyYHMuIEEgUGFyYW1ldGVyIGlzIGEgdW5pZm9ybSwgdmFyeWluZywg
b3Igb3RoZXIKKyAgICAgICAgaW5mb3JtYXRpb24gd2hpY2ggaXMgbmVlZGVkIHRvIHJlbmRlciBh
IGZpbHRlci4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgY2VydGFpbiBuZXcgUGFy
YW1ldGVyIHR5cGVzLCBpbmNsdWRpbmcgdmVydGV4L2VsZW1lbnQKKyAgICAgICAgYnVmZmVycyBh
bmQgdmVydGV4IGF0dHJpYnV0ZXMgd2hpY2ggYXJlIG5lZWRlZCB0byBpbXBsZW1lbnQgY29tcG9z
aXRlZAorICAgICAgICBDU1MgU2hhZGVycyBvbiBCQjEwLiBJbiBhZGRpdGlvbiwgYSBuZXcgZHJh
d2luZyBtb2RlIGlzIHJlcXVpcmVkIGluIG9yZGVyCisgICAgICAgIHRvIGRyYXcgQ1NTIFNoYWRl
cnMgbWVzaGVzIGZyb20gdmVydGV4L2VsZW1lbnQgYnVmZmVycy4KKworICAgICAgICBObyBuZXcg
dGVzdHMsIGJlY2F1c2UgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBmdW5jdGlvbmFsaXR5
LiBXaGVuCisgICAgICAgIHRoZSBwYXRjaCB3aGljaCBlbmFibGVzIENTUyBTaGFkZXJzIG9uIEJC
MTAgaW4gdXBzdHJlYW1lZCwgdGVzdHMgZm9yCisgICAgICAgIENTUyBTaGFkZXJzIHdpbGwgcHJv
dmUgdGhpcyBjb2RlIHRvIGJlIGNvcnJlY3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0aW9uVHlwZVRvUHJvZ3JhbUlEKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm06OlVu
aWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTFmOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VW5pZm9ybTFmOjpVbmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpVbmlmb3JtMWk6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZv
cm0xaTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0xaTo6VW5pZm9ybTFpKToK
KyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0yZjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlVuaWZvcm0yZjo6VW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0zZjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0zZjo6VW5pZm9ybTNmKToKKyAgICAgICAg
KFdlYkNvcmU6OlVuaWZvcm00Zjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTRm
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTRmOjpVbmlmb3JtNGYpOgorICAg
ICAgICAoV2ViQ29yZTo6TWF0cml4NGZ2OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpNYXRy
aXg0ZnY6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXRyaXg0ZnY6Ok1hdHJpeDRmdik6
CisgICAgICAgIChXZWJDb3JlOjpNYXRyaXg0ZnY6On5NYXRyaXg0ZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6QnVmZmVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXI6Om9uQ29tcGxl
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpCdWZmZXI6OkJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhBdHRyaWJmOjph
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhBdHRyaWJmOjpvbkNvbXBsZXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VmVydGV4QXR0cmliZjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlZlcnRleEF0dHJpYmY6OlZlcnRleEF0dHJpYmYpOgorICAgICAgICAoV2ViQ29yZTo6b3J0
aG9nb25hbFByb2plY3Rpb25NYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJS
ZW5kZXJlckFjdGlvbjo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjp1c2VBY3Rpb25Pbik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpjbGVhblVwKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXI6OkxheWVyRmlsdGVyUmVuZGVyZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6YWN0aW9uc0Zvck9wZXJhdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6YXBwbHlBY3Rpb25zKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIu
aDoKKyAgICAgICAgKFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbWV0ZXI6Om9u
Q29tcGxldGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbWV0ZXI6On5QYXJhbWV0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFyYW1ldGVyOjpQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm06On5Vbmlm
b3JtKToKKyAgICAgICAgKFVuaWZvcm0xZik6CisgICAgICAgIChVbmlmb3JtMWkpOgorICAgICAg
ICAoVW5pZm9ybTJmKToKKyAgICAgICAgKFVuaWZvcm0zZik6CisgICAgICAgIChVbmlmb3JtNGYp
OgorICAgICAgICAoTWF0cml4NGZ2KToKKyAgICAgICAgKEJ1ZmZlcik6CisgICAgICAgIChWZXJ0
ZXhBdHRyaWJmKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246
OmFwcGVuZFBhcmFtZXRlcik6CisgICAgICAgIChMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmRyYXdpbmdNb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OnNldERyYXdp
bmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmRy
YXdpbmdNb2RlUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmlsdGVyUmVuZGVy
ZXJBY3Rpb246OnNldERyYXdpbmdNb2RlUGFyYW1ldGVyKToKKwogMjAxMi0wOC0yMyAgRGFuYSBK
YW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIENyZWF0
ZSBzaGFyZWRRdWFkU3RhdGUgYXQgc2FtZSB0aW1lIGFzIGNyZWF0aW5nIHF1YWRzIGFuZCBnaXZl
IHRoZW0gdG8gdGhlIHF1YWRTaW5rCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNw
cAppbmRleCAzZGE0OTlmZmE2NjIwNmFiN2M5MzIxOWM2ODgxMTMwZDViYzU2Y2M1Li45ZGI5ZmEy
Y2NhNTc2ZGY1NWMyZjUyZGI0MTdiYzhjNDlhNzFkZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJG
aWx0ZXJSZW5kZXJlci5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIGludCBvcGVyYXRpb25U
eXBlVG9Qcm9ncmFtSUQoY29uc3QgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlJiB0KQog
ICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJTaGFkb3c7CiAjaWYgRU5B
QkxFKENTU19TSEFERVJTKQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006Ci0gICAg
ICAgIHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlckN1c3RvbTsKKyAgICAgICAgcmV0dXJuIExh
eWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQ3VzdG9tOwogI2VuZGlmCiAgICAgZGVmYXVsdDoKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyBpbnQg
b3BlcmF0aW9uVHlwZVRvUHJvZ3JhbUlEKGNvbnN0IEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSYgdCkKICAgICB9CiB9CiAKLVVuaWZvcm1mOjpVbmlmb3JtZihpbnQgY19sb2NhdGlvbikK
K1VuaWZvcm06OlVuaWZvcm0oaW50IGNfbG9jYXRpb24pCiAgICAgOiBtX2xvY2F0aW9uKGNfbG9j
YXRpb24pCiB7CiB9CkBAIC04MSwxMyArODEsMjkgQEAgdm9pZCBVbmlmb3JtMWY6OmFwcGx5KCkK
ICAgICBnbFVuaWZvcm0xZihsb2NhdGlvbigpLCBtX3ZhbCk7CiB9CiAKLVBhc3NSZWZQdHI8VW5p
Zm9ybWY+IFVuaWZvcm0xZjo6Y3JlYXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsKQorUGFzc1Jl
ZlB0cjxVbmlmb3JtPiBVbmlmb3JtMWY6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbCkK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVuaWZvcm0xZihsb2NhdGlvbiwgdmFsKSk7CiB9
CiAKIFVuaWZvcm0xZjo6VW5pZm9ybTFmKGludCBjX2xvY2F0aW9uLCBmbG9hdCBjX3ZhbCkKLSAg
ICA6IFVuaWZvcm1mKGNfbG9jYXRpb24pCisgICAgOiBVbmlmb3JtKGNfbG9jYXRpb24pCisgICAg
LCBtX3ZhbChjX3ZhbCkKK3sKK30KKwordm9pZCBVbmlmb3JtMWk6OmFwcGx5KCkKK3sKKyAgICBn
bFVuaWZvcm0xaShsb2NhdGlvbigpLCBtX3ZhbCk7Cit9CisKK1Bhc3NSZWZQdHI8VW5pZm9ybT4g
VW5pZm9ybTFpOjpjcmVhdGUoaW50IGxvY2F0aW9uLCBpbnQgdmFsKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVW5pZm9ybTFpKGxvY2F0aW9uLCB2YWwpKTsKK30KKworVW5pZm9ybTFpOjpV
bmlmb3JtMWkoaW50IGNfbG9jYXRpb24sIGludCBjX3ZhbCkKKyAgICA6IFVuaWZvcm0oY19sb2Nh
dGlvbikKICAgICAsIG1fdmFsKGNfdmFsKQogewogfQpAQCAtOTcsMTMgKzExMywxMyBAQCB2b2lk
IFVuaWZvcm0yZjo6YXBwbHkoKQogICAgIGdsVW5pZm9ybTJmKGxvY2F0aW9uKCksIG1fdmFsWzBd
LCBtX3ZhbFsxXSk7CiB9CiAKLVBhc3NSZWZQdHI8VW5pZm9ybWY+IFVuaWZvcm0yZjo6Y3JlYXRl
KGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSkKK1Bhc3NSZWZQdHI8VW5pZm9y
bT4gVW5pZm9ybTJmOjpjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwx
KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgVW5pZm9ybTJmKGxvY2F0aW9uLCB2YWwwLCB2
YWwxKSk7CiB9CiAKIFVuaWZvcm0yZjo6VW5pZm9ybTJmKGludCBjX2xvY2F0aW9uLCBmbG9hdCBj
X3ZhbDAsIGZsb2F0IGNfdmFsMSkKLSAgICA6IFVuaWZvcm1mKGNfbG9jYXRpb24pCisgICAgOiBV
bmlmb3JtKGNfbG9jYXRpb24pCiB7CiAgICAgbV92YWxbMF0gPSBjX3ZhbDA7CiAgICAgbV92YWxb
MV0gPSBjX3ZhbDE7CkBAIC0xMTQsMTkgKzEzMCwxMzYgQEAgdm9pZCBVbmlmb3JtM2Y6OmFwcGx5
KCkKICAgICBnbFVuaWZvcm0zZihsb2NhdGlvbigpLCBtX3ZhbFswXSwgbV92YWxbMV0sIG1fdmFs
WzJdKTsKIH0KIAotUGFzc1JlZlB0cjxVbmlmb3JtZj4gVW5pZm9ybTNmOjpjcmVhdGUoaW50IGxv
Y2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwxLCBmbG9hdCB2YWwyKQorUGFzc1JlZlB0cjxV
bmlmb3JtPiBVbmlmb3JtM2Y6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0
IHZhbDEsIGZsb2F0IHZhbDIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVbmlmb3JtM2Yo
bG9jYXRpb24sIHZhbDAsIHZhbDEsIHZhbDIpKTsKIH0KIAogVW5pZm9ybTNmOjpVbmlmb3JtM2Yo
aW50IGNfbG9jYXRpb24sIGZsb2F0IGNfdmFsMCwgZmxvYXQgY192YWwxLCBmbG9hdCBjX3ZhbDIp
Ci0gICAgOiBVbmlmb3JtZihjX2xvY2F0aW9uKQorICAgIDogVW5pZm9ybShjX2xvY2F0aW9uKQog
ewogICAgIG1fdmFsWzBdID0gY192YWwwOwogICAgIG1fdmFsWzFdID0gY192YWwxOwogICAgIG1f
dmFsWzJdID0gY192YWwyOwogfQogCit2b2lkIFVuaWZvcm00Zjo6YXBwbHkoKQoreworICAgIGds
VW5pZm9ybTRmKGxvY2F0aW9uKCksIG1fdmFsWzBdLCBtX3ZhbFsxXSwgbV92YWxbMl0sIG1fdmFs
WzNdKTsKK30KKworUGFzc1JlZlB0cjxVbmlmb3JtPiBVbmlmb3JtNGY6OmNyZWF0ZShpbnQgbG9j
YXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIsIGZsb2F0IHZhbDMpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVbmlmb3JtNGYobG9jYXRpb24sIHZhbDAsIHZhbDEs
IHZhbDIsIHZhbDMpKTsKK30KKworVW5pZm9ybTRmOjpVbmlmb3JtNGYoaW50IGNfbG9jYXRpb24s
IGZsb2F0IGNfdmFsMCwgZmxvYXQgY192YWwxLCBmbG9hdCBjX3ZhbDIsIGZsb2F0IGNfdmFsMykK
KyAgICA6IFVuaWZvcm0oY19sb2NhdGlvbikKK3sKKyAgICBtX3ZhbFswXSA9IGNfdmFsMDsKKyAg
ICBtX3ZhbFsxXSA9IGNfdmFsMTsKKyAgICBtX3ZhbFsyXSA9IGNfdmFsMjsKKyAgICBtX3ZhbFsz
XSA9IGNfdmFsMzsKK30KKwordm9pZCBNYXRyaXg0ZnY6OmFwcGx5KCkKK3sKKyAgICBnbFVuaWZv
cm1NYXRyaXg0ZnYobG9jYXRpb24oKSwgbV9zaXplLCBtX3RyYW5zcG9zZSwgbV9hcnJheSk7Cit9
CisKK1Bhc3NSZWZQdHI8UGFyYW1ldGVyPiBNYXRyaXg0ZnY6OmNyZWF0ZShHTGludCBsb2NhdGlv
biwgR0xzaXplaSBzaXplLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBHTGZsb2F0KiBhcnJheSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNw
b3NlLCBhcnJheSkpOworfQorCitNYXRyaXg0ZnY6Ok1hdHJpeDRmdihHTGludCBjbG9jYXRpb24s
IEdMc2l6ZWkgc2l6ZSwgR0xib29sZWFuIHRyYW5zcG9zZSwgR0xmbG9hdCogYXJyYXkpCisgICAg
OiBVbmlmb3JtKGNsb2NhdGlvbikKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV90cmFuc3Bv
c2UodHJhbnNwb3NlKQorICAgICwgbV9hcnJheSgwKQoreworICAgIG1fYXJyYXkgPSBuZXcgR0xm
bG9hdFtzaXplICogNCAqIDRdOworICAgIHN0ZDo6bWVtY3B5KG1fYXJyYXksIGFycmF5LCBzaXpl
ICogNCAqIDQgKiBzaXplb2YoR0xmbG9hdCkpOworfQorCitNYXRyaXg0ZnY6On5NYXRyaXg0ZnYo
KQoreworICAgIGRlbGV0ZVtdIG1fYXJyYXk7Cit9CisKK3ZvaWQgQnVmZmVyOjphcHBseSgpCit7
CisgICAgZ2xCaW5kQnVmZmVyKG1fYnVmZmVyLCBtX29iamVjdCk7Cit9CisKK3ZvaWQgQnVmZmVy
OjpvbkNvbXBsZXRpb24oKQoreworICAgIGdsQmluZEJ1ZmZlcihtX2J1ZmZlciwgMCk7Cit9CisK
K1Bhc3NSZWZQdHI8UGFyYW1ldGVyPiBCdWZmZXI6OmNyZWF0ZShHTGVudW0gYnVmZmVyLCBHTHVp
bnQgb2JqZWN0KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVmZmVyKGJ1ZmZlciwgb2Jq
ZWN0KSk7Cit9CisKK0J1ZmZlcjo6QnVmZmVyKEdMZW51bSBidWZmZXIsIEdMdWludCBvYmplY3Qp
CisgICAgOiBQYXJhbWV0ZXIoKQorICAgICwgbV9idWZmZXIoYnVmZmVyKQorICAgICwgbV9vYmpl
Y3Qob2JqZWN0KQoreworfQorCit2b2lkIFZlcnRleEF0dHJpYmY6OmFwcGx5KCkKK3sKKyAgICBn
bFZlcnRleEF0dHJpYlBvaW50ZXIobV9sb2NhdGlvbiwgbV9zaXplLCBHTF9GTE9BVCwgZmFsc2Us
IG1fYnl0ZXNQZXJWZXJ0ZXgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG1fb2Zmc2V0KSkpOworICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9s
b2NhdGlvbik7Cit9CisKK3ZvaWQgVmVydGV4QXR0cmliZjo6b25Db21wbGV0aW9uKCkKK3sKKyAg
ICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShtX2xvY2F0aW9uKTsKK30KKworUGFzc1JlZlB0
cjxQYXJhbWV0ZXI+IFZlcnRleEF0dHJpYmY6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGludCBzaXpl
LCBpbnQgYnl0ZXNQZXJWZXJ0ZXgsIGludCBvZmZzZXQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBWZXJ0ZXhBdHRyaWJmKGxvY2F0aW9uLCBzaXplLCBieXRlc1BlclZlcnRleCwgb2Zmc2V0
KSk7Cit9CisKKworVmVydGV4QXR0cmliZjo6VmVydGV4QXR0cmliZihpbnQgbG9jYXRpb24sIGlu
dCBzaXplLCBpbnQgYnl0ZXNQZXJWZXJ0ZXgsIGludCBvZmZzZXQpCisgICAgOiBQYXJhbWV0ZXIo
KQorICAgICwgbV9sb2NhdGlvbihsb2NhdGlvbikKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwg
bV9ieXRlc1BlclZlcnRleChieXRlc1BlclZlcnRleCkKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkK
K3sKK30KKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKy8vIENvcGllZCBmcm9tIEZFQ3VzdG9t
RmlsdGVyCitzdGF0aWMgdm9pZCBvcnRob2dvbmFsUHJvamVjdGlvbk1hdHJpeChUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9t
LCBmbG9hdCB0b3ApCit7CisgICAgQVNTRVJUKG1hdHJpeC5pc0lkZW50aXR5KCkpOworCisgICAg
ZmxvYXQgZGVsdGFYID0gcmlnaHQgLSBsZWZ0OworICAgIGZsb2F0IGRlbHRhWSA9IHRvcCAtIGJv
dHRvbTsKKyAgICBpZiAoIWRlbHRhWCB8fCAhZGVsdGFZKQorICAgICAgICByZXR1cm47CisgICAg
bWF0cml4LnNldE0xMSgyLjBmIC8gZGVsdGFYKTsKKyAgICBtYXRyaXguc2V0TTQxKC0ocmlnaHQg
KyBsZWZ0KSAvIGRlbHRhWCk7CisgICAgbWF0cml4LnNldE0yMigyLjBmIC8gZGVsdGFZKTsKKyAg
ICBtYXRyaXguc2V0TTQyKC0odG9wICsgYm90dG9tKSAvIGRlbHRhWSk7CisKKyAgICAvLyBVc2Ug
YmlnIGVub3VnaCBuZWFyL2ZhciB2YWx1ZXMsIHNvIHRoYXQgc2ltcGxlIHJvdGF0aW9ucyBvZiBy
YXRoZXIgbGFyZ2Ugb2JqZWN0cyB3aWxsIG5vdAorICAgIC8vIGdldCBjbGlwcGVkLiAxMDAwMCBz
aG91bGQgY292ZXIgbW9zdCBvZiB0aGUgc2NyZWVuIHJlc29sdXRpb25zLgorICAgIGNvbnN0IGZs
b2F0IGZhclZhbHVlID0gMTAwMDA7CisgICAgY29uc3QgZmxvYXQgbmVhclZhbHVlID0gLTEwMDAw
OworICAgIG1hdHJpeC5zZXRNMzMoLTIuMGYgLyAoZmFyVmFsdWUgLSBuZWFyVmFsdWUpKTsKKyAg
ICBtYXRyaXguc2V0TTQzKC0gKGZhclZhbHVlICsgbmVhclZhbHVlKSAvIChmYXJWYWx1ZSAtIG5l
YXJWYWx1ZSkpOworICAgIG1hdHJpeC5zZXRNNDQoMS4wZik7Cit9CisjZW5kaWYKKwogUGFzc1Jl
ZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9u
OjpjcmVhdGUoaW50IHByb2dyYW1JZCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVy
RmlsdGVyUmVuZGVyZXJBY3Rpb24ocHJvZ3JhbUlkKSk7CkBAIC0xMzQsOCArMjY3LDEwIEBAIFBh
c3NSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gTGF5ZXJGaWx0ZXJSZW5kZXJlckFj
dGlvbjo6Y3JlYXRlKGludCBwcm9nCiAKIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OkxheWVy
RmlsdGVyUmVuZGVyZXJBY3Rpb24oaW50IGNfcHJvZ3JhbUlkKQogICAgIDogbV9wcm9ncmFtSWQo
Y19wcm9ncmFtSWQpCisgICAgLCBtX2N1c3RvbUlkKC0xKQogICAgICwgbV9wdXNoU25hcHNob3Qo
ZmFsc2UpCiAgICAgLCBtX3BvcFNuYXBzaG90KGZhbHNlKQorICAgICwgbV9kcmF3aW5nTW9kZShE
cmF3VHJpYW5nbGVGYW5BcnJheXMpCiB7CiB9CiAKQEAgLTE0Nyw4ICsyODIsMTQgQEAgdm9pZCBM
YXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjp1c2VBY3Rpb25PbihMYXllckZpbHRlclJlbmRlcmVy
KiByZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBnbFVzZVByb2dyYW0ocmVu
ZGVyZXItPm1fY3NzRmlsdGVyUHJvZ3JhbU9iamVjdFttX3Byb2dyYW1JZF0pOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3VuaWZvcm1zLnNpemUoKTsgKytpKQotICAgICAgICBtX3Vu
aWZvcm1zW2ldLT5hcHBseSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BhcmFt
ZXRlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcGFyYW1ldGVyc1tpXS0+YXBwbHkoKTsKK30K
Kwordm9pZCBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpjbGVhblVwKCkKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJhbWV0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBt
X3BhcmFtZXRlcnNbaV0tPm9uQ29tcGxldGlvbigpOwogfQogCiBQYXNzT3duUHRyPExheWVyRmls
dGVyUmVuZGVyZXI+IExheWVyRmlsdGVyUmVuZGVyZXI6OmNyZWF0ZShjb25zdCBpbnQmIHBvc2l0
aW9uTG9jYXRpb24sIGNvbnN0IGludCYgdGV4Q29vcmRMb2NhdGlvbikKQEAgLTE2MCw2ICszMDEs
OSBAQCBMYXllckZpbHRlclJlbmRlcmVyOjpMYXllckZpbHRlclJlbmRlcmVyKGNvbnN0IGludCYg
cG9zaXRpb25Mb2NhdGlvbiwgY29uc3QgaW50JgogICAgIDogbV9wb3NpdGlvbkxvY2F0aW9uKHBv
c2l0aW9uTG9jYXRpb24pCiAgICAgLCBtX3RleENvb3JkTG9jYXRpb24odGV4Q29vcmRMb2NhdGlv
bikKIHsKKyAgICAvLyBJZiB5b3UgZXZlciBtb3ZlIHRoaXMgc3R1ZmYsIHBsZWFzZSBtYWtlIHN1
cmUgdGhhdAorICAgIC8vIGV2ZXJ5dGhpbmcgaW4gdGhpcyBjb25zdHJ1Y3RvciBpcyBjYWxsZWQg
QkVGT1JFIGFjdGlvbnNGb3JPcGVyYXRpb25zLgorCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBM
YXllckRhdGE6Ok51bWJlck9mQ1NTRmlsdGVyU2hhZGVyczsgKytpKQogICAgICAgICBtX2Nzc0Zp
bHRlclByb2dyYW1PYmplY3RbaV0gPSAwOwogCkBAIC00MjksMTQgKzU3MywxNCBAQCBWZWN0b3I8
UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24+ID4gTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6
YWN0aW9uc0Zvck9wZXJhdAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKICAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRV
bmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bcHJvZ3JhbUlkXQorICAg
ICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRlKG1f
YW1vdW50TG9jYXRpb25bcHJvZ3JhbUlkXQogICAgICAgICAgICAgICAgICwgc3RhdGljX2Nhc3Q8
Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
SU5WRVJUOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgogICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0o
VW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltwcm9ncmFtSWRdCisgICAgICAgICAg
ICByZXQubGFzdCgpLT5hcHBlbmRQYXJhbWV0ZXIoVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRM
b2NhdGlvbltwcm9ncmFtSWRdCiAgICAgICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDxjb25zdCBC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQo
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
TFVSOgpAQCAtNDQ5LDE0ICs1OTMsMTQgQEAgVmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRl
cmVyQWN0aW9uPiA+IExheWVyRmlsdGVyUmVuZGVyZXI6OmFjdGlvbnNGb3JPcGVyYXQKICAgICAg
ICAgICAgIGRvdWJsZSBhbW91bnQgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0
aW9uJj4ob3BlcmF0aW9uKS5zdGREZXZpYXRpb24oKS52YWx1ZSgpOwogCiAgICAgICAgICAgICAv
LyBCTFVSIFk6Ci0gICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0x
Zjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVy
WV0sIGFtb3VudCkpOwotICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlm
b3JtMWY6OmNyZWF0ZShtX2JsdXJBbW91bnRMb2NhdGlvblswXQorICAgICAgICAgICAgcmV0Lmxh
c3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25b
TGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWV0sIGFtb3VudCkpOworICAgICAgICAgICAg
cmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYmx1ckFtb3Vu
dExvY2F0aW9uWzBdCiAgICAgICAgICAgICAgICAgLCAxLjBmIC8gZmxvYXQoc3VyZmFjZS0+c2l6
ZSgpLmhlaWdodCgpKSkpOwogCiAgICAgICAgICAgICAvLyBCTFVSIFg6CiAgICAgICAgICAgICBy
ZXQuYXBwZW5kKExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShMYXllckRhdGE6OkNT
U0ZpbHRlclNoYWRlckJsdXJYKSk7Ci0gICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlm
b3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0
ZXJTaGFkZXJCbHVyWF0sIGFtb3VudCkpOwotICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5k
VW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2JsdXJBbW91bnRMb2NhdGlvblsxXQorICAgICAg
ICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1v
dW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWF0sIGFtb3VudCkpOwor
ICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRl
KG1fYmx1ckFtb3VudExvY2F0aW9uWzFdCiAgICAgICAgICAgICAgICAgLCAxLjBmIC8gZmxvYXQo
c3VyZmFjZS0+c2l6ZSgpLndpZHRoKCkpKSk7CiAKICAgICAgICAgICAgIH0KQEAgLTQ3MSwyNiAr
NjE1LDI2IEBAIFZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPiBMYXll
ckZpbHRlclJlbmRlcmVyOjphY3Rpb25zRm9yT3BlcmF0CiAgICAgICAgICAgICAvLyAgICAgNC4g
cmVwYWludCBvcmlnaW5hbCBvbiB0b3Agb2YgbWFzawogICAgICAgICAgICAgY29uc3QgRHJvcFNo
YWRvd0ZpbHRlck9wZXJhdGlvbiYgZHNmbyA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwogICAgICAgICAgICAgcmV0Lmxhc3QoKS0+c2V0
UHVzaFNuYXBzaG90KCk7Ci0gICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVu
aWZvcm0yZjo6Y3JlYXRlKG1fb2Zmc2V0TG9jYXRpb24KKyAgICAgICAgICAgIHJldC5sYXN0KCkt
PmFwcGVuZFBhcmFtZXRlcihVbmlmb3JtMmY6OmNyZWF0ZShtX29mZnNldExvY2F0aW9uCiAgICAg
ICAgICAgICAgICAgLCBmbG9hdChkc2ZvLngoKSkgLyBmbG9hdChzdXJmYWNlLT5zaXplKCkud2lk
dGgoKSkKICAgICAgICAgICAgICAgICAsIGZsb2F0KGRzZm8ueSgpKSAvIGZsb2F0KHN1cmZhY2Ut
PnNpemUoKS5oZWlnaHQoKSkpKTsKLSAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZv
cm0oVW5pZm9ybTNmOjpjcmVhdGUobV9zaGFkb3dDb2xvckxvY2F0aW9uCisgICAgICAgICAgICBy
ZXQubGFzdCgpLT5hcHBlbmRQYXJhbWV0ZXIoVW5pZm9ybTNmOjpjcmVhdGUobV9zaGFkb3dDb2xv
ckxvY2F0aW9uCiAgICAgICAgICAgICAgICAgLCBmbG9hdChkc2ZvLmNvbG9yKCkucmVkKCkpIC8g
MjU1LjBmCiAgICAgICAgICAgICAgICAgLCBmbG9hdChkc2ZvLmNvbG9yKCkuZ3JlZW4oKSkgLyAy
NTUuMGYKICAgICAgICAgICAgICAgICAsIGZsb2F0KGRzZm8uY29sb3IoKS5ibHVlKCkpIC8gMjU1
LjBmKSk7CiAKICAgICAgICAgICAgIC8vIEJMVVIgWQogICAgICAgICAgICAgcmV0LmFwcGVuZChM
YXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpjcmVhdGUoTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFk
ZXJCbHVyWSkpOwotICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3Jt
MWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0aW9uW0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1
clldCisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRQYXJhbWV0ZXIoVW5pZm9ybTFmOjpj
cmVhdGUobV9hbW91bnRMb2NhdGlvbltMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZXQog
ICAgICAgICAgICAgICAgICwgZHNmby5zdGREZXZpYXRpb24oKSkpOwotICAgICAgICAgICAgcmV0
Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2JsdXJBbW91bnRMb2Nh
dGlvblswXQorICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0x
Zjo6Y3JlYXRlKG1fYmx1ckFtb3VudExvY2F0aW9uWzBdCiAgICAgICAgICAgICAgICAgLCAxLjBm
IC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgpKSkpOwogCiAgICAgICAgICAgICAvLyBC
TFVSIFgKICAgICAgICAgICAgIHJldC5hcHBlbmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6
Y3JlYXRlKExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clgpKTsKLSAgICAgICAgICAgIHJl
dC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlv
bltMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJYXQorICAgICAgICAgICAgcmV0Lmxhc3Qo
KS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5
ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWF0KICAgICAgICAgICAgICAgICAsIGRzZm8uc3Rk
RGV2aWF0aW9uKCkpKTsKLSAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5p
Zm9ybTFmOjpjcmVhdGUobV9ibHVyQW1vdW50TG9jYXRpb25bMV0KKyAgICAgICAgICAgIHJldC5s
YXN0KCktPmFwcGVuZFBhcmFtZXRlcihVbmlmb3JtMWY6OmNyZWF0ZShtX2JsdXJBbW91bnRMb2Nh
dGlvblsxXQogICAgICAgICAgICAgICAgICwgMS4wZiAvIGZsb2F0KHN1cmZhY2UtPnNpemUoKS53
aWR0aCgpKSkpOwogCiAgICAgICAgICAgICAvLyBSZXBhaW50IG9yaWdpbmFsIGltYWdlCkBAIC01
NzUsNyArNzE5LDI0IEBAIHZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6YXBwbHlBY3Rpb25zKHVu
c2lnbmVkJiBmYm8sIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxhCiAgICAgICAgIGlmIChhY3Rp
b25zW2ldLT5zaG91bGRQb3BTbmFwc2hvdCgpKQogICAgICAgICAgICAgcG9wU25hcHNob3QoKTsK
IAotICAgICAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICAgICAg
c3dpdGNoIChhY3Rpb25zW2ldLT5kcmF3aW5nTW9kZSgpKSB7CisgICAgICAgIGNhc2UgTGF5ZXJG
aWx0ZXJSZW5kZXJlckFjdGlvbjo6RHJhd1RyaWFuZ2xlRmFuQXJyYXlzOgorICAgICAgICAgICAg
Z2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpEcmF3VHJpYW5nbGVFbGVt
ZW50c1VTaG9ydDA6CisgICAgICAgICAgICBnbERyYXdFbGVtZW50cyhHTF9UUklBTkdMRVMsIGFj
dGlvbnNbaV0tPmRyYXdpbmdNb2RlUGFyYW1ldGVyKCksIEdMX1VOU0lHTkVEX1NIT1JULCByZWlu
dGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PigwKSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6TnVt
YmVyT2ZEcmF3aW5nTW9kZXM6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYWN0aW9uc1tpXS0+Y2xlYW5V
cCgpOworCisgICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uTG9jYXRpb24s
IDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJmxheWVyLT5nZXRUcmFuc2Zvcm1lZEJvdW5kcygp
ICk7CisgICAgICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9wb3NpdGlvbkxvY2F0aW9u
KTsKKyAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fdGV4Q29vcmRMb2NhdGlvbiwgMiwg
R0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB0ZXhjb29yZHMpOworICAgICAgICBnbEVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KG1fdGV4Q29vcmRMb2NhdGlvbik7CiAgICAgfQogCiAgICAgbV90ZXh0dXJl
LT51bnByb3RlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmgKaW5kZXggN2Nh
OTNlNDcwYWFiY2UyYTMyOGI4YWIwNWU4NGE4NTYzN2Q0YmMwOS4uZTU5NTc1YTllZDgwMGY4Y2Ji
NGRlZTU1ODA3YjYwMzk5Y2FkMDU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVy
LmgKQEAgLTQxLDIyICs0MSwzMyBAQCBjbGFzcyBMYXllckZpbHRlclJlbmRlcmVyOwogY2xhc3Mg
TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjsKIGNsYXNzIExheWVyUmVuZGVyZXJTdXJmYWNlOwog
Ci1jbGFzcyBVbmlmb3JtZiA6IHB1YmxpYyBSZWZDb3VudGVkPFVuaWZvcm1mPiB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoVW5pZm9ybWYpOworY2xhc3MgUGFyYW1ldGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8UGFyYW1ldGVyPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFyYW1ldGVy
KTsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIG9uQ29tcGxldGlvbigpIHsgfQorICAgIHZpcnR1YWwgflBhcmFtZXRlcigpIHsgfQorcHJv
dGVjdGVkOgorICAgIGV4cGxpY2l0IFBhcmFtZXRlcigpIHsgfQorfTsKKworY2xhc3MgVW5pZm9y
bSA6IHB1YmxpYyBQYXJhbWV0ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVuaWZvcm0p
OworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpID0gMDsKKyAgICB2aXJ0dWFsIH5V
bmlmb3JtKCkgeyB9CiAKIHByb3RlY3RlZDoKLSAgICBVbmlmb3JtZihpbnQgbG9jYXRpb24pOwor
ICAgIFVuaWZvcm0oaW50IGxvY2F0aW9uKTsKICAgICBjb25zdCBpbnQmIGxvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQogCiBwcml2YXRlOgogICAgIGludCBtX2xvY2F0aW9u
OwogfTsKIAotY2xhc3MgVW5pZm9ybTFmIDogcHVibGljIFVuaWZvcm1mIHsKK2NsYXNzIFVuaWZv
cm0xZiA6IHB1YmxpYyBVbmlmb3JtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxV
bmlmb3JtZj4gY3JlYXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxVbmlmb3JtPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwpOwogCiBwcm90
ZWN0ZWQ6CiAgICAgVW5pZm9ybTFmKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsKTsKQEAgLTY2LDkg
Kzc3LDIxIEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV92YWw7CiB9OwogCi1jbGFzcyBVbmlmb3Jt
MmYgOiBwdWJsaWMgVW5pZm9ybWYgeworY2xhc3MgVW5pZm9ybTFpIDogcHVibGljIFVuaWZvcm0g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm0+IGNyZWF0ZShpbnQgbG9j
YXRpb24sIGludCB2YWwpOworCitwcm90ZWN0ZWQ6CisgICAgVW5pZm9ybTFpKGludCBsb2NhdGlv
biwgaW50IHZhbCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CisgICAg
aW50IG1fdmFsOworfTsKKworY2xhc3MgVW5pZm9ybTJmIDogcHVibGljIFVuaWZvcm0gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm1mPiBjcmVhdGUoaW50IGxvY2F0aW9u
LCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwxKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxVbmlmb3Jt
PiBjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwxKTsKIAogcHJvdGVj
dGVkOgogICAgIFVuaWZvcm0yZihpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEp
OwpAQCAtNzgsOSArMTAxLDkgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3ZhbFsyXTsKIH07CiAK
LWNsYXNzIFVuaWZvcm0zZiA6IHB1YmxpYyBVbmlmb3JtZiB7CitjbGFzcyBVbmlmb3JtM2YgOiBw
dWJsaWMgVW5pZm9ybSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VW5pZm9ybWY+
IGNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm0+IGNyZWF0ZShpbnQgbG9jYXRpb24sIGZs
b2F0IHZhbDAsIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIpOwogCiBwcm90ZWN0ZWQ6CiAgICAgVW5p
Zm9ybTNmKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSwgZmxvYXQgdmFsMik7
CkBAIC05MCw2ICsxMTMsNjQgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3ZhbFszXTsKIH07CiAK
K2NsYXNzIFVuaWZvcm00ZiA6IHB1YmxpYyBVbmlmb3JtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxVbmlmb3JtPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9h
dCB2YWwxLCBmbG9hdCB2YWwyLCBmbG9hdCB2YWwzKTsKKworcHJvdGVjdGVkOgorICAgIFVuaWZv
cm00ZihpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIsIGZs
b2F0IHZhbDMpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIGZs
b2F0IG1fdmFsWzRdOworfTsKKworY2xhc3MgTWF0cml4NGZ2IDogcHVibGljIFVuaWZvcm0gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhcmFtZXRlcj4gY3JlYXRlKEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBHTGZsb2F0KiBhcnJheSk7CisK
K3Byb3RlY3RlZDoKKyAgICBNYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgbGVuZ3Ro
LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBHTGZsb2F0KiBhcnJheSk7CisgICAgfk1hdHJpeDRmdigp
OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIEdMaW50IG1fbG9j
YXRpb247CisgICAgR0xzaXplaSBtX3NpemU7CisgICAgR0xib29sZWFuIG1fdHJhbnNwb3NlOwor
ICAgIEdMZmxvYXQqIG1fYXJyYXk7Cit9OworCitjbGFzcyBCdWZmZXIgOiBwdWJsaWMgUGFyYW1l
dGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYXJhbWV0ZXI+IGNyZWF0ZShH
TGVudW0gYnVmZmVyLCBHTHVpbnQgaW5kZXgpOworCitwcm90ZWN0ZWQ6CisgICAgQnVmZmVyKEdM
ZW51bSBidWZmZXIsIEdMdWludCBpbmRleCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIG9uQ29tcGxldGlvbigpOworICAgIEdMZW51bSBt
X2J1ZmZlcjsKKyAgICBHTHVpbnQgbV9vYmplY3Q7Cit9OworCitjbGFzcyBWZXJ0ZXhBdHRyaWJm
IDogcHVibGljIFBhcmFtZXRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGFy
YW1ldGVyPiBjcmVhdGUoaW50IGxvY2F0aW9uLCBpbnQgc2l6ZSwgaW50IGJ5dGVzUGVyVmVydGV4
LCBpbnQgb2Zmc2V0KTsKKworcHJvdGVjdGVkOgorICAgIFZlcnRleEF0dHJpYmYoaW50IGxvY2F0
aW9uLCBpbnQgc2l6ZSwgaW50IGJ5dGVzUGVyVmVydGV4LCBpbnQgb2Zmc2V0KTsKKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25Db21wbGV0
aW9uKCk7CisgICAgaW50IG1fbG9jYXRpb247CisgICAgaW50IG1fc2l6ZTsKKyAgICBpbnQgbV9i
eXRlc1BlclZlcnRleDsKKyAgICBpbnQgbV9vZmZzZXQ7Cit9OworCiBjbGFzcyBMYXllckZpbHRl
clJlbmRlcmVyQWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJGaWx0ZXJSZW5kZXJlckFj
dGlvbj4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyRmlsdGVyUmVuZGVy
ZXJBY3Rpb24+IGNyZWF0ZShpbnQgcHJvZ3JhbUlkKTsKQEAgLTEwMiwxNSArMTgzLDMzIEBAIHB1
YmxpYzoKICAgICBib29sIHNob3VsZFBvcFNuYXBzaG90KCkgY29uc3QgeyByZXR1cm4gbV9wb3BT
bmFwc2hvdDsgfQogICAgIHZvaWQgc2V0UG9wU25hcHNob3QoKSB7IG1fcG9wU25hcHNob3QgPSB0
cnVlOyB9CiAKLSAgICB2b2lkIGFwcGVuZFVuaWZvcm0oY29uc3QgUmVmUHRyPFVuaWZvcm1mPiYg
dW5pZm9ybSkgeyBtX3VuaWZvcm1zLmFwcGVuZCh1bmlmb3JtKTsgfQorICAgIHZvaWQgYXBwZW5k
UGFyYW1ldGVyKGNvbnN0IFJlZlB0cjxQYXJhbWV0ZXI+JiB1bmlmb3JtKSB7IG1fcGFyYW1ldGVy
cy5hcHBlbmQodW5pZm9ybSk7IH0KICAgICB2b2lkIHVzZUFjdGlvbk9uKExheWVyRmlsdGVyUmVu
ZGVyZXIqKTsKKyAgICB2b2lkIGNsZWFuVXAoKTsKKworICAgIGVudW0gRHJhd2luZ01vZGUgewor
ICAgICAgICBEcmF3VHJpYW5nbGVGYW5BcnJheXMgPSAwLAorICAgICAgICBEcmF3VHJpYW5nbGVF
bGVtZW50c1VTaG9ydDAsCisgICAgICAgIE51bWJlck9mRHJhd2luZ01vZGVzCisgICAgfTsKKwor
ICAgIERyYXdpbmdNb2RlIGRyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nTW9k
ZTsgfQorICAgIHZvaWQgc2V0RHJhd2luZ01vZGUoY29uc3QgRHJhd2luZ01vZGUmIG1vZGUpIHsg
bV9kcmF3aW5nTW9kZSA9IG1vZGU7IH0KKworICAgIGludCBkcmF3aW5nTW9kZVBhcmFtZXRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ01vZGVQYXJhbWV0ZXI7IH0KKyAgICB2b2lkIHNldERy
YXdpbmdNb2RlUGFyYW1ldGVyKGludCBwKSB7IG1fZHJhd2luZ01vZGVQYXJhbWV0ZXIgPSBwOyB9
CisKIAogcHJvdGVjdGVkOgogICAgIGludCBtX3Byb2dyYW1JZDsKICAgICBib29sIG1fcHVzaFNu
YXBzaG90OwogICAgIGJvb2wgbV9wb3BTbmFwc2hvdDsKIAotICAgIFZlY3RvcjxSZWZQdHI8VW5p
Zm9ybWY+ID4gbV91bmlmb3JtczsKKyAgICBWZWN0b3I8UmVmUHRyPFBhcmFtZXRlcj4gPiBtX3Bh
cmFtZXRlcnM7CisKKyAgICBEcmF3aW5nTW9kZSBtX2RyYXdpbmdNb2RlOworICAgIGludCBtX2Ry
YXdpbmdNb2RlUGFyYW1ldGVyOworCiBwcml2YXRlOgogICAgIExheWVyRmlsdGVyUmVuZGVyZXJB
Y3Rpb24oaW50IHByb2dyYW1JZCk7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160419</attachid>
            <date>2012-08-24 07:22:01 -0700</date>
            <delta_ts>2012-08-24 08:12:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94724-20120824102016.patch</filename>
            <type>text/plain</type>
            <size>21213</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWVmNGFkMTBkODJkZjA2
ZjMxZDM0MTcwNjNkM2RlMDgyMDEwMDk4Yi4uMjdkYTA0NmFjNzM1NjI5OWIwMWFlZjVjMmVhYzVj
MTAwZjM1NWNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDEyLTA4LTIzICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tC
ZXJyeV0gRXh0ZW5kIExheWVyRmlsdGVyUmVuZGVyZXIgaW4gcHJlcGFyYXRpb24gZm9yIENTUyBT
aGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
NDcyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExh
eWVyRmlsdGVyUmVuZGVyZXIgZGVmaW5lcyBhIENTUyBGaWx0ZXIgaW4gdGVybXMgb2Ygb25lIG9y
IG1vcmUgYEFjdGlvbmBzLgorICAgICAgICBBIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24gaG9s
ZHMgYSB2ZXJ0ZXggc2hhZGVyLCBhIGZyYWdtZW50IHNoYWRlciwgYW5kCisgICAgICAgIHplcm8g
b3IgbW9yZSBgUGFyYW1ldGVyYHMuIEEgUGFyYW1ldGVyIGlzIGEgdW5pZm9ybSwgdmFyeWluZywg
b3Igb3RoZXIKKyAgICAgICAgaW5mb3JtYXRpb24gd2hpY2ggaXMgbmVlZGVkIHRvIHJlbmRlciBh
IGZpbHRlci4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgY2VydGFpbiBuZXcgUGFy
YW1ldGVyIHR5cGVzLCBpbmNsdWRpbmcgdmVydGV4L2VsZW1lbnQKKyAgICAgICAgYnVmZmVycyBh
bmQgdmVydGV4IGF0dHJpYnV0ZXMgd2hpY2ggYXJlIG5lZWRlZCB0byBpbXBsZW1lbnQgY29tcG9z
aXRlZAorICAgICAgICBDU1MgU2hhZGVycyBvbiBCQjEwLiBJbiBhZGRpdGlvbiwgYSBuZXcgZHJh
d2luZyBtb2RlIGlzIHJlcXVpcmVkIGluIG9yZGVyCisgICAgICAgIHRvIGRyYXcgQ1NTIFNoYWRl
cnMgbWVzaGVzIGZyb20gdmVydGV4L2VsZW1lbnQgYnVmZmVycy4KKworICAgICAgICBObyBuZXcg
dGVzdHMsIGJlY2F1c2UgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBmdW5jdGlvbmFsaXR5
LiBXaGVuCisgICAgICAgIHRoZSBwYXRjaCB3aGljaCBlbmFibGVzIENTUyBTaGFkZXJzIG9uIEJC
MTAgaW4gdXBzdHJlYW1lZCwgdGVzdHMgZm9yCisgICAgICAgIENTUyBTaGFkZXJzIHdpbGwgcHJv
dmUgdGhpcyBjb2RlIHRvIGJlIGNvcnJlY3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0aW9uVHlwZVRvUHJvZ3JhbUlEKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm06OlVu
aWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTFmOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VW5pZm9ybTFmOjpVbmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpVbmlmb3JtMWk6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZv
cm0xaTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0xaTo6VW5pZm9ybTFpKToK
KyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0yZjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlVuaWZvcm0yZjo6VW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0zZjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWZvcm0zZjo6VW5pZm9ybTNmKToKKyAgICAgICAg
KFdlYkNvcmU6OlVuaWZvcm00Zjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTRm
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VW5pZm9ybTRmOjpVbmlmb3JtNGYpOgorICAg
ICAgICAoV2ViQ29yZTo6TWF0cml4NGZ2OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpNYXRy
aXg0ZnY6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXRyaXg0ZnY6Ok1hdHJpeDRmdik6
CisgICAgICAgIChXZWJDb3JlOjpNYXRyaXg0ZnY6On5NYXRyaXg0ZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6QnVmZmVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXI6OnJlc3RvcmVT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpCdWZmZXI6OkJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhBdHRyaWJmOjph
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhBdHRyaWJmOjpyZXN0b3JlU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6VmVydGV4QXR0cmliZjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlZlcnRleEF0dHJpYmY6OlZlcnRleEF0dHJpYmYpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjp1c2VBY3Rpb25Pbik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpyZXN0b3JlU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6TGF5ZXJGaWx0ZXJSZW5k
ZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyOjphY3Rpb25zRm9y
T3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckZpbHRlclJlbmRlcmVyOjphcHBs
eUFjdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJG
aWx0ZXJSZW5kZXJlci5oOgorICAgICAgICAoUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhcmFtZXRlcjo6cmVzdG9yZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFtZXRlcjo6
flBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbWV0ZXI6OlBhcmFtZXRlcik6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
VW5pZm9ybTo6flVuaWZvcm0pOgorICAgICAgICAoVW5pZm9ybTFmKToKKyAgICAgICAgKFVuaWZv
cm0xaSk6CisgICAgICAgIChVbmlmb3JtMmYpOgorICAgICAgICAoVW5pZm9ybTNmKToKKyAgICAg
ICAgKFVuaWZvcm00Zik6CisgICAgICAgIChNYXRyaXg0ZnYpOgorICAgICAgICAoQnVmZmVyKToK
KyAgICAgICAgKFZlcnRleEF0dHJpYmYpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJS
ZW5kZXJlckFjdGlvbjo6YXBwZW5kUGFyYW1ldGVyKToKKyAgICAgICAgKExheWVyRmlsdGVyUmVu
ZGVyZXJBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlv
bjo6ZHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlckFj
dGlvbjo6c2V0RHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5k
ZXJlckFjdGlvbjo6ZHJhd2luZ01vZGVQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6c2V0RHJhd2luZ01vZGVQYXJhbWV0ZXIpOgorCiAyMDEy
LTA4LTI0ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IGRvIG5vdCBzZW5kIHByb2ZpbGUgaGVhZGVycyB0byB0aGUgZnJvbnQt
ZW5kIHVudGlsIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRlcmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJS
ZW5kZXJlci5jcHAKaW5kZXggM2RhNDk5ZmZhNjYyMDZhYjdjOTMyMTljNjg4MTEzMGQ1YmM1NmNj
NS4uOGM0MjM4NmUwZTgxMGM0NTg4Yjg5M2E5ZjM0ZmIxOWMwZWE3Yzk0NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJl
bmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCkBAIC02Myw3ICs2Myw3IEBAIHN0YXRpYyBpbnQg
b3BlcmF0aW9uVHlwZVRvUHJvZ3JhbUlEKGNvbnN0IEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSYgdCkKICAgICAgICAgcmV0dXJuIExheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyU2hhZG93
OwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q1VT
VE9NOgotICAgICAgICByZXR1cm4gTGF5ZXJEYXRhOjpDU1NGaWx0ZXJDdXN0b207CisgICAgICAg
IHJldHVybiBMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckN1c3RvbTsKICNlbmRpZgogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzEsNyArNzEsNyBAQCBz
dGF0aWMgaW50IG9wZXJhdGlvblR5cGVUb1Byb2dyYW1JRChjb25zdCBGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUmIHQpCiAgICAgfQogfQogCi1Vbmlmb3JtZjo6VW5pZm9ybWYoaW50IGNf
bG9jYXRpb24pCitVbmlmb3JtOjpVbmlmb3JtKGludCBjX2xvY2F0aW9uKQogICAgIDogbV9sb2Nh
dGlvbihjX2xvY2F0aW9uKQogewogfQpAQCAtODEsMTMgKzgxLDI5IEBAIHZvaWQgVW5pZm9ybTFm
OjphcHBseSgpCiAgICAgZ2xVbmlmb3JtMWYobG9jYXRpb24oKSwgbV92YWwpOwogfQogCi1QYXNz
UmVmUHRyPFVuaWZvcm1mPiBVbmlmb3JtMWY6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZh
bCkKK1Bhc3NSZWZQdHI8VW5pZm9ybT4gVW5pZm9ybTFmOjpjcmVhdGUoaW50IGxvY2F0aW9uLCBm
bG9hdCB2YWwpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVbmlmb3JtMWYobG9jYXRpb24s
IHZhbCkpOwogfQogCiBVbmlmb3JtMWY6OlVuaWZvcm0xZihpbnQgY19sb2NhdGlvbiwgZmxvYXQg
Y192YWwpCi0gICAgOiBVbmlmb3JtZihjX2xvY2F0aW9uKQorICAgIDogVW5pZm9ybShjX2xvY2F0
aW9uKQorICAgICwgbV92YWwoY192YWwpCit7Cit9CisKK3ZvaWQgVW5pZm9ybTFpOjphcHBseSgp
Cit7CisgICAgZ2xVbmlmb3JtMWkobG9jYXRpb24oKSwgbV92YWwpOworfQorCitQYXNzUmVmUHRy
PFVuaWZvcm0+IFVuaWZvcm0xaTo6Y3JlYXRlKGludCBsb2NhdGlvbiwgaW50IHZhbCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFVuaWZvcm0xaShsb2NhdGlvbiwgdmFsKSk7Cit9CisKK1Vu
aWZvcm0xaTo6VW5pZm9ybTFpKGludCBjX2xvY2F0aW9uLCBpbnQgY192YWwpCisgICAgOiBVbmlm
b3JtKGNfbG9jYXRpb24pCiAgICAgLCBtX3ZhbChjX3ZhbCkKIHsKIH0KQEAgLTk3LDEzICsxMTMs
MTMgQEAgdm9pZCBVbmlmb3JtMmY6OmFwcGx5KCkKICAgICBnbFVuaWZvcm0yZihsb2NhdGlvbigp
LCBtX3ZhbFswXSwgbV92YWxbMV0pOwogfQogCi1QYXNzUmVmUHRyPFVuaWZvcm1mPiBVbmlmb3Jt
MmY6OmNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEpCitQYXNzUmVm
UHRyPFVuaWZvcm0+IFVuaWZvcm0yZjo6Y3JlYXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwg
ZmxvYXQgdmFsMSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVuaWZvcm0yZihsb2NhdGlv
biwgdmFsMCwgdmFsMSkpOwogfQogCiBVbmlmb3JtMmY6OlVuaWZvcm0yZihpbnQgY19sb2NhdGlv
biwgZmxvYXQgY192YWwwLCBmbG9hdCBjX3ZhbDEpCi0gICAgOiBVbmlmb3JtZihjX2xvY2F0aW9u
KQorICAgIDogVW5pZm9ybShjX2xvY2F0aW9uKQogewogICAgIG1fdmFsWzBdID0gY192YWwwOwog
ICAgIG1fdmFsWzFdID0gY192YWwxOwpAQCAtMTE0LDE5ICsxMzAsMTExIEBAIHZvaWQgVW5pZm9y
bTNmOjphcHBseSgpCiAgICAgZ2xVbmlmb3JtM2YobG9jYXRpb24oKSwgbV92YWxbMF0sIG1fdmFs
WzFdLCBtX3ZhbFsyXSk7CiB9CiAKLVBhc3NSZWZQdHI8VW5pZm9ybWY+IFVuaWZvcm0zZjo6Y3Jl
YXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSwgZmxvYXQgdmFsMikKK1Bh
c3NSZWZQdHI8VW5pZm9ybT4gVW5pZm9ybTNmOjpjcmVhdGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2
YWwwLCBmbG9hdCB2YWwxLCBmbG9hdCB2YWwyKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VW5pZm9ybTNmKGxvY2F0aW9uLCB2YWwwLCB2YWwxLCB2YWwyKSk7CiB9CiAKIFVuaWZvcm0zZjo6
VW5pZm9ybTNmKGludCBjX2xvY2F0aW9uLCBmbG9hdCBjX3ZhbDAsIGZsb2F0IGNfdmFsMSwgZmxv
YXQgY192YWwyKQotICAgIDogVW5pZm9ybWYoY19sb2NhdGlvbikKKyAgICA6IFVuaWZvcm0oY19s
b2NhdGlvbikKIHsKICAgICBtX3ZhbFswXSA9IGNfdmFsMDsKICAgICBtX3ZhbFsxXSA9IGNfdmFs
MTsKICAgICBtX3ZhbFsyXSA9IGNfdmFsMjsKIH0KIAordm9pZCBVbmlmb3JtNGY6OmFwcGx5KCkK
K3sKKyAgICBnbFVuaWZvcm00Zihsb2NhdGlvbigpLCBtX3ZhbFswXSwgbV92YWxbMV0sIG1fdmFs
WzJdLCBtX3ZhbFszXSk7Cit9CisKK1Bhc3NSZWZQdHI8VW5pZm9ybT4gVW5pZm9ybTRmOjpjcmVh
dGUoaW50IGxvY2F0aW9uLCBmbG9hdCB2YWwwLCBmbG9hdCB2YWwxLCBmbG9hdCB2YWwyLCBmbG9h
dCB2YWwzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVW5pZm9ybTRmKGxvY2F0aW9uLCB2
YWwwLCB2YWwxLCB2YWwyLCB2YWwzKSk7Cit9CisKK1VuaWZvcm00Zjo6VW5pZm9ybTRmKGludCBj
X2xvY2F0aW9uLCBmbG9hdCBjX3ZhbDAsIGZsb2F0IGNfdmFsMSwgZmxvYXQgY192YWwyLCBmbG9h
dCBjX3ZhbDMpCisgICAgOiBVbmlmb3JtKGNfbG9jYXRpb24pCit7CisgICAgbV92YWxbMF0gPSBj
X3ZhbDA7CisgICAgbV92YWxbMV0gPSBjX3ZhbDE7CisgICAgbV92YWxbMl0gPSBjX3ZhbDI7Cisg
ICAgbV92YWxbM10gPSBjX3ZhbDM7Cit9CisKK3ZvaWQgTWF0cml4NGZ2OjphcHBseSgpCit7Cisg
ICAgZ2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uKCksIG1fc2l6ZSwgbV90cmFuc3Bvc2UsIG1f
YXJyYXkpOworfQorCitQYXNzUmVmUHRyPFBhcmFtZXRlcj4gTWF0cml4NGZ2OjpjcmVhdGUoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgc2l6ZSwgR0xib29sZWFuIHRyYW5zcG9zZSwgR0xmbG9hdCog
YXJyYXkpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNYXRyaXg0ZnYobG9jYXRpb24sIHNp
emUsIHRyYW5zcG9zZSwgYXJyYXkpKTsKK30KKworTWF0cml4NGZ2OjpNYXRyaXg0ZnYoR0xpbnQg
Y2xvY2F0aW9uLCBHTHNpemVpIHNpemUsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEdMZmxvYXQqIGFy
cmF5KQorICAgIDogVW5pZm9ybShjbG9jYXRpb24pCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAs
IG1fdHJhbnNwb3NlKHRyYW5zcG9zZSkKKyAgICAsIG1fYXJyYXkoMCkKK3sKKyAgICBtX2FycmF5
ID0gbmV3IEdMZmxvYXRbc2l6ZSAqIDQgKiA0XTsKKyAgICBzdGQ6Om1lbWNweShtX2FycmF5LCBh
cnJheSwgc2l6ZSAqIDQgKiA0ICogc2l6ZW9mKEdMZmxvYXQpKTsKK30KKworTWF0cml4NGZ2Ojp+
TWF0cml4NGZ2KCkKK3sKKyAgICBkZWxldGVbXSBtX2FycmF5OworfQorCit2b2lkIEJ1ZmZlcjo6
YXBwbHkoKQoreworICAgIGdsQmluZEJ1ZmZlcihtX2J1ZmZlciwgbV9vYmplY3QpOworfQorCit2
b2lkIEJ1ZmZlcjo6cmVzdG9yZVN0YXRlKCkKK3sKKyAgICBnbEJpbmRCdWZmZXIobV9idWZmZXIs
IDApOworfQorCitQYXNzUmVmUHRyPFBhcmFtZXRlcj4gQnVmZmVyOjpjcmVhdGUoR0xlbnVtIGJ1
ZmZlciwgR0x1aW50IG9iamVjdCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcihi
dWZmZXIsIG9iamVjdCkpOworfQorCitCdWZmZXI6OkJ1ZmZlcihHTGVudW0gYnVmZmVyLCBHTHVp
bnQgb2JqZWN0KQorICAgIDogUGFyYW1ldGVyKCkKKyAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKKyAg
ICAsIG1fb2JqZWN0KG9iamVjdCkKK3sKK30KKwordm9pZCBWZXJ0ZXhBdHRyaWJmOjphcHBseSgp
Cit7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fbG9jYXRpb24sIG1fc2l6ZSwgR0xfRkxP
QVQsIGZhbHNlLCBtX2J5dGVzUGVyVmVydGV4LCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0
YXRpY19jYXN0PGludHB0cl90PihtX29mZnNldCkpKTsKKyAgICBnbEVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KG1fbG9jYXRpb24pOworfQorCit2b2lkIFZlcnRleEF0dHJpYmY6OnJlc3RvcmVTdGF0
ZSgpCit7CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobV9sb2NhdGlvbik7Cit9CisK
K1Bhc3NSZWZQdHI8UGFyYW1ldGVyPiBWZXJ0ZXhBdHRyaWJmOjpjcmVhdGUoaW50IGxvY2F0aW9u
LCBpbnQgc2l6ZSwgaW50IGJ5dGVzUGVyVmVydGV4LCBpbnQgb2Zmc2V0KQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVmVydGV4QXR0cmliZihsb2NhdGlvbiwgc2l6ZSwgYnl0ZXNQZXJWZXJ0
ZXgsIG9mZnNldCkpOworfQorCisKK1ZlcnRleEF0dHJpYmY6OlZlcnRleEF0dHJpYmYoaW50IGxv
Y2F0aW9uLCBpbnQgc2l6ZSwgaW50IGJ5dGVzUGVyVmVydGV4LCBpbnQgb2Zmc2V0KQorICAgIDog
UGFyYW1ldGVyKCkKKyAgICAsIG1fbG9jYXRpb24obG9jYXRpb24pCisgICAgLCBtX3NpemUoc2l6
ZSkKKyAgICAsIG1fYnl0ZXNQZXJWZXJ0ZXgoYnl0ZXNQZXJWZXJ0ZXgpCisgICAgLCBtX29mZnNl
dChvZmZzZXQpCit7Cit9CisKIFBhc3NSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4g
TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKGludCBwcm9ncmFtSWQpCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uKHByb2dyYW1JZCkp
OwpAQCAtMTM0LDggKzI0MiwxMCBAQCBQYXNzUmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJBY3Rp
b24+IExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb246OmNyZWF0ZShpbnQgcHJvZwogCiBMYXllckZp
bHRlclJlbmRlcmVyQWN0aW9uOjpMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uKGludCBjX3Byb2dy
YW1JZCkKICAgICA6IG1fcHJvZ3JhbUlkKGNfcHJvZ3JhbUlkKQorICAgICwgbV9jdXN0b21JZCgt
MSkKICAgICAsIG1fcHVzaFNuYXBzaG90KGZhbHNlKQogICAgICwgbV9wb3BTbmFwc2hvdChmYWxz
ZSkKKyAgICAsIG1fZHJhd2luZ01vZGUoRHJhd1RyaWFuZ2xlRmFuQXJyYXlzKQogewogfQogCkBA
IC0xNDcsOCArMjU3LDE0IEBAIHZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6dXNlQWN0
aW9uT24oTGF5ZXJGaWx0ZXJSZW5kZXJlciogcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgZ2xVc2VQcm9ncmFtKHJlbmRlcmVyLT5tX2Nzc0ZpbHRlclByb2dyYW1PYmplY3Rb
bV9wcm9ncmFtSWRdKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91bmlmb3Jtcy5z
aXplKCk7ICsraSkKLSAgICAgICAgbV91bmlmb3Jtc1tpXS0+YXBwbHkoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJhbWV0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBtX3Bh
cmFtZXRlcnNbaV0tPmFwcGx5KCk7Cit9CisKK3ZvaWQgTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlv
bjo6cmVzdG9yZVN0YXRlKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJh
bWV0ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBtX3BhcmFtZXRlcnNbaV0tPnJlc3RvcmVTdGF0
ZSgpOwogfQogCiBQYXNzT3duUHRyPExheWVyRmlsdGVyUmVuZGVyZXI+IExheWVyRmlsdGVyUmVu
ZGVyZXI6OmNyZWF0ZShjb25zdCBpbnQmIHBvc2l0aW9uTG9jYXRpb24sIGNvbnN0IGludCYgdGV4
Q29vcmRMb2NhdGlvbikKQEAgLTE2MCw2ICsyNzYsOSBAQCBMYXllckZpbHRlclJlbmRlcmVyOjpM
YXllckZpbHRlclJlbmRlcmVyKGNvbnN0IGludCYgcG9zaXRpb25Mb2NhdGlvbiwgY29uc3QgaW50
JgogICAgIDogbV9wb3NpdGlvbkxvY2F0aW9uKHBvc2l0aW9uTG9jYXRpb24pCiAgICAgLCBtX3Rl
eENvb3JkTG9jYXRpb24odGV4Q29vcmRMb2NhdGlvbikKIHsKKyAgICAvLyBJZiB5b3UgZXZlciBt
b3ZlIHRoaXMgc3R1ZmYsIHBsZWFzZSBtYWtlIHN1cmUgdGhhdAorICAgIC8vIGV2ZXJ5dGhpbmcg
aW4gdGhpcyBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgQkVGT1JFIGFjdGlvbnNGb3JPcGVyYXRpb25z
LgorCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllckRhdGE6Ok51bWJlck9mQ1NTRmlsdGVy
U2hhZGVyczsgKytpKQogICAgICAgICBtX2Nzc0ZpbHRlclByb2dyYW1PYmplY3RbaV0gPSAwOwog
CkBAIC00MjksMTQgKzU0OCwxNCBAQCBWZWN0b3I8UmVmUHRyPExheWVyRmlsdGVyUmVuZGVyZXJB
Y3Rpb24+ID4gTGF5ZXJGaWx0ZXJSZW5kZXJlcjo6YWN0aW9uc0Zvck9wZXJhdAogICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpTQVRVUkFURToKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0g
ICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1f
YW1vdW50TG9jYXRpb25bcHJvZ3JhbUlkXQorICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5k
UGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bcHJvZ3JhbUlkXQog
ICAgICAgICAgICAgICAgICwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgogICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNP
TlRSQVNUOgogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAg
ICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRM
b2NhdGlvbltwcm9ncmFtSWRdCisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRQYXJhbWV0
ZXIoVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltwcm9ncmFtSWRdCiAgICAgICAg
ICAgICAgICAgLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgpAQCAtNDQ5LDE0ICs1NjgsMTQgQEAg
VmVjdG9yPFJlZlB0cjxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiA+IExheWVyRmlsdGVyUmVu
ZGVyZXI6OmFjdGlvbnNGb3JPcGVyYXQKICAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSBzdGF0
aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5zdGREZXZpYXRp
b24oKS52YWx1ZSgpOwogCiAgICAgICAgICAgICAvLyBCTFVSIFk6Ci0gICAgICAgICAgICByZXQu
bGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25b
TGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWV0sIGFtb3VudCkpOwotICAgICAgICAgICAg
cmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2JsdXJBbW91bnRM
b2NhdGlvblswXQorICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZv
cm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJC
bHVyWV0sIGFtb3VudCkpOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVy
KFVuaWZvcm0xZjo6Y3JlYXRlKG1fYmx1ckFtb3VudExvY2F0aW9uWzBdCiAgICAgICAgICAgICAg
ICAgLCAxLjBmIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLmhlaWdodCgpKSkpOwogCiAgICAgICAg
ICAgICAvLyBCTFVSIFg6CiAgICAgICAgICAgICByZXQuYXBwZW5kKExheWVyRmlsdGVyUmVuZGVy
ZXJBY3Rpb246OmNyZWF0ZShMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJYKSk7Ci0gICAg
ICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1v
dW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWF0sIGFtb3VudCkpOwot
ICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZSht
X2JsdXJBbW91bnRMb2NhdGlvblsxXQorICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFy
YW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NG
aWx0ZXJTaGFkZXJCbHVyWF0sIGFtb3VudCkpOworICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBw
ZW5kUGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYmx1ckFtb3VudExvY2F0aW9uWzFdCiAg
ICAgICAgICAgICAgICAgLCAxLjBmIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLndpZHRoKCkpKSk7
CiAKICAgICAgICAgICAgIH0KQEAgLTQ3MSwyNiArNTkwLDI2IEBAIFZlY3RvcjxSZWZQdHI8TGF5
ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPiBMYXllckZpbHRlclJlbmRlcmVyOjphY3Rpb25zRm9y
T3BlcmF0CiAgICAgICAgICAgICAvLyAgICAgNC4gcmVwYWludCBvcmlnaW5hbCBvbiB0b3Agb2Yg
bWFzawogICAgICAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHNmbyA9
IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24p
OwogICAgICAgICAgICAgcmV0Lmxhc3QoKS0+c2V0UHVzaFNuYXBzaG90KCk7Ci0gICAgICAgICAg
ICByZXQubGFzdCgpLT5hcHBlbmRVbmlmb3JtKFVuaWZvcm0yZjo6Y3JlYXRlKG1fb2Zmc2V0TG9j
YXRpb24KKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFBhcmFtZXRlcihVbmlmb3JtMmY6
OmNyZWF0ZShtX29mZnNldExvY2F0aW9uCiAgICAgICAgICAgICAgICAgLCBmbG9hdChkc2ZvLngo
KSkgLyBmbG9hdChzdXJmYWNlLT5zaXplKCkud2lkdGgoKSkKICAgICAgICAgICAgICAgICAsIGZs
b2F0KGRzZm8ueSgpKSAvIGZsb2F0KHN1cmZhY2UtPnNpemUoKS5oZWlnaHQoKSkpKTsKLSAgICAg
ICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTNmOjpjcmVhdGUobV9zaGFk
b3dDb2xvckxvY2F0aW9uCisgICAgICAgICAgICByZXQubGFzdCgpLT5hcHBlbmRQYXJhbWV0ZXIo
VW5pZm9ybTNmOjpjcmVhdGUobV9zaGFkb3dDb2xvckxvY2F0aW9uCiAgICAgICAgICAgICAgICAg
LCBmbG9hdChkc2ZvLmNvbG9yKCkucmVkKCkpIC8gMjU1LjBmCiAgICAgICAgICAgICAgICAgLCBm
bG9hdChkc2ZvLmNvbG9yKCkuZ3JlZW4oKSkgLyAyNTUuMGYKICAgICAgICAgICAgICAgICAsIGZs
b2F0KGRzZm8uY29sb3IoKS5ibHVlKCkpIC8gMjU1LjBmKSk7CiAKICAgICAgICAgICAgIC8vIEJM
VVIgWQogICAgICAgICAgICAgcmV0LmFwcGVuZChMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uOjpj
cmVhdGUoTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVyWSkpOwotICAgICAgICAgICAgcmV0
Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlmb3JtMWY6OmNyZWF0ZShtX2Ftb3VudExvY2F0aW9u
W0xheWVyRGF0YTo6Q1NTRmlsdGVyU2hhZGVyQmx1clldCisgICAgICAgICAgICByZXQubGFzdCgp
LT5hcHBlbmRQYXJhbWV0ZXIoVW5pZm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltMYXll
ckRhdGE6OkNTU0ZpbHRlclNoYWRlckJsdXJZXQogICAgICAgICAgICAgICAgICwgZHNmby5zdGRE
ZXZpYXRpb24oKSkpOwotICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kVW5pZm9ybShVbmlm
b3JtMWY6OmNyZWF0ZShtX2JsdXJBbW91bnRMb2NhdGlvblswXQorICAgICAgICAgICAgcmV0Lmxh
c3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0xZjo6Y3JlYXRlKG1fYmx1ckFtb3VudExvY2F0
aW9uWzBdCiAgICAgICAgICAgICAgICAgLCAxLjBmIC8gZmxvYXQoc3VyZmFjZS0+c2l6ZSgpLmhl
aWdodCgpKSkpOwogCiAgICAgICAgICAgICAvLyBCTFVSIFgKICAgICAgICAgICAgIHJldC5hcHBl
bmQoTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6Y3JlYXRlKExheWVyRGF0YTo6Q1NTRmlsdGVy
U2hhZGVyQmx1clgpKTsKLSAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5p
Zm9ybTFmOjpjcmVhdGUobV9hbW91bnRMb2NhdGlvbltMYXllckRhdGE6OkNTU0ZpbHRlclNoYWRl
ckJsdXJYXQorICAgICAgICAgICAgcmV0Lmxhc3QoKS0+YXBwZW5kUGFyYW1ldGVyKFVuaWZvcm0x
Zjo6Y3JlYXRlKG1fYW1vdW50TG9jYXRpb25bTGF5ZXJEYXRhOjpDU1NGaWx0ZXJTaGFkZXJCbHVy
WF0KICAgICAgICAgICAgICAgICAsIGRzZm8uc3RkRGV2aWF0aW9uKCkpKTsKLSAgICAgICAgICAg
IHJldC5sYXN0KCktPmFwcGVuZFVuaWZvcm0oVW5pZm9ybTFmOjpjcmVhdGUobV9ibHVyQW1vdW50
TG9jYXRpb25bMV0KKyAgICAgICAgICAgIHJldC5sYXN0KCktPmFwcGVuZFBhcmFtZXRlcihVbmlm
b3JtMWY6OmNyZWF0ZShtX2JsdXJBbW91bnRMb2NhdGlvblsxXQogICAgICAgICAgICAgICAgICwg
MS4wZiAvIGZsb2F0KHN1cmZhY2UtPnNpemUoKS53aWR0aCgpKSkpOwogCiAgICAgICAgICAgICAv
LyBSZXBhaW50IG9yaWdpbmFsIGltYWdlCkBAIC01NzUsNyArNjk0LDI0IEBAIHZvaWQgTGF5ZXJG
aWx0ZXJSZW5kZXJlcjo6YXBwbHlBY3Rpb25zKHVuc2lnbmVkJiBmYm8sIExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqIGxhCiAgICAgICAgIGlmIChhY3Rpb25zW2ldLT5zaG91bGRQb3BTbmFwc2hvdCgp
KQogICAgICAgICAgICAgcG9wU25hcHNob3QoKTsKIAotICAgICAgICBnbERyYXdBcnJheXMoR0xf
VFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICAgICAgc3dpdGNoIChhY3Rpb25zW2ldLT5kcmF3aW5n
TW9kZSgpKSB7CisgICAgICAgIGNhc2UgTGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6RHJhd1Ry
aWFuZ2xlRmFuQXJyYXlzOgorICAgICAgICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZB
TiwgMCwgNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMYXllckZpbHRlclJl
bmRlcmVyQWN0aW9uOjpEcmF3VHJpYW5nbGVFbGVtZW50c1VTaG9ydDA6CisgICAgICAgICAgICBn
bERyYXdFbGVtZW50cyhHTF9UUklBTkdMRVMsIGFjdGlvbnNbaV0tPmRyYXdpbmdNb2RlUGFyYW1l
dGVyKCksIEdMX1VOU0lHTkVEX1NIT1JULCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRp
Y19jYXN0PGludHB0cl90PigwKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbjo6TnVtYmVyT2ZEcmF3aW5nTW9kZXM6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgYWN0aW9uc1tpXS0+cmVzdG9yZVN0YXRlKCk7CisKKyAgICAgICAgZ2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNF
LCAwLCAmbGF5ZXItPmdldFRyYW5zZm9ybWVkQm91bmRzKCkgKTsKKyAgICAgICAgZ2xFbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShtX3Bvc2l0aW9uTG9jYXRpb24pOworICAgICAgICBnbFZlcnRleEF0
dHJpYlBvaW50ZXIobV90ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAs
IHRleGNvb3Jkcyk7CisgICAgICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV90ZXhDb29y
ZExvY2F0aW9uKTsKICAgICB9CiAKICAgICBtX3RleHR1cmUtPnVucHJvdGVjdCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZp
bHRlclJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuaAppbmRleCA3Y2E5M2U0NzBhYWJjZTJhMzI4YjhhYjA1
ZTg0YTg1NjM3ZDRiYzA5Li5kMDAxNTQwMDQ4ZDExNjg2NWQ1NTI0NDE3ZWJmMzhlNTcxZjI5ODY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyRmlsdGVyUmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuaApAQCAtNDEsMjIgKzQxLDMzIEBA
IGNsYXNzIExheWVyRmlsdGVyUmVuZGVyZXI7CiBjbGFzcyBMYXllckZpbHRlclJlbmRlcmVyQWN0
aW9uOwogY2xhc3MgTGF5ZXJSZW5kZXJlclN1cmZhY2U7CiAKLWNsYXNzIFVuaWZvcm1mIDogcHVi
bGljIFJlZkNvdW50ZWQ8VW5pZm9ybWY+IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVbmlm
b3JtZik7CitjbGFzcyBQYXJhbWV0ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxQYXJhbWV0ZXI+IHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYXJhbWV0ZXIpOwogcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBhcHBseSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVN0YXRlKCkgeyB9
CisgICAgdmlydHVhbCB+UGFyYW1ldGVyKCkgeyB9Citwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQg
UGFyYW1ldGVyKCkgeyB9Cit9OworCitjbGFzcyBVbmlmb3JtIDogcHVibGljIFBhcmFtZXRlciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVW5pZm9ybSk7CitwdWJsaWM6CisgICAgdmlydHVh
bCB2b2lkIGFwcGx5KCkgPSAwOworICAgIHZpcnR1YWwgflVuaWZvcm0oKSB7IH0KIAogcHJvdGVj
dGVkOgotICAgIFVuaWZvcm1mKGludCBsb2NhdGlvbik7CisgICAgVW5pZm9ybShpbnQgbG9jYXRp
b24pOwogICAgIGNvbnN0IGludCYgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9u
OyB9CiAKIHByaXZhdGU6CiAgICAgaW50IG1fbG9jYXRpb247CiB9OwogCi1jbGFzcyBVbmlmb3Jt
MWYgOiBwdWJsaWMgVW5pZm9ybWYgeworY2xhc3MgVW5pZm9ybTFmIDogcHVibGljIFVuaWZvcm0g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm1mPiBjcmVhdGUoaW50IGxv
Y2F0aW9uLCBmbG9hdCB2YWwpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm0+IGNyZWF0
ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbCk7CiAKIHByb3RlY3RlZDoKICAgICBVbmlmb3JtMWYo
aW50IGxvY2F0aW9uLCBmbG9hdCB2YWwpOwpAQCAtNjYsOSArNzcsMjEgQEAgcHJpdmF0ZToKICAg
ICBmbG9hdCBtX3ZhbDsKIH07CiAKLWNsYXNzIFVuaWZvcm0yZiA6IHB1YmxpYyBVbmlmb3JtZiB7
CitjbGFzcyBVbmlmb3JtMWkgOiBwdWJsaWMgVW5pZm9ybSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VW5pZm9ybT4gY3JlYXRlKGludCBsb2NhdGlvbiwgaW50IHZhbCk7CisKK3By
b3RlY3RlZDoKKyAgICBVbmlmb3JtMWkoaW50IGxvY2F0aW9uLCBpbnQgdmFsKTsKKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICBpbnQgbV92YWw7Cit9OworCitjbGFz
cyBVbmlmb3JtMmYgOiBwdWJsaWMgVW5pZm9ybSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8VW5pZm9ybWY+IGNyZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZh
bDEpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm0+IGNyZWF0ZShpbnQgbG9jYXRpb24s
IGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEpOwogCiBwcm90ZWN0ZWQ6CiAgICAgVW5pZm9ybTJmKGlu
dCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSk7CkBAIC03OCw5ICsxMDEsOSBAQCBw
cml2YXRlOgogICAgIGZsb2F0IG1fdmFsWzJdOwogfTsKIAotY2xhc3MgVW5pZm9ybTNmIDogcHVi
bGljIFVuaWZvcm1mIHsKK2NsYXNzIFVuaWZvcm0zZiA6IHB1YmxpYyBVbmlmb3JtIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxVbmlmb3JtZj4gY3JlYXRlKGludCBsb2NhdGlvbiwg
ZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSwgZmxvYXQgdmFsMik7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VW5pZm9ybT4gY3JlYXRlKGludCBsb2NhdGlvbiwgZmxvYXQgdmFsMCwgZmxvYXQgdmFsMSwg
ZmxvYXQgdmFsMik7CiAKIHByb3RlY3RlZDoKICAgICBVbmlmb3JtM2YoaW50IGxvY2F0aW9uLCBm
bG9hdCB2YWwwLCBmbG9hdCB2YWwxLCBmbG9hdCB2YWwyKTsKQEAgLTkwLDYgKzExMyw2NCBAQCBw
cml2YXRlOgogICAgIGZsb2F0IG1fdmFsWzNdOwogfTsKIAorY2xhc3MgVW5pZm9ybTRmIDogcHVi
bGljIFVuaWZvcm0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVuaWZvcm0+IGNy
ZWF0ZShpbnQgbG9jYXRpb24sIGZsb2F0IHZhbDAsIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIsIGZs
b2F0IHZhbDMpOworCitwcm90ZWN0ZWQ6CisgICAgVW5pZm9ybTRmKGludCBsb2NhdGlvbiwgZmxv
YXQgdmFsMCwgZmxvYXQgdmFsMSwgZmxvYXQgdmFsMiwgZmxvYXQgdmFsMyk7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CisgICAgZmxvYXQgbV92YWxbNF07Cit9OworCitj
bGFzcyBNYXRyaXg0ZnYgOiBwdWJsaWMgVW5pZm9ybSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGFyYW1ldGVyPiBjcmVhdGUoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWksIEdMYm9v
bGVhbiB0cmFuc3Bvc2UsIEdMZmxvYXQqIGFycmF5KTsKKworcHJvdGVjdGVkOgorICAgIE1hdHJp
eDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBsZW5ndGgsIEdMYm9vbGVhbiB0cmFuc3Bvc2Us
IEdMZmxvYXQqIGFycmF5KTsKKyAgICB+TWF0cml4NGZ2KCk7CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCB2b2lkIGFwcGx5KCk7CisgICAgR0xpbnQgbV9sb2NhdGlvbjsKKyAgICBHTHNpemVpIG1f
c2l6ZTsKKyAgICBHTGJvb2xlYW4gbV90cmFuc3Bvc2U7CisgICAgR0xmbG9hdCogbV9hcnJheTsK
K307CisKK2NsYXNzIEJ1ZmZlciA6IHB1YmxpYyBQYXJhbWV0ZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBhcmFtZXRlcj4gY3JlYXRlKEdMZW51bSBidWZmZXIsIEdMdWludCBp
bmRleCk7CisKK3Byb3RlY3RlZDoKKyAgICBCdWZmZXIoR0xlbnVtIGJ1ZmZlciwgR0x1aW50IGlu
ZGV4KTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzdG9yZVN0YXRlKCk7CisgICAgR0xlbnVtIG1fYnVmZmVyOworICAgIEdMdWludCBt
X29iamVjdDsKK307CisKK2NsYXNzIFZlcnRleEF0dHJpYmYgOiBwdWJsaWMgUGFyYW1ldGVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYXJhbWV0ZXI+IGNyZWF0ZShpbnQgbG9j
YXRpb24sIGludCBzaXplLCBpbnQgYnl0ZXNQZXJWZXJ0ZXgsIGludCBvZmZzZXQpOworCitwcm90
ZWN0ZWQ6CisgICAgVmVydGV4QXR0cmliZihpbnQgbG9jYXRpb24sIGludCBzaXplLCBpbnQgYnl0
ZXNQZXJWZXJ0ZXgsIGludCBvZmZzZXQpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBh
cHBseSgpOworICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlU3RhdGUoKTsKKyAgICBpbnQgbV9sb2Nh
dGlvbjsKKyAgICBpbnQgbV9zaXplOworICAgIGludCBtX2J5dGVzUGVyVmVydGV4OworICAgIGlu
dCBtX29mZnNldDsKK307CisKIGNsYXNzIExheWVyRmlsdGVyUmVuZGVyZXJBY3Rpb24gOiBwdWJs
aWMgUmVmQ291bnRlZDxMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uPiB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gY3JlYXRlKGludCBw
cm9ncmFtSWQpOwpAQCAtMTAyLDE1ICsxODMsMzMgQEAgcHVibGljOgogICAgIGJvb2wgc2hvdWxk
UG9wU25hcHNob3QoKSBjb25zdCB7IHJldHVybiBtX3BvcFNuYXBzaG90OyB9CiAgICAgdm9pZCBz
ZXRQb3BTbmFwc2hvdCgpIHsgbV9wb3BTbmFwc2hvdCA9IHRydWU7IH0KIAotICAgIHZvaWQgYXBw
ZW5kVW5pZm9ybShjb25zdCBSZWZQdHI8VW5pZm9ybWY+JiB1bmlmb3JtKSB7IG1fdW5pZm9ybXMu
YXBwZW5kKHVuaWZvcm0pOyB9CisgICAgdm9pZCBhcHBlbmRQYXJhbWV0ZXIoY29uc3QgUmVmUHRy
PFBhcmFtZXRlcj4mIHVuaWZvcm0pIHsgbV9wYXJhbWV0ZXJzLmFwcGVuZCh1bmlmb3JtKTsgfQog
ICAgIHZvaWQgdXNlQWN0aW9uT24oTGF5ZXJGaWx0ZXJSZW5kZXJlciopOworICAgIHZvaWQgcmVz
dG9yZVN0YXRlKCk7CisKKyAgICBlbnVtIERyYXdpbmdNb2RlIHsKKyAgICAgICAgRHJhd1RyaWFu
Z2xlRmFuQXJyYXlzID0gMCwKKyAgICAgICAgRHJhd1RyaWFuZ2xlRWxlbWVudHNVU2hvcnQwLAor
ICAgICAgICBOdW1iZXJPZkRyYXdpbmdNb2RlcworICAgIH07CisKKyAgICBEcmF3aW5nTW9kZSBk
cmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ01vZGU7IH0KKyAgICB2b2lkIHNl
dERyYXdpbmdNb2RlKGNvbnN0IERyYXdpbmdNb2RlJiBtb2RlKSB7IG1fZHJhd2luZ01vZGUgPSBt
b2RlOyB9CisKKyAgICBpbnQgZHJhd2luZ01vZGVQYXJhbWV0ZXIoKSBjb25zdCB7IHJldHVybiBt
X2RyYXdpbmdNb2RlUGFyYW1ldGVyOyB9CisgICAgdm9pZCBzZXREcmF3aW5nTW9kZVBhcmFtZXRl
cihpbnQgcCkgeyBtX2RyYXdpbmdNb2RlUGFyYW1ldGVyID0gcDsgfQorCiAKIHByb3RlY3RlZDoK
ICAgICBpbnQgbV9wcm9ncmFtSWQ7CiAgICAgYm9vbCBtX3B1c2hTbmFwc2hvdDsKICAgICBib29s
IG1fcG9wU25hcHNob3Q7CiAKLSAgICBWZWN0b3I8UmVmUHRyPFVuaWZvcm1mPiA+IG1fdW5pZm9y
bXM7CisgICAgVmVjdG9yPFJlZlB0cjxQYXJhbWV0ZXI+ID4gbV9wYXJhbWV0ZXJzOworCisgICAg
RHJhd2luZ01vZGUgbV9kcmF3aW5nTW9kZTsKKyAgICBpbnQgbV9kcmF3aW5nTW9kZVBhcmFtZXRl
cjsKKwogcHJpdmF0ZToKICAgICBMYXllckZpbHRlclJlbmRlcmVyQWN0aW9uKGludCBwcm9ncmFt
SWQpOwogfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>