<?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>124987</bug_id>
          
          <creation_ts>2013-11-28 11:03:13 -0800</creation_ts>
          <short_desc>Nix Upstream: Adding missing nix new files to WebCore</short_desc>
          <delta_ts>2013-12-04 06:27:05 -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>WebCore Misc.</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>124950</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Thiago de Barros Lacerda">thiago.lacerda</reporter>
          <assigned_to name="Thiago de Barros Lacerda">thiago.lacerda</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>954795</commentid>
    <comment_count>0</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-11-28 11:03:13 -0800</bug_when>
    <thetext>Nix specific files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954800</commentid>
    <comment_count>1</comment_count>
      <attachid>218020</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-11-28 11:05:23 -0800</bug_when>
    <thetext>Created attachment 218020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955601</commentid>
    <comment_count>2</comment_count>
      <attachid>218020</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-02 14:50:16 -0800</bug_when>
    <thetext>Comment on attachment 218020
Patch

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

&gt; Source/WebCore/platform/nix/FileSystemNix.cpp:49
&gt; +/* On linux file names are just raw bytes, so also strings that cannot be encoded in any way
&gt; + * are valid file names. This mean that we cannot just store a file name as-is in a String
&gt; + * but we have to escape it.
&gt; + * On Windows the GLib file name encoding is always UTF-8 so we can optimize this case. */

This file is in WebCore/platform. It should use regular comment style.

&gt; Source/WebCore/platform/nix/FileSystemNix.cpp:208
&gt; +    static CString cachedPath;

This needs DEFINE_STATIC_LOCAL.

&gt; Source/WebCore/platform/nix/FileSystemNix.cpp:230
&gt; +    /* No null checking needed */

Comment style.

This comment does not add much. It does not explain the &quot;why&quot; of the code.

&gt; Source/WebCore/platform/nix/MIMETypeRegistryNix.cpp:87
&gt; +    String s = ext.lower();
&gt; +    const ExtensionMap *e = extensionMap;
&gt; +    while (e-&gt;extension) {
&gt; +        if (s == e-&gt;extension)
&gt; +            return e-&gt;mimeType;
&gt; +        ++e;
&gt; +    }

Name the variables, &quot;s&quot; and &quot;e&quot; is no good.

&gt; Source/WebCore/platform/nix/SharedTimerNix.cpp:45
&gt; +void setSharedTimerFiredFunction(void (*f)())
&gt; +{
&gt; +    sharedTimerFiredFunction = f;
&gt; +}

Name &quot;f&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955638</commentid>
    <comment_count>3</comment_count>
      <attachid>218226</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-12-02 15:27:59 -0800</bug_when>
    <thetext>Created attachment 218226
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955641</commentid>
    <comment_count>4</comment_count>
      <attachid>218226</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-12-02 15:29:53 -0800</bug_when>
    <thetext>Comment on attachment 218226
Patch

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

LGTM.

&gt; Source/WebCore/platform/nix/FileSystemNix.cpp:137
&gt; +

Extra blank line here.

&gt; Source/WebCore/platform/nix/FileSystemNix.cpp:155
&gt; +

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955759</commentid>
    <comment_count>5</comment_count>
      <attachid>218261</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-12-02 20:30:10 -0800</bug_when>
    <thetext>Created attachment 218261
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955881</commentid>
    <comment_count>6</comment_count>
      <attachid>218261</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-03 06:23:08 -0800</bug_when>
    <thetext>Comment on attachment 218261
Patch for landing

Clearing flags on attachment: 218261

Committed r160001: &lt;http://trac.webkit.org/changeset/160001&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218020</attachid>
            <date>2013-11-28 11:05:23 -0800</date>
            <delta_ts>2013-12-02 15:27:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124987-20131128160521.patch</filename>
            <type>text/plain</type>
            <size>31215</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5ODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNlZWMwMGZjNDY1NzQ5
YmIzYjZjMWZjZTY0NGMyYmM1ZDI0ODgyMi4uNmM3OTQ3MTg2NTBhNGUxMjAyM2QyMGY4NzE1MWVl
ZDllYjRjODVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTExLTI4ICBUaGlh
Z28gZGUgQmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIE5peCBVcHN0cmVhbTogQWRkaW5nIG1pc3Npbmcgbml4IG5ldyBmaWxlcyB0byBXZWJD
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ5
ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgbmVlZGVkLgorCisgICAgICAgICogUGxhdGZvcm1OaXguY21ha2U6CisgICAgICAg
ICogcGxhdGZvcm0vbml4L0Vycm9yc05peC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L25peC9FcnJvcnNOaXguaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbml4L0ZpbGVTeXN0
ZW1OaXguY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uaXgvTUlNRVR5cGVSZWdpc3Ry
eU5peC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25peC9TaGFyZWRUaW1lck5peC5j
cHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25peC9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
OiBBZGRlZC4KKwogMjAxMy0xMS0yOCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmVtb3ZlIGZlYXR1cmU6IENTUyB2YXJpYWJsZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTml4LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1O
aXguY21ha2UKaW5kZXggYWU1NzY0MWY1MmZjNWI5MjczMzM2ZGU2ODUxNDA5MzVjMjkzNWJkYi4u
OWQ1MjYwODZiMWEwOWE2NzQ0OWM2Njc3NTZiZGY2NTQ2ZGMzNjk1MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1OaXguY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1OaXguY21ha2UKQEAgLTg3LDE2ICs4NywyMSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9uaXgvQ3Vyc29yTml4LmNwcAogICAgIHBsYXRmb3JtL25peC9EcmFn
RGF0YU5peC5jcHAKICAgICBwbGF0Zm9ybS9uaXgvRHJhZ0ltYWdlTml4LmNwcAorICAgIHBsYXRm
b3JtL25peC9FcnJvcnNOaXguY3BwCisgICAgcGxhdGZvcm0vbml4L0ZpbGVTeXN0ZW1OaXguY3Bw
CiAgICAgcGxhdGZvcm0vbml4L0dhbWVwYWRzTml4LmNwcAogICAgIHBsYXRmb3JtL25peC9MYW5n
dWFnZU5peC5jcHAKICAgICBwbGF0Zm9ybS9uaXgvTG9jYWxpemVkU3RyaW5nc05peC5jcHAKKyAg
ICBwbGF0Zm9ybS9uaXgvTUlNRVR5cGVSZWdpc3RyeU5peC5jcHAKICAgICBwbGF0Zm9ybS9uaXgv
Tml4S2V5Ym9hcmRVdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vbml4L1Bhc3RlYm9hcmROaXgu
Y3BwCiAgICAgcGxhdGZvcm0vbml4L1BsYXRmb3JtS2V5Ym9hcmRFdmVudE5peC5jcHAKICAgICBw
bGF0Zm9ybS9uaXgvUGxhdGZvcm1TY3JlZW5OaXguY3BwCiAgICAgcGxhdGZvcm0vbml4L1JlbmRl
clRoZW1lTml4LmNwcAogICAgIHBsYXRmb3JtL25peC9TY3JvbGxiYXJUaGVtZU5peC5jcHAKKyAg
ICBwbGF0Zm9ybS9uaXgvU2hhcmVkVGltZXJOaXguY3BwCiAgICAgcGxhdGZvcm0vbml4L1NvdW5k
Tml4LmNwcAorICAgIHBsYXRmb3JtL25peC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgICAgcGxh
dGZvcm0vbml4L1dpZGdldE5peC5jcHAKIAogICAgIHBsYXRmb3JtL25peC9zdXBwb3J0L011bHRp
Q2hhbm5lbFBDTURhdGEuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
aXgvRXJyb3JzTml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9FcnJvcnNOaXgu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQ5MjliZTRjZWQ5OTQwYzdiY2I1ZTQ1MTgyNzAxOTJmNGJmMmIwN2EK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvRXJyb3JzTml4
LmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFcnJvcnNOaXguaCIKKworI2lu
Y2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQ
cmludENvbnRleHQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Jlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9t
YWluTmV0d29yaywgTmV0d29ya0Vycm9yQ2FuY2VsbGVkLCByZXF1ZXN0LnVybCgpLnN0cmluZygp
LCBBU0NJSUxpdGVyYWwoIkxvYWQgcmVxdWVzdCBjYW5jZWxsZWQiKSk7Cit9CisKK1Jlc291cmNl
RXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAg
ICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JDYW5u
b3RVc2VSZXN0cmljdGVkUG9ydCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgQVNDSUlMaXRlcmFs
KCJOb3QgYWxsb3dlZCB0byB1c2UgcmVzdHJpY3RlZCBuZXR3b3JrIHBvcnQiKSk7Cit9CisKK1Jl
c291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9s
aWN5RXJyb3JDYW5ub3RTaG93VVJMLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLCBBU0NJSUxpdGVy
YWwoIlVSTCBjYW5ub3QgYmUgc2hvd24iKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgaW50ZXJydXB0
ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7
CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Qb2xpY3ksIFBvbGljeUVycm9y
RnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBvbGljeUNoYW5nZSwgcmVxdWVzdC51cmwoKS5zdHJpbmco
KSwgQVNDSUlMaXRlcmFsKCJGcmFtZSBsb2FkIHdhcyBpbnRlcnJ1cHRlZCIpKTsKK30KKworUmVz
b3VyY2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGlj
eSwgUG9saWN5RXJyb3JDYW5ub3RTaG93TWltZVR5cGUsIHJlc3BvbnNlLnVybCgpLnN0cmluZygp
LCBBU0NJSUxpdGVyYWwoIkNvbnRlbnQgd2l0aCB0aGUgc3BlY2lmaWVkIE1JTUUgdHlwZSBjYW5u
b3QgYmUgc2hvd24iKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlzdEVycm9y
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHJldHVybiBSZXNvdXJj
ZUVycm9yKGVycm9yRG9tYWluTmV0d29yaywgTmV0d29ya0Vycm9yRmlsZURvZXNOb3RFeGlzdCwg
cmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIEFTQ0lJTGl0ZXJhbCgiRmlsZSBkb2VzIG5vdCBleGlz
dCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9y
KGVycm9yRG9tYWluUGx1Z2luLCBQbHVnaW5FcnJvcldpbGxIYW5kbGVMb2FkLCByZXNwb25zZS51
cmwoKS5zdHJpbmcoKSwgQVNDSUlMaXRlcmFsKCJQbHVnaW4gd2lsbCBoYW5kbGUgbG9hZCIpKTsK
K30KKworUmVzb3VyY2VFcnJvciBkb3dubG9hZE5ldHdvcmtFcnJvcihjb25zdCBSZXNvdXJjZUVy
cm9yJiBuZXR3b3JrRXJyb3IpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21h
aW5Eb3dubG9hZCwgRG93bmxvYWRFcnJvck5ldHdvcmssIG5ldHdvcmtFcnJvci5mYWlsaW5nVVJM
KCksIG5ldHdvcmtFcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpKTsKK30KKworUmVzb3VyY2VF
cnJvciBkb3dubG9hZENhbmNlbGxlZEJ5VXNlckVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluRG93bmxv
YWQsIERvd25sb2FkRXJyb3JDYW5jZWxsZWRCeVVzZXIsIHJlc3BvbnNlLnVybCgpLnN0cmluZygp
LCBBU0NJSUxpdGVyYWwoIlVzZXIgY2FuY2VsbGVkIHRoZSBkb3dubG9hZCIpKTsKK30KKworUmVz
b3VyY2VFcnJvciBkb3dubG9hZERlc3RpbmF0aW9uRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiBS
ZXNvdXJjZUVycm9yKGVycm9yRG9tYWluRG93bmxvYWQsIERvd25sb2FkRXJyb3JEZXN0aW5hdGlv
biwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIGVycm9yTWVzc2FnZSk7Cit9CisKK1Jlc291cmNl
RXJyb3IgcHJpbnRFcnJvcihjb25zdCBQcmludENvbnRleHQqIHByaW50Q29udGV4dCwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9h
ZGVyID0gcHJpbnRDb250ZXh0LT5mcmFtZSgpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOwor
CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QcmludCwgUHJpbnRFcnJvckdl
bmVyYWwsIGRvY3VtZW50TG9hZGVyID8gZG9jdW1lbnRMb2FkZXItPnVybCgpIDogVVJMKCksIGVy
cm9yTWVzc2FnZSk7Cit9CisKK1Jlc291cmNlRXJyb3IgcHJpbnRlck5vdEZvdW5kRXJyb3IoY29u
c3QgUHJpbnRDb250ZXh0KiBwcmludENvbnRleHQpCit7CisgICAgRG9jdW1lbnRMb2FkZXIqIGRv
Y3VtZW50TG9hZGVyID0gcHJpbnRDb250ZXh0LT5mcmFtZSgpLT5sb2FkZXIoKS5kb2N1bWVudExv
YWRlcigpOworCisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QcmludCwgUHJp
bnRFcnJvclByaW50ZXJOb3RGb3VuZCwgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+
dXJsKCkgOiBVUkwoKSwgQVNDSUlMaXRlcmFsKCJQcmludGVyIG5vdCBmb3VuZCIpKTsKK30KKwor
UmVzb3VyY2VFcnJvciBpbnZhbGlkUGFnZVJhbmdlVG9QcmludChjb25zdCBQcmludENvbnRleHQq
IHByaW50Q29udGV4dCkKK3sKKyAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBw
cmludENvbnRleHQtPmZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7CisKKyAgICBy
ZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblByaW50LCBQcmludEVycm9ySW52YWxpZFBh
Z2VSYW5nZSwgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+dXJsKCkgOiBVUkwoKSwg
QVNDSUlMaXRlcmFsKCJJbnZhbGlkIHBhZ2UgcmFuZ2UiKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L0Vycm9y
c05peC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L0Vycm9yc05peC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM3MWIwZWM5MzkzMTNjMWJiYmRhMjJlZGE4MjBjNmU5YzlkMDAzY2IKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvRXJyb3JzTml4LmgKQEAgLTAsMCAr
MSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEVycm9yc05peF9oCisjZGVmaW5lIEVycm9yc05peF9oCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQcmludENvbnRleHQ7
CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKKworc3RhdGljIGNvbnN0IGNoYXIgZXJyb3JEb21haW5OZXR3b3JrW10g
PSAiV2ViS2l0TmV0d29ya0Vycm9yIjsKK3N0YXRpYyBjb25zdCBjaGFyIGVycm9yRG9tYWluUG9s
aWN5W10gPSAiV2ViS2l0UG9saWN5RXJyb3IiOworc3RhdGljIGNvbnN0IGNoYXIgZXJyb3JEb21h
aW5QbHVnaW5bXSA9ICJXZWJLaXRQbHVnaW5FcnJvciI7CitzdGF0aWMgY29uc3QgY2hhciBlcnJv
ckRvbWFpbkRvd25sb2FkW10gPSAiV2ViS2l0RG93bmxvYWRFcnJvciI7CitzdGF0aWMgY29uc3Qg
Y2hhciBlcnJvckRvbWFpblByaW50W10gPSAiV2ViS2l0UHJpbnRFcnJvciI7CisKK2VudW0gTmV0
d29ya0Vycm9yIHsKKyAgICBOZXR3b3JrRXJyb3JGYWlsZWQgPSAzOTksCisgICAgTmV0d29ya0Vy
cm9yVHJhbnNwb3J0ID0gMzAwLAorICAgIE5ldHdvcmtFcnJvclVua25vd25Qcm90b2NvbCA9IDMw
MSwKKyAgICBOZXR3b3JrRXJyb3JDYW5jZWxsZWQgPSAzMDIsCisgICAgTmV0d29ya0Vycm9yRmls
ZURvZXNOb3RFeGlzdCA9IDMwMworfTsKKworLy8gU3luYydkIHdpdGggTWFjJ3MgV2ViS2l0IEVy
cm9ycyBhdDoKKy8vIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0RXJyb3JzW1ByaXZhdGVd
LmgKK2VudW0gUG9saWN5RXJyb3IgeworICAgIFBvbGljeUVycm9yRmFpbGVkID0gMTk5LAorICAg
IFBvbGljeUVycm9yQ2Fubm90U2hvd01pbWVUeXBlID0gMTAwLAorICAgIFBvbGljeUVycm9yQ2Fu
bm90U2hvd1VSTCA9IDEwMSwKKyAgICBQb2xpY3lFcnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQ
b2xpY3lDaGFuZ2UgPSAxMDIsCisgICAgUG9saWN5RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9y
dCA9IDEwMworfTsKKworZW51bSBQbHVnaW5FcnJvciB7CisgICAgUGx1Z2luRXJyb3JGYWlsZWQg
PSAyOTksCisgICAgUGx1Z2luRXJyb3JDYW5ub3RGaW5kUGx1Z2luID0gMjAwLAorICAgIFBsdWdp
bkVycm9yQ2Fubm90TG9hZFBsdWdpbiA9IDIwMSwKKyAgICBQbHVnaW5FcnJvckphdmFVbmF2YWls
YWJsZSA9IDIwMiwKKyAgICBQbHVnaW5FcnJvckNvbm5lY3Rpb25DYW5jZWxsZWQgPSAyMDMsCisg
ICAgUGx1Z2luRXJyb3JXaWxsSGFuZGxlTG9hZCA9IDIwNAorfTsKKworZW51bSBEb3dubG9hZEVy
cm9yIHsKKyAgICBEb3dubG9hZEVycm9yTmV0d29yayA9IDQ5OSwKKyAgICBEb3dubG9hZEVycm9y
Q2FuY2VsbGVkQnlVc2VyID0gNDAwLAorICAgIERvd25sb2FkRXJyb3JEZXN0aW5hdGlvbiA9IDQw
MQorfTsKKworZW51bSBQcmludEVycm9yIHsKKyAgICBQcmludEVycm9yR2VuZXJhbCA9IDU5OSwK
KyAgICBQcmludEVycm9yUHJpbnRlck5vdEZvdW5kID0gNTAwLAorICAgIFByaW50RXJyb3JJbnZh
bGlkUGFnZVJhbmdlID0gNTAxCit9OworCitSZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0Jik7CitSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKTsKK1Jlc291cmNlRXJyb3IgaW50ZXJydXB0ZWRGb3JQb2xpY3lD
aGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKK1Jlc291cmNlRXJyb3IgY2Fubm90
U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworUmVzb3VyY2VFcnJv
ciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworUmVzb3Vy
Y2VFcnJvciBwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KTsKK1Jlc291cmNlRXJyb3IgZG93bmxvYWROZXR3b3JrRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJv
ciYpOworUmVzb3VyY2VFcnJvciBkb3dubG9hZENhbmNlbGxlZEJ5VXNlckVycm9yKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKK1Jlc291cmNlRXJyb3IgZG93bmxvYWREZXN0aW5hdGlvbkVycm9y
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CitS
ZXNvdXJjZUVycm9yIHByaW50RXJyb3IoY29uc3QgUHJpbnRDb250ZXh0KiwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpOworUmVzb3VyY2VFcnJvciBwcmludGVyTm90Rm91bmRFcnJvcihjb25z
dCBQcmludENvbnRleHQqKTsKK1Jlc291cmNlRXJyb3IgaW52YWxpZFBhZ2VSYW5nZVRvUHJpbnQo
Y29uc3QgUHJpbnRDb250ZXh0Kik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVycm9yc05peF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25p
eC9GaWxlU3lzdGVtTml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9GaWxlU3lz
dGVtTml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzAzOTg1Yzg4MTJmOTNjNzJhMzk5YmNjMmZjNGI1YmMx
YzE4MjI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L0Zp
bGVTeXN0ZW1OaXguY3BwCkBAIC0wLDAgKzEsMzQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhLCBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xh
IE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVt
LmgiCisKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJVVUlELmgiCisjaW5j
bHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRp
by5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR2xpYlV0aWxpdGllcy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKiBPbiBsaW51eCBmaWxlIG5hbWVzIGFy
ZSBqdXN0IHJhdyBieXRlcywgc28gYWxzbyBzdHJpbmdzIHRoYXQgY2Fubm90IGJlIGVuY29kZWQg
aW4gYW55IHdheQorICogYXJlIHZhbGlkIGZpbGUgbmFtZXMuIFRoaXMgbWVhbiB0aGF0IHdlIGNh
bm5vdCBqdXN0IHN0b3JlIGEgZmlsZSBuYW1lIGFzLWlzIGluIGEgU3RyaW5nCisgKiBidXQgd2Ug
aGF2ZSB0byBlc2NhcGUgaXQuCisgKiBPbiBXaW5kb3dzIHRoZSBHTGliIGZpbGUgbmFtZSBlbmNv
ZGluZyBpcyBhbHdheXMgVVRGLTggc28gd2UgY2FuIG9wdGltaXplIHRoaXMgY2FzZS4gKi8KK1N0
cmluZyBmaWxlbmFtZVRvU3RyaW5nKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQoreworICAgIGlmICgh
ZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIEdPd25QdHI8Z2NoYXI+
IGVzY2FwZWRTdHJpbmcoZ191cmlfZXNjYXBlX3N0cmluZyhmaWxlbmFtZSwgIi86IiwgZmFsc2Up
KTsKKyAgICByZXR1cm4gZXNjYXBlZFN0cmluZy5nZXQoKTsKK30KKworQ1N0cmluZyBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIEdPd25QdHI8Z2No
YXI+IGZpbGVuYW1lKGdfdXJpX3VuZXNjYXBlX3N0cmluZyhwYXRoLnV0ZjgoKS5kYXRhKCksIDAp
KTsKKyAgICByZXR1cm4gZmlsZW5hbWUuZ2V0KCk7Cit9CisKKy8vIENvbnZlcnRzIGEgc3RyaW5n
IHRvIHNvbWV0aGluZyBzdWl0YWJsZSB0byBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuCitTdHJp
bmcgZmlsZW5hbWVGb3JEaXNwbGF5KGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIENTdHJp
bmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3RyaW5nKTsKKyAgICBHT3du
UHRyPGdjaGFyPiBkaXNwbGF5KGdfZmlsZW5hbWVfdG9fdXRmOChmaWxlbmFtZS5kYXRhKCksIDAs
IDAsIDAsIDApKTsKKyAgICBpZiAoIWRpc3BsYXkpCisgICAgICAgIHJldHVybiBzdHJpbmc7CisK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkaXNwbGF5LmdldCgpKTsKK30KKworYm9vbCBm
aWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNl
OworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7
CisKKyAgICBpZiAoIWZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAgICByZXN1bHQgPSBnX2ZpbGVf
dGVzdChmaWxlbmFtZS5kYXRhKCksIEdfRklMRV9URVNUX0VYSVNUUyk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAg
IGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkpCisgICAg
ICAgIHJlc3VsdCA9ICFnX3JlbW92ZShmaWxlbmFtZS5kYXRhKCkpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgp
Cit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworCisgICAgaWYgKCFmaWxlbmFtZS5pc051bGwo
KSkKKyAgICAgICAgcmVzdWx0ID0gIWdfcm1kaXIoZmlsZW5hbWUuZGF0YSgpKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBs
b25nIGxvbmcmIHJlc3VsdFNpemUpCit7CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7CisgICAgZ2ludCBy
ZXN1bHQgPSBnX3N0YXQoZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3VsdCk7CisgICAgaWYgKHJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0U2l6ZSA9IHN0YXRSZXN1
bHQuc3Rfc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBnZXRGaWxlTW9kaWZpY2F0
aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgbW9kaWZpZWRUaW1lKQoreworICAg
IENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAg
aWYgKGZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHU3Rh
dEJ1ZiBzdGF0UmVzdWx0OworICAgIGdpbnQgcmVzdWx0ID0gZ19zdGF0KGZpbGVuYW1lLmRhdGEo
KSwgJnN0YXRSZXN1bHQpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1vZGlmaWVkVGltZSA9IHN0YXRSZXN1bHQuc3RfbXRpbWU7CisgICAgcmV0dXJuIHRy
dWU7CisKK30KKworYm9vbCBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxl
TWV0YWRhdGEmIG1ldGFkYXRhKQoreworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0UmVzdWx0OworICAgIGdpbnQg
cmVzdWx0ID0gZ19zdGF0KGZpbGVuYW1lLmRhdGEoKSwgJnN0YXRSZXN1bHQpOworICAgIGlmIChy
ZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1ldGFkYXRhLm1vZGlmaWNhdGlv
blRpbWUgPSBzdGF0UmVzdWx0LnN0X210aW1lOworICAgIG1ldGFkYXRhLmxlbmd0aCA9IHN0YXRS
ZXN1bHQuc3Rfc2l6ZTsKKyAgICBtZXRhZGF0YS50eXBlID0gU19JU0RJUihzdGF0UmVzdWx0LnN0
X21vZGUpID8gRmlsZU1ldGFkYXRhOjpUeXBlRGlyZWN0b3J5IDogRmlsZU1ldGFkYXRhOjpUeXBl
RmlsZTsKKyAgICByZXR1cm4gdHJ1ZTsKKworfQorCitTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCit7Cisg
ICAgaWYgKHBhdGguZW5kc1dpdGgoR19ESVJfU0VQQVJBVE9SX1MpKQorICAgICAgICByZXR1cm4g
cGF0aCArIGNvbXBvbmVudDsKKyAgICByZXR1cm4gcGF0aCArIEdfRElSX1NFUEFSQVRPUl9TICsg
Y29tcG9uZW50OworfQorCitib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBh
dGgpCit7CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKTsKKyAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGdpbnQgcmVzdWx0ID0gZ19ta2Rpcl93aXRoX3BhcmVudHMoZmlsZW5hbWUuZGF0YSgp
LCBTX0lSV1hVKTsKKworICAgIHJldHVybiAhcmVzdWx0OworfQorCitTdHJpbmcgaG9tZURpcmVj
dG9yeVBhdGgoKQoreworICAgIHJldHVybiBmaWxlbmFtZVRvU3RyaW5nKGdfZ2V0X2hvbWVfZGly
KCkpOworfQorCitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aE5hbWUp
Cit7CisgICAgaWYgKHBhdGhOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHBhdGhOYW1l
OworCisgICAgQ1N0cmluZyB0bXBGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoTmFtZSk7CisgICAgR093blB0cjxnY2hhcj4gYmFzZU5hbWUoZ19wYXRoX2dldF9iYXNlbmFt
ZSh0bXBGaWxlbmFtZS5kYXRhKCkpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChiYXNl
TmFtZS5nZXQoKSk7Cit9CisKK0NTdHJpbmcgYXBwbGljYXRpb25EaXJlY3RvcnlQYXRoKCkKK3sK
KyAgICBDU3RyaW5nIHBhdGggPSBnZXRDdXJyZW50RXhlY3V0YWJsZVBhdGgoKTsKKyAgICBpZiAo
IXBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBwYXRoOworCisgICAgLy8gSWYgdGhlIGFi
b3ZlIGZhaWxzLCBjaGVjayB0aGUgUEFUSCBlbnYgdmFyaWFibGUuCisgICAgR093blB0cjxjaGFy
PiBjdXJyZW50RXhlUGF0aChnX2ZpbmRfcHJvZ3JhbV9pbl9wYXRoKGdfZ2V0X3ByZ25hbWUoKSkp
OworICAgIGlmICghY3VycmVudEV4ZVBhdGguZ2V0KCkpCisgICAgICAgIHJldHVybiBDU3RyaW5n
KCk7CisKKyAgICBHT3duUHRyPGNoYXI+IGRpcm5hbWUoZ19wYXRoX2dldF9kaXJuYW1lKGN1cnJl
bnRFeGVQYXRoLmdldCgpKSk7CisgICAgcmV0dXJuIGRpcm5hbWUuZ2V0KCk7Cit9CisKK0NTdHJp
bmcgc2hhcmVkUmVzb3VyY2VzUGF0aCgpCit7CisgICAgc3RhdGljIENTdHJpbmcgY2FjaGVkUGF0
aDsKKyAgICBpZiAoIWNhY2hlZFBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBjYWNoZWRQ
YXRoOworCisgICAgR093blB0cjxnY2hhcj4gZGF0YVBhdGgoZ19idWlsZF9maWxlbmFtZShEQVRB
X0RJUiwgIndlYmtpdG5peCIsIE5VTEwpKTsKKworICAgIGNhY2hlZFBhdGggPSBkYXRhUGF0aC5n
ZXQoKTsKKyAgICByZXR1cm4gY2FjaGVkUGF0aDsKK30KKwordWludDY0X3QgZ2V0Vm9sdW1lRnJl
ZVNpemVGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgR1JlZlB0cjxHRmlsZT4gZmls
ZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHBhdGgpKTsKKyAgICBHUmVmUHRyPEdG
aWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2ZpbGVzeXN0ZW1faW5m
byhmaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSwgMCwgMCkpOwor
ICAgIGlmICghZmlsZUluZm8pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdfZmls
ZV9pbmZvX2dldF9hdHRyaWJ1dGVfdWludDY0KGZpbGVJbmZvLmdldCgpLCBHX0ZJTEVfQVRUUklC
VVRFX0ZJTEVTWVNURU1fRlJFRSk7Cit9CisKK1N0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyAgICAvKiBObyBudWxsIGNoZWNraW5nIG5lZWRlZCAqLworICAgIEdP
d25QdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoZmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uKHBhdGgpLmRhdGEoKSkpOworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRpcm5h
bWUuZ2V0KCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZW50
cmllczsKKworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCk7CisgICAgR0RpciogZGlyID0gZ19kaXJfb3BlbihmaWxlbmFtZS5kYXRhKCksIDAsIDAp
OworICAgIGlmICghZGlyKQorICAgICAgICByZXR1cm4gZW50cmllczsKKworICAgIEdQYXR0ZXJu
U3BlYyogcHNwZWMgPSBnX3BhdHRlcm5fc3BlY19uZXcoKGZpbHRlci51dGY4KCkpLmRhdGEoKSk7
CisgICAgd2hpbGUgKGNvbnN0IGNoYXIqIG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkgewor
ICAgICAgICBpZiAoIWdfcGF0dGVybl9tYXRjaF9zdHJpbmcocHNwZWMsIG5hbWUpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgR093blB0cjxnY2hhcj4gZW50cnkoZ19idWlsZF9m
aWxlbmFtZShmaWxlbmFtZS5kYXRhKCksIG5hbWUsIE5VTEwpKTsKKyAgICAgICAgZW50cmllcy5h
cHBlbmQoZmlsZW5hbWVUb1N0cmluZyhlbnRyeS5nZXQoKSkpOworICAgIH0KKyAgICBnX3BhdHRl
cm5fc3BlY19mcmVlKHBzcGVjKTsKKyAgICBnX2Rpcl9jbG9zZShkaXIpOworCisgICAgcmV0dXJu
IGVudHJpZXM7Cit9CisKK1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHBy
ZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgR093blB0cjxnY2hhcj4g
ZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRhKCksIGNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgR093blB0cjxn
Y2hhcj4gdGVtcFBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF90bXBfZGlyKCksIGZpbGVuYW1l
LmdldCgpLCBOVUxMKSk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2Zp
bGVfbmV3X2Zvcl9wYXRoKHRlbXBQYXRoLmdldCgpKSk7CisKKyAgICBoYW5kbGUgPSBnX2ZpbGVf
Y3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAsIDApOwor
ICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcFBhdGguZ2V0KCkpOworfQorCitQbGF0
Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUg
bW9kZSkKK3sKKyAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpOworICAgIGlmIChmc1JlcC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0
Zm9ybUZpbGVIYW5kbGU7CisKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdf
ZmlsZV9uZXdfZm9yX3BhdGgoZnNSZXAuZGF0YSgpKSk7CisgICAgR0ZpbGVJT1N0cmVhbSogaW9T
dHJlYW0gPSAwOworICAgIGlmIChtb2RlID09IE9wZW5Gb3JSZWFkKQorICAgICAgICBpb1N0cmVh
bSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCAwLCAwKTsKKyAgICBlbHNlIGlm
IChtb2RlID09IE9wZW5Gb3JXcml0ZSkgeworICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZnNSZXAu
ZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklM
RV9URVNUX0lTX1JFR1VMQVIpKSkKKyAgICAgICAgICAgIGlvU3RyZWFtID0gZ19maWxlX29wZW5f
cmVhZHdyaXRlKGZpbGUuZ2V0KCksIDAsIDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
b1N0cmVhbSA9IGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdfRklMRV9DUkVB
VEVfTk9ORSwgMCwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIGlvU3RyZWFtOworfQorCit2b2lk
IGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpZiAoIWlzSGFu
ZGxlVmFsaWQoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19pb19zdHJlYW1fY2xv
c2UoR19JT19TVFJFQU0oaGFuZGxlKSwgMCwgMCk7CisgICAgZ19vYmplY3RfdW5yZWYoaGFuZGxl
KTsKKyAgICBoYW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworfQorCitsb25nIGxv
bmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwg
RmlsZVNlZWtPcmlnaW4gb3JpZ2luKQoreworICAgIEdTZWVrVHlwZSBzZWVrVHlwZSA9IEdfU0VF
S19TRVQ7CisgICAgc3dpdGNoIChvcmlnaW4pIHsKKyAgICBjYXNlIFNlZWtGcm9tQmVnaW5uaW5n
OgorICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgU2Vla0Zyb21DdXJyZW50OgorICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19DVVI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU2Vla0Zyb21FbmQ6CisgICAgICAgIHNlZWtUeXBlID0gR19T
RUVLX0VORDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYgKCFnX3NlZWthYmxlX3NlZWsoR19TRUVLQUJM
RShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpKSwgb2Zm
c2V0LCBzZWVrVHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gZ19z
ZWVrYWJsZV90ZWxsKEdfU0VFS0FCTEUoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lP
X1NUUkVBTShoYW5kbGUpKSkpOworfQorCitpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFu
ZGxlIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBnc2l6ZSBi
eXRlc1dyaXR0ZW47CisgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbChnX2lvX3N0cmVhbV9n
ZXRfb3V0cHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwgZGF0YSwgbGVuZ3RoLCAmYnl0
ZXNXcml0dGVuLCAwLCAwKTsKKyAgICByZXR1cm4gYnl0ZXNXcml0dGVuOworfQorCitpbnQgcmVh
ZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5n
dGgpCit7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGRvIHsKKyAgICAgICAgZ3Nz
aXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWQoZ19pb19zdHJlYW1fZ2V0X2lucHV0
X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwgZGF0YSwgbGVuZ3RoLCAwLCAmZXJyb3Iub3V0
UHRyKCkpOworICAgICAgICBpZiAoYnl0ZXNSZWFkID49IDApCisgICAgICAgICAgICByZXR1cm4g
Ynl0ZXNSZWFkOworICAgIH0gd2hpbGUgKGVycm9yICYmIGVycm9yLT5jb2RlID09IEdfRklMRV9F
UlJPUl9JTlRSKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRm
b3JtTW9kdWxlIG1vZHVsZSkKK3sKKyAgICByZXR1cm4gZ19tb2R1bGVfY2xvc2UobW9kdWxlKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uaXgvTUlNRVR5cGVSZWdpc3RyeU5peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uaXgvTUlNRVR5cGVSZWdpc3RyeU5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGE5ZjU0YTFi
MjVkOTkwNWZmYjBlZmRlYWVmODQwYWRlNGQ3ZWIwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25peC9NSU1FVHlwZVJlZ2lzdHJ5Tml4LmNwcApAQCAtMCwwICsx
LDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBFeHRlbnNpb25NYXAgeworICAgIGNvbnN0IGNoYXIq
IGV4dGVuc2lvbjsKKyAgICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKK307CisKK3N0YXRpYyBjb25z
dCBFeHRlbnNpb25NYXAgZXh0ZW5zaW9uTWFwW10gPSB7CisgICAgeyAiYm1wIiwgImltYWdlL2Jt
cCIgfSwKKyAgICB7ICJjc3MiLCAidGV4dC9jc3MiIH0sCisgICAgeyAiZ2lmIiwgImltYWdlL2dp
ZiIgfSwKKyAgICB7ICJodG1sIiwgInRleHQvaHRtbCIgfSwKKyAgICB7ICJodG0iLCAidGV4dC9o
dG1sIiB9LAorICAgIHsgImljbyIsICJpbWFnZS94LWljb24iIH0sCisgICAgeyAianBlZyIsICJp
bWFnZS9qcGVnIiB9LAorICAgIHsgImpwZyIsICJpbWFnZS9qcGVnIiB9LAorICAgIHsgImpzIiwg
ImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIgfSwKKyAgICB7ICJtbmciLCAidmlkZW8veC1tbmci
IH0sCisgICAgeyAicGJtIiwgImltYWdlL3gtcG9ydGFibGUtYml0bWFwIiB9LAorICAgIHsgInBn
bSIsICJpbWFnZS94LXBvcnRhYmxlLWdyYXltYXAiIH0sCisgICAgeyAicGRmIiwgImFwcGxpY2F0
aW9uL3BkZiIgfSwKKyAgICB7ICJwbmciLCAiaW1hZ2UvcG5nIiB9LAorICAgIHsgInBwbSIsICJp
bWFnZS94LXBvcnRhYmxlLXBpeG1hcCIgfSwKKyAgICB7ICJyc3MiLCAiYXBwbGljYXRpb24vcnNz
K3htbCIgfSwKKyAgICB7ICJzdmciLCAiaW1hZ2Uvc3ZnK3htbCIgfSwKKyAgICB7ICJ0ZXh0Iiwg
InRleHQvcGxhaW4iIH0sCisgICAgeyAidGlmIiwgImltYWdlL3RpZmYiIH0sCisgICAgeyAidGlm
ZiIsICJpbWFnZS90aWZmIiB9LAorICAgIHsgInR4dCIsICJ0ZXh0L3BsYWluIiB9LAorICAgIHsg
InhibSIsICJpbWFnZS94LXhiaXRtYXAiIH0sCisgICAgeyAieG1sIiwgInRleHQveG1sIiB9LAor
ICAgIHsgInhwbSIsICJpbWFnZS94LXhwbSIgfSwKKyAgICB7ICJ4c2wiLCAidGV4dC94c2wiIH0s
CisgICAgeyAieGh0bWwiLCAiYXBwbGljYXRpb24veGh0bWwreG1sIiB9LAorICAgIHsgIndtbCIs
ICJ0ZXh0L3ZuZC53YXAud21sIiB9LAorICAgIHsgIndtbGMiLCAiYXBwbGljYXRpb24vdm5kLndh
cC53bWxjIiB9LAorICAgIHsgMCwgMCB9Cit9OworCitTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6
Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nICZleHQpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIFN0cmluZyBzID0gZXh0Lmxvd2VyKCk7CisgICAgY29u
c3QgRXh0ZW5zaW9uTWFwICplID0gZXh0ZW5zaW9uTWFwOworICAgIHdoaWxlIChlLT5leHRlbnNp
b24pIHsKKyAgICAgICAgaWYgKHMgPT0gZS0+ZXh0ZW5zaW9uKQorICAgICAgICAgICAgcmV0dXJu
IGUtPm1pbWVUeXBlOworICAgICAgICArK2U7CisgICAgfQorCisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCitib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzQXBwbGljYXRpb25QbHVnaW5NSU1FVHlw
ZShjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvU2hh
cmVkVGltZXJOaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L1NoYXJlZFRpbWVy
Tml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mMzgxMTIwZTgyYzA3ZDg1NmExYjYwOWMyZGY3NDk3ZDY3OGYy
MDM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L1NoYXJl
ZFRpbWVyTml4LmNwcApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTaGFyZWRUaW1lci5oIgorCisjZGVmaW5lIEdES19QUklPUklUWV9SRURSQVcgKEdf
UFJJT1JJVFlfSElHSF9JRExFICsgMjApCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGd1aW50IHNoYXJlZFRpbWVyOworc3RhdGljIHZvaWQgKCpz
aGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pKCk7CisKK3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1
bmN0aW9uKHZvaWQgKCpmKSgpKQoreworICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbiA9IGY7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB0aW1lb3V0Q2FsbGJhY2soZ3BvaW50ZXIpCit7CisgICAg
aWYgKHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbikKKyAgICAgICAgc2hhcmVkVGltZXJGaXJlZEZ1
bmN0aW9uKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIHNldFNoYXJlZFRpbWVyRmly
ZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3sKKyAgICBBU1NFUlQoc2hhcmVkVGltZXJGaXJl
ZEZ1bmN0aW9uKTsKKworICAgIGd1aW50IGludGVydmFsSW5NUyA9IHN0YXRpY19jYXN0PGd1aW50
PihpbnRlcnZhbCAqIDEwMDApOworCisgICAgc3RvcFNoYXJlZFRpbWVyKCk7CisgICAgc2hhcmVk
VGltZXIgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX1JFRFJBVywgaW50ZXJ2YWxJ
bk1TLCB0aW1lb3V0Q2FsbGJhY2ssIDAsIDApOworfQorCit2b2lkIHN0b3BTaGFyZWRUaW1lcigp
Cit7CisgICAgaWYgKCFzaGFyZWRUaW1lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2Jvb2xl
YW4gcmVtb3ZlZFNvdXJjZSA9IGdfc291cmNlX3JlbW92ZShzaGFyZWRUaW1lcik7CisgICAgQVNT
RVJUX1VOVVNFRChyZW1vdmVkU291cmNlLCByZW1vdmVkU291cmNlKTsKKyAgICBzaGFyZWRUaW1l
ciA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbml4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uaXgvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZWU3
YjZlMmYwZTk1YzA0MTJlMjM0NGVmZDA4YTJlMzM5NWU0NGFiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKQEAgLTAs
MCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNTTEtleUdl
bmVyYXRvci5oIgorI2luY2x1ZGUgIlVSTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgZ2V0U3VwcG9ydGVkS2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK1N0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmco
dW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYpCit7CisgICAgcmV0dXJuIFN0cmlu
ZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218226</attachid>
            <date>2013-12-02 15:27:59 -0800</date>
            <delta_ts>2013-12-02 15:29:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124987-20131202202757.patch</filename>
            <type>text/plain</type>
            <size>31271</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5OTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODVlOTkyZDQyMzQwMzIw
YWExMDhlZDM1YTk3ODA3NzM5ZDU3YTM0Yy4uZGNkMDY1YzJlNzYyODc0MzExM2YxNjgyY2UzYzc0
NWVlYmI1YzllYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTEyLTAyICBUaGlh
Z28gZGUgQmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIE5peCBVcHN0cmVhbTogQWRkaW5nIG1pc3Npbmcgbml4IG5ldyBmaWxlcyB0byBXZWJD
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ5
ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgbmVlZGVkLgorCisgICAgICAgICogUGxhdGZvcm1OaXguY21ha2U6CisgICAgICAg
ICogcGxhdGZvcm0vbml4L0Vycm9yc05peC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L25peC9FcnJvcnNOaXguaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbml4L0ZpbGVTeXN0
ZW1OaXguY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uaXgvTUlNRVR5cGVSZWdpc3Ry
eU5peC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25peC9TaGFyZWRUaW1lck5peC5j
cHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25peC9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
OiBBZGRlZC4KKwogMjAxMy0xMi0wMiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRkIG1vcmUgQ2FjaGVkUGFnZSBudWxsIGNoZWNrcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1OaXguY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU5peC5jbWFrZQppbmRleCBkMTk1OTExMmM1NDRhMWI1MDFkODUzMzVlZDg4MmQ5N2YzN2U3ZDZm
Li42OTk5NzgwNWU2MGUwMzU1MDgxNzUxZDg4OTA1YmI3ZTllNzRhNTBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU5peC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU5peC5jbWFrZQpAQCAtMTE2LDE2ICsxMTYsMjEgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcGxhdGZvcm0vbml4L0N1cnNvck5peC5jcHAKICAgICBwbGF0Zm9ybS9uaXgv
RHJhZ0RhdGFOaXguY3BwCiAgICAgcGxhdGZvcm0vbml4L0RyYWdJbWFnZU5peC5jcHAKKyAgICBw
bGF0Zm9ybS9uaXgvRXJyb3JzTml4LmNwcAorICAgIHBsYXRmb3JtL25peC9GaWxlU3lzdGVtTml4
LmNwcAogICAgIHBsYXRmb3JtL25peC9HYW1lcGFkc05peC5jcHAKICAgICBwbGF0Zm9ybS9uaXgv
TGFuZ3VhZ2VOaXguY3BwCiAgICAgcGxhdGZvcm0vbml4L0xvY2FsaXplZFN0cmluZ3NOaXguY3Bw
CisgICAgcGxhdGZvcm0vbml4L01JTUVUeXBlUmVnaXN0cnlOaXguY3BwCiAgICAgcGxhdGZvcm0v
bml4L05peEtleWJvYXJkVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL25peC9QYXN0ZWJvYXJk
Tml4LmNwcAogICAgIHBsYXRmb3JtL25peC9QbGF0Zm9ybUtleWJvYXJkRXZlbnROaXguY3BwCiAg
ICAgcGxhdGZvcm0vbml4L1BsYXRmb3JtU2NyZWVuTml4LmNwcAogICAgIHBsYXRmb3JtL25peC9S
ZW5kZXJUaGVtZU5peC5jcHAKICAgICBwbGF0Zm9ybS9uaXgvU2Nyb2xsYmFyVGhlbWVOaXguY3Bw
CisgICAgcGxhdGZvcm0vbml4L1NoYXJlZFRpbWVyTml4LmNwcAogICAgIHBsYXRmb3JtL25peC9T
b3VuZE5peC5jcHAKKyAgICBwbGF0Zm9ybS9uaXgvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAogICAg
IHBsYXRmb3JtL25peC9XaWRnZXROaXguY3BwCiAKICAgICBwbGF0Zm9ybS9uaXgvc3VwcG9ydC9N
dWx0aUNoYW5uZWxQQ01EYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbml4L0Vycm9yc05peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvRXJyb3Jz
Tml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40OTI5YmU0Y2VkOTk0MGM3YmNiNWU0NTE4MjcwMTkyZjRiZjJi
MDdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L0Vycm9y
c05peC5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXJyb3JzTml4LmgiCisK
KyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiUHJpbnRDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitSZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJv
ckRvbWFpbk5ldHdvcmssIE5ldHdvcmtFcnJvckNhbmNlbGxlZCwgcmVxdWVzdC51cmwoKS5zdHJp
bmcoKSwgQVNDSUlMaXRlcmFsKCJMb2FkIHJlcXVlc3QgY2FuY2VsbGVkIikpOworfQorCitSZXNv
dXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7
CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Qb2xpY3ksIFBvbGljeUVycm9y
Q2Fubm90VXNlUmVzdHJpY3RlZFBvcnQsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIEFTQ0lJTGl0
ZXJhbCgiTm90IGFsbG93ZWQgdG8gdXNlIHJlc3RyaWN0ZWQgbmV0d29yayBwb3J0IikpOworfQor
CitSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Qb2xpY3ks
IFBvbGljeUVycm9yQ2Fubm90U2hvd1VSTCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgQVNDSUlM
aXRlcmFsKCJVUkwgY2Fubm90IGJlIHNob3duIikpOworfQorCitSZXNvdXJjZUVycm9yIGludGVy
cnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lF
cnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xpY3lDaGFuZ2UsIHJlcXVlc3QudXJsKCkuc3Ry
aW5nKCksIEFTQ0lJTGl0ZXJhbCgiRnJhbWUgbG9hZCB3YXMgaW50ZXJydXB0ZWQiKSk7Cit9CisK
K1Jlc291cmNlRXJyb3IgY2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Q
b2xpY3ksIFBvbGljeUVycm9yQ2Fubm90U2hvd01pbWVUeXBlLCByZXNwb25zZS51cmwoKS5zdHJp
bmcoKSwgQVNDSUlMaXRlcmFsKCJDb250ZW50IHdpdGggdGhlIHNwZWNpZmllZCBNSU1FIHR5cGUg
Y2Fubm90IGJlIHNob3duIikpOworfQorCitSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RF
cnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVz
b3VyY2VFcnJvcihlcnJvckRvbWFpbk5ldHdvcmssIE5ldHdvcmtFcnJvckZpbGVEb2VzTm90RXhp
c3QsIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBBU0NJSUxpdGVyYWwoIkZpbGUgZG9lcyBub3Qg
ZXhpc3QiKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VF
cnJvcihlcnJvckRvbWFpblBsdWdpbiwgUGx1Z2luRXJyb3JXaWxsSGFuZGxlTG9hZCwgcmVzcG9u
c2UudXJsKCkuc3RyaW5nKCksIEFTQ0lJTGl0ZXJhbCgiUGx1Z2luIHdpbGwgaGFuZGxlIGxvYWQi
KSk7Cit9CisKK1Jlc291cmNlRXJyb3IgZG93bmxvYWROZXR3b3JrRXJyb3IoY29uc3QgUmVzb3Vy
Y2VFcnJvciYgbmV0d29ya0Vycm9yKQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9y
RG9tYWluRG93bmxvYWQsIERvd25sb2FkRXJyb3JOZXR3b3JrLCBuZXR3b3JrRXJyb3IuZmFpbGlu
Z1VSTCgpLCBuZXR3b3JrRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSk7Cit9CisKK1Jlc291
cmNlRXJyb3IgZG93bmxvYWRDYW5jZWxsZWRCeVVzZXJFcnJvcihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRv
d25sb2FkLCBEb3dubG9hZEVycm9yQ2FuY2VsbGVkQnlVc2VyLCByZXNwb25zZS51cmwoKS5zdHJp
bmcoKSwgQVNDSUlMaXRlcmFsKCJVc2VyIGNhbmNlbGxlZCB0aGUgZG93bmxvYWQiKSk7Cit9CisK
K1Jlc291cmNlRXJyb3IgZG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1
cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVycm9yRGVzdGlu
YXRpb24sIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBlcnJvck1lc3NhZ2UpOworfQorCitSZXNv
dXJjZUVycm9yIHByaW50RXJyb3IoY29uc3QgUHJpbnRDb250ZXh0KiBwcmludENvbnRleHQsIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVu
dExvYWRlciA9IHByaW50Q29udGV4dC0+ZnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIo
KTsKKworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUHJpbnQsIFByaW50RXJy
b3JHZW5lcmFsLCBkb2N1bWVudExvYWRlciA/IGRvY3VtZW50TG9hZGVyLT51cmwoKSA6IFVSTCgp
LCBlcnJvck1lc3NhZ2UpOworfQorCitSZXNvdXJjZUVycm9yIHByaW50ZXJOb3RGb3VuZEVycm9y
KGNvbnN0IFByaW50Q29udGV4dCogcHJpbnRDb250ZXh0KQoreworICAgIERvY3VtZW50TG9hZGVy
KiBkb2N1bWVudExvYWRlciA9IHByaW50Q29udGV4dC0+ZnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1l
bnRMb2FkZXIoKTsKKworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUHJpbnQs
IFByaW50RXJyb3JQcmludGVyTm90Rm91bmQsIGRvY3VtZW50TG9hZGVyID8gZG9jdW1lbnRMb2Fk
ZXItPnVybCgpIDogVVJMKCksIEFTQ0lJTGl0ZXJhbCgiUHJpbnRlciBub3QgZm91bmQiKSk7Cit9
CisKK1Jlc291cmNlRXJyb3IgaW52YWxpZFBhZ2VSYW5nZVRvUHJpbnQoY29uc3QgUHJpbnRDb250
ZXh0KiBwcmludENvbnRleHQpCit7CisgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVy
ID0gcHJpbnRDb250ZXh0LT5mcmFtZSgpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOworCisg
ICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QcmludCwgUHJpbnRFcnJvckludmFs
aWRQYWdlUmFuZ2UsIGRvY3VtZW50TG9hZGVyID8gZG9jdW1lbnRMb2FkZXItPnVybCgpIDogVVJM
KCksIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBwYWdlIHJhbmdlIikpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9F
cnJvcnNOaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9FcnJvcnNOaXguaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jNzFiMGVjOTM5MzEzYzFiYmJkYTIyZWRhODIwYzZlOWM5ZDAwM2NiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L0Vycm9yc05peC5oCkBAIC0w
LDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBFcnJvcnNOaXhfaAorI2RlZmluZSBFcnJvcnNOaXhfaAorCisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUHJpbnRDb250
ZXh0OworY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNz
IFJlc291cmNlUmVzcG9uc2U7CisKK3N0YXRpYyBjb25zdCBjaGFyIGVycm9yRG9tYWluTmV0d29y
a1tdID0gIldlYktpdE5ldHdvcmtFcnJvciI7CitzdGF0aWMgY29uc3QgY2hhciBlcnJvckRvbWFp
blBvbGljeVtdID0gIldlYktpdFBvbGljeUVycm9yIjsKK3N0YXRpYyBjb25zdCBjaGFyIGVycm9y
RG9tYWluUGx1Z2luW10gPSAiV2ViS2l0UGx1Z2luRXJyb3IiOworc3RhdGljIGNvbnN0IGNoYXIg
ZXJyb3JEb21haW5Eb3dubG9hZFtdID0gIldlYktpdERvd25sb2FkRXJyb3IiOworc3RhdGljIGNv
bnN0IGNoYXIgZXJyb3JEb21haW5QcmludFtdID0gIldlYktpdFByaW50RXJyb3IiOworCitlbnVt
IE5ldHdvcmtFcnJvciB7CisgICAgTmV0d29ya0Vycm9yRmFpbGVkID0gMzk5LAorICAgIE5ldHdv
cmtFcnJvclRyYW5zcG9ydCA9IDMwMCwKKyAgICBOZXR3b3JrRXJyb3JVbmtub3duUHJvdG9jb2wg
PSAzMDEsCisgICAgTmV0d29ya0Vycm9yQ2FuY2VsbGVkID0gMzAyLAorICAgIE5ldHdvcmtFcnJv
ckZpbGVEb2VzTm90RXhpc3QgPSAzMDMKK307CisKKy8vIFN5bmMnZCB3aXRoIE1hYydzIFdlYktp
dCBFcnJvcnMgYXQ6CisvLyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktpdEVycm9yc1tQcml2
YXRlXS5oCitlbnVtIFBvbGljeUVycm9yIHsKKyAgICBQb2xpY3lFcnJvckZhaWxlZCA9IDE5OSwK
KyAgICBQb2xpY3lFcnJvckNhbm5vdFNob3dNaW1lVHlwZSA9IDEwMCwKKyAgICBQb2xpY3lFcnJv
ckNhbm5vdFNob3dVUkwgPSAxMDEsCisgICAgUG9saWN5RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRl
ZEJ5UG9saWN5Q2hhbmdlID0gMTAyLAorICAgIFBvbGljeUVycm9yQ2Fubm90VXNlUmVzdHJpY3Rl
ZFBvcnQgPSAxMDMKK307CisKK2VudW0gUGx1Z2luRXJyb3IgeworICAgIFBsdWdpbkVycm9yRmFp
bGVkID0gMjk5LAorICAgIFBsdWdpbkVycm9yQ2Fubm90RmluZFBsdWdpbiA9IDIwMCwKKyAgICBQ
bHVnaW5FcnJvckNhbm5vdExvYWRQbHVnaW4gPSAyMDEsCisgICAgUGx1Z2luRXJyb3JKYXZhVW5h
dmFpbGFibGUgPSAyMDIsCisgICAgUGx1Z2luRXJyb3JDb25uZWN0aW9uQ2FuY2VsbGVkID0gMjAz
LAorICAgIFBsdWdpbkVycm9yV2lsbEhhbmRsZUxvYWQgPSAyMDQKK307CisKK2VudW0gRG93bmxv
YWRFcnJvciB7CisgICAgRG93bmxvYWRFcnJvck5ldHdvcmsgPSA0OTksCisgICAgRG93bmxvYWRF
cnJvckNhbmNlbGxlZEJ5VXNlciA9IDQwMCwKKyAgICBEb3dubG9hZEVycm9yRGVzdGluYXRpb24g
PSA0MDEKK307CisKK2VudW0gUHJpbnRFcnJvciB7CisgICAgUHJpbnRFcnJvckdlbmVyYWwgPSA1
OTksCisgICAgUHJpbnRFcnJvclByaW50ZXJOb3RGb3VuZCA9IDUwMCwKKyAgICBQcmludEVycm9y
SW52YWxpZFBhZ2VSYW5nZSA9IDUwMQorfTsKKworUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJv
cihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKK1Jlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CitSZXNvdXJjZUVycm9yIGludGVycnVwdGVkRm9yUG9s
aWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CitSZXNvdXJjZUVycm9yIGNh
bm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKK1Jlc291cmNl
RXJyb3IgZmlsZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKK1Jl
c291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CitSZXNvdXJjZUVycm9yIGRvd25sb2FkTmV0d29ya0Vycm9yKGNvbnN0IFJlc291cmNl
RXJyb3ImKTsKK1Jlc291cmNlRXJyb3IgZG93bmxvYWRDYW5jZWxsZWRCeVVzZXJFcnJvcihjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CitSZXNvdXJjZUVycm9yIGRvd25sb2FkRGVzdGluYXRpb25F
cnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
OworUmVzb3VyY2VFcnJvciBwcmludEVycm9yKGNvbnN0IFByaW50Q29udGV4dCosIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlKTsKK1Jlc291cmNlRXJyb3IgcHJpbnRlck5vdEZvdW5kRXJyb3Io
Y29uc3QgUHJpbnRDb250ZXh0Kik7CitSZXNvdXJjZUVycm9yIGludmFsaWRQYWdlUmFuZ2VUb1By
aW50KGNvbnN0IFByaW50Q29udGV4dCopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFcnJvcnNOaXhfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uaXgvRmlsZVN5c3RlbU5peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvRmls
ZVN5c3RlbU5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjhhOTM0OTk5ZjBhMGYxZWJkMDg0NjZkNDA4YWIz
MjRmNGJhYTUwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25p
eC9GaWxlU3lzdGVtTml4LmNwcApAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSwgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsZVN5
c3RlbS5oIgorCisjaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCisjaW5jbHVkZSAiVVVJRC5oIgor
I2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9n
c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dsaWJVdGlsaXRpZXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gT24gbGludXggZmlsZSBuYW1l
cyBhcmUganVzdCByYXcgYnl0ZXMsIHNvIGFsc28gc3RyaW5ncyB0aGF0IGNhbm5vdCBiZSBlbmNv
ZGVkIGluIGFueSB3YXkKKy8vIGFyZSB2YWxpZCBmaWxlIG5hbWVzLiBUaGlzIG1lYW4gdGhhdCB3
ZSBjYW5ub3QganVzdCBzdG9yZSBhIGZpbGUgbmFtZSBhcy1pcyBpbiBhIFN0cmluZworLy8gYnV0
IHdlIGhhdmUgdG8gZXNjYXBlIGl0LgorLy8gT24gV2luZG93cyB0aGUgR0xpYiBmaWxlIG5hbWUg
ZW5jb2RpbmcgaXMgYWx3YXlzIFVURi04IHNvIHdlIGNhbiBvcHRpbWl6ZSB0aGlzIGNhc2UuCitT
dHJpbmcgZmlsZW5hbWVUb1N0cmluZyhjb25zdCBjaGFyKiBmaWxlbmFtZSkKK3sKKyAgICBpZiAo
IWZpbGVuYW1lKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBHT3duUHRyPGdjaGFy
PiBlc2NhcGVkU3RyaW5nKGdfdXJpX2VzY2FwZV9zdHJpbmcoZmlsZW5hbWUsICIvOiIsIGZhbHNl
KSk7CisgICAgcmV0dXJuIGVzY2FwZWRTdHJpbmcuZ2V0KCk7Cit9CisKK0NTdHJpbmcgZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBHT3duUHRyPGdj
aGFyPiBmaWxlbmFtZShnX3VyaV91bmVzY2FwZV9zdHJpbmcocGF0aC51dGY4KCkuZGF0YSgpLCAw
KSk7CisgICAgcmV0dXJuIGZpbGVuYW1lLmdldCgpOworfQorCisvLyBDb252ZXJ0cyBhIHN0cmlu
ZyB0byBzb21ldGhpbmcgc3VpdGFibGUgdG8gYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLgorU3Ry
aW5nIGZpbGVuYW1lRm9yRGlzcGxheShjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBDU3Ry
aW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHN0cmluZyk7CisgICAgR093
blB0cjxnY2hhcj4gZGlzcGxheShnX2ZpbGVuYW1lX3RvX3V0ZjgoZmlsZW5hbWUuZGF0YSgpLCAw
LCAwLCAwLCAwKSk7CisgICAgaWYgKCFkaXNwbGF5KQorICAgICAgICByZXR1cm4gc3RyaW5nOwor
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZGlzcGxheS5nZXQoKSk7Cit9CisKK2Jvb2wg
ZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxz
ZTsKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
OworCisgICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmVzdWx0ID0gZ19maWxl
X3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBHX0ZJTEVfVEVTVF9FWElTVFMpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCk7CisKKyAgICBpZiAoIWZpbGVuYW1lLmlzTnVsbCgpKQorICAg
ICAgICByZXN1bHQgPSAhZ19yZW1vdmUoZmlsZW5hbWUuZGF0YSgpKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2Jvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRo
KQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlmICghZmlsZW5hbWUuaXNOdWxs
KCkpCisgICAgICAgIHJlc3VsdCA9ICFnX3JtZGlyKGZpbGVuYW1lLmRhdGEoKSk7CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwg
bG9uZyBsb25nJiByZXN1bHRTaXplKQoreworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHU3RhdEJ1ZiBzdGF0UmVzdWx0OworICAgIGdpbnQg
cmVzdWx0ID0gZ19zdGF0KGZpbGVuYW1lLmRhdGEoKSwgJnN0YXRSZXN1bHQpOworICAgIGlmIChy
ZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdFNpemUgPSBzdGF0UmVz
dWx0LnN0X3NpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZ2V0RmlsZU1vZGlmaWNh
dGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoLCB0aW1lX3QmIG1vZGlmaWVkVGltZSkKK3sKKyAg
ICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAg
IGlmIChmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1N0
YXRCdWYgc3RhdFJlc3VsdDsKKyAgICBnaW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZS5kYXRh
KCksICZzdGF0UmVzdWx0KTsKKyAgICBpZiAocmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtb2RpZmllZFRpbWUgPSBzdGF0UmVzdWx0LnN0X210aW1lOworICAgIHJldHVybiB0
cnVlOworCit9CisKK2Jvb2wgZ2V0RmlsZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgRmls
ZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3sKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlmIChmaWxlbmFtZS5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RydWN0IHN0YXQgc3RhdFJlc3VsdDsKKyAgICBnaW50
IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZS5kYXRhKCksICZzdGF0UmVzdWx0KTsKKyAgICBpZiAo
cmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtZXRhZGF0YS5tb2RpZmljYXRp
b25UaW1lID0gc3RhdFJlc3VsdC5zdF9tdGltZTsKKyAgICBtZXRhZGF0YS5sZW5ndGggPSBzdGF0
UmVzdWx0LnN0X3NpemU7CisgICAgbWV0YWRhdGEudHlwZSA9IFNfSVNESVIoc3RhdFJlc3VsdC5z
dF9tb2RlKSA/IEZpbGVNZXRhZGF0YTo6VHlwZURpcmVjdG9yeSA6IEZpbGVNZXRhZGF0YTo6VHlw
ZUZpbGU7CisgICAgcmV0dXJuIHRydWU7CisKK30KKworU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQorewor
ICAgIGlmIChwYXRoLmVuZHNXaXRoKEdfRElSX1NFUEFSQVRPUl9TKSkKKyAgICAgICAgcmV0dXJu
IHBhdGggKyBjb21wb25lbnQ7CisgICAgcmV0dXJuIHBhdGggKyBHX0RJUl9TRVBBUkFUT1JfUyAr
IGNvbXBvbmVudDsKK30KKworYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBw
YXRoKQoreworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCk7CisgICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBnaW50IHJlc3VsdCA9IGdfbWtkaXJfd2l0aF9wYXJlbnRzKGZpbGVuYW1lLmRhdGEo
KSwgU19JUldYVSk7CisKKyAgICByZXR1cm4gIXJlc3VsdDsKK30KKworU3RyaW5nIGhvbWVEaXJl
Y3RvcnlQYXRoKCkKK3sKKyAgICByZXR1cm4gZmlsZW5hbWVUb1N0cmluZyhnX2dldF9ob21lX2Rp
cigpKTsKK30KKworU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGhOYW1l
KQoreworICAgIGlmIChwYXRoTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBwYXRoTmFt
ZTsKKworICAgIENTdHJpbmcgdG1wRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aE5hbWUpOworICAgIEdPd25QdHI8Z2NoYXI+IGJhc2VOYW1lKGdfcGF0aF9nZXRfYmFzZW5h
bWUodG1wRmlsZW5hbWUuZGF0YSgpKSk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoYmFz
ZU5hbWUuZ2V0KCkpOworfQorCitDU3RyaW5nIGFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCgpCit7
CisgICAgQ1N0cmluZyBwYXRoID0gZ2V0Q3VycmVudEV4ZWN1dGFibGVQYXRoKCk7CisgICAgaWYg
KCFwYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gcGF0aDsKKworICAgIC8vIElmIHRoZSBh
Ym92ZSBmYWlscywgY2hlY2sgdGhlIFBBVEggZW52IHZhcmlhYmxlLgorICAgIEdPd25QdHI8Y2hh
cj4gY3VycmVudEV4ZVBhdGgoZ19maW5kX3Byb2dyYW1faW5fcGF0aChnX2dldF9wcmduYW1lKCkp
KTsKKyAgICBpZiAoIWN1cnJlbnRFeGVQYXRoLmdldCgpKQorICAgICAgICByZXR1cm4gQ1N0cmlu
ZygpOworCisgICAgR093blB0cjxjaGFyPiBkaXJuYW1lKGdfcGF0aF9nZXRfZGlybmFtZShjdXJy
ZW50RXhlUGF0aC5nZXQoKSkpOworICAgIHJldHVybiBkaXJuYW1lLmdldCgpOworfQorCitDU3Ry
aW5nIHNoYXJlZFJlc291cmNlc1BhdGgoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ1N0
cmluZywgY2FjaGVkUGF0aCwgKCkpOworICAgIGlmICghY2FjaGVkUGF0aC5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIGNhY2hlZFBhdGg7CisKKyAgICBHT3duUHRyPGdjaGFyPiBkYXRhUGF0aChn
X2J1aWxkX2ZpbGVuYW1lKERBVEFfRElSLCAid2Via2l0bml4IiwgTlVMTCkpOworCisgICAgY2Fj
aGVkUGF0aCA9IGRhdGFQYXRoLmdldCgpOworICAgIHJldHVybiBjYWNoZWRQYXRoOworfQorCit1
aW50NjRfdCBnZXRWb2x1bWVGcmVlU2l6ZUZvclBhdGgoY29uc3QgY2hhciogcGF0aCkKK3sKKyAg
ICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0
aCkpOworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVf
cXVlcnlfZmlsZXN5c3RlbV9pbmZvKGZpbGUuZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfRklMRVNZ
U1RFTV9GUkVFLCAwLCAwKSk7CisgICAgaWYgKCFmaWxlSW5mbykKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gZ19maWxlX2luZm9fZ2V0X2F0dHJpYnV0ZV91aW50NjQoZmlsZUluZm8u
Z2V0KCksIEdfRklMRV9BVFRSSUJVVEVfRklMRVNZU1RFTV9GUkVFKTsKK30KKworU3RyaW5nIGRp
cmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIEdPd25QdHI8Y2hhcj4gZGly
bmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRh
dGEoKSkpOworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRpcm5hbWUuZ2V0KCkpOworfQor
CitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiBmaWx0ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZW50cmllczsKKworICAgIENT
dHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgR0Rp
ciogZGlyID0gZ19kaXJfb3BlbihmaWxlbmFtZS5kYXRhKCksIDAsIDApOworICAgIGlmICghZGly
KQorICAgICAgICByZXR1cm4gZW50cmllczsKKworICAgIEdQYXR0ZXJuU3BlYyogcHNwZWMgPSBn
X3BhdHRlcm5fc3BlY19uZXcoKGZpbHRlci51dGY4KCkpLmRhdGEoKSk7CisgICAgd2hpbGUgKGNv
bnN0IGNoYXIqIG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkgeworICAgICAgICBpZiAoIWdf
cGF0dGVybl9tYXRjaF9zdHJpbmcocHNwZWMsIG5hbWUpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgR093blB0cjxnY2hhcj4gZW50cnkoZ19idWlsZF9maWxlbmFtZShmaWxlbmFt
ZS5kYXRhKCksIG5hbWUsIE5VTEwpKTsKKyAgICAgICAgZW50cmllcy5hcHBlbmQoZmlsZW5hbWVU
b1N0cmluZyhlbnRyeS5nZXQoKSkpOworICAgIH0KKyAgICBnX3BhdHRlcm5fc3BlY19mcmVlKHBz
cGVjKTsKKyAgICBnX2Rpcl9jbG9zZShkaXIpOworCisgICAgcmV0dXJuIGVudHJpZXM7Cit9CisK
K1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1G
aWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ19zdHJk
dXBfcHJpbnRmKCIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRhKCksIGNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgR093blB0cjxnY2hhcj4gdGVtcFBhdGgo
Z19idWlsZF9maWxlbmFtZShnX2dldF90bXBfZGlyKCksIGZpbGVuYW1lLmdldCgpLCBOVUxMKSk7
CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRo
KHRlbXBQYXRoLmdldCgpKSk7CisKKyAgICBoYW5kbGUgPSBnX2ZpbGVfY3JlYXRlX3JlYWR3cml0
ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAsIDApOworICAgIGlmICghaXNIYW5k
bGVWYWxpZChoYW5kbGUpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgodGVtcFBhdGguZ2V0KCkpOworfQorCitQbGF0Zm9ybUZpbGVIYW5kbGUg
b3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKK3sKKyAgICBD
U3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlmIChm
c1JlcC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7
CisKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Bh
dGgoZnNSZXAuZGF0YSgpKSk7CisgICAgR0ZpbGVJT1N0cmVhbSogaW9TdHJlYW0gPSAwOworICAg
IGlmIChtb2RlID09IE9wZW5Gb3JSZWFkKQorICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9vcGVu
X3JlYWR3cml0ZShmaWxlLmdldCgpLCAwLCAwKTsKKyAgICBlbHNlIGlmIChtb2RlID09IE9wZW5G
b3JXcml0ZSkgeworICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZnNSZXAuZGF0YSgpLCBzdGF0aWNf
Y2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VM
QVIpKSkKKyAgICAgICAgICAgIGlvU3RyZWFtID0gZ19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUu
Z2V0KCksIDAsIDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpb1N0cmVhbSA9IGdfZmls
ZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgMCk7
CisgICAgfQorCisgICAgcmV0dXJuIGlvU3RyZWFtOworfQorCit2b2lkIGNsb3NlRmlsZShQbGF0
Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxl
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0o
aGFuZGxlKSwgMCwgMCk7CisgICAgZ19vYmplY3RfdW5yZWYoaGFuZGxlKTsKKyAgICBoYW5kbGUg
PSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworfQorCitsb25nIGxvbmcgc2Vla0ZpbGUoUGxh
dGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4g
b3JpZ2luKQoreworICAgIEdTZWVrVHlwZSBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7CisgICAgc3dp
dGNoIChvcmlnaW4pIHsKKyAgICBjYXNlIFNlZWtGcm9tQmVnaW5uaW5nOgorICAgICAgICBzZWVr
VHlwZSA9IEdfU0VFS19TRVQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Vla0Zyb21DdXJy
ZW50OgorICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19DVVI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU2Vla0Zyb21FbmQ6CisgICAgICAgIHNlZWtUeXBlID0gR19TRUVLX0VORDsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgaWYgKCFnX3NlZWthYmxlX3NlZWsoR19TRUVLQUJMRShnX2lvX3N0cmVhbV9n
ZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpKSwgb2Zmc2V0LCBzZWVrVHlwZSwg
MCwgMCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gZ19zZWVrYWJsZV90ZWxsKEdf
U0VFS0FCTEUoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUp
KSkpOworfQorCitpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBnc2l6ZSBieXRlc1dyaXR0ZW47Cisg
ICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbChnX2lvX3N0cmVhbV9nZXRfb3V0cHV0X3N0cmVh
bShHX0lPX1NUUkVBTShoYW5kbGUpKSwgZGF0YSwgbGVuZ3RoLCAmYnl0ZXNXcml0dGVuLCAwLCAw
KTsKKyAgICByZXR1cm4gYnl0ZXNXcml0dGVuOworfQorCitpbnQgcmVhZEZyb21GaWxlKFBsYXRm
b3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgR093
blB0cjxHRXJyb3I+IGVycm9yOworICAgIGRvIHsKKyAgICAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9
IGdfaW5wdXRfc3RyZWFtX3JlYWQoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NU
UkVBTShoYW5kbGUpKSwgZGF0YSwgbGVuZ3RoLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAg
ICBpZiAoYnl0ZXNSZWFkID49IDApCisgICAgICAgICAgICByZXR1cm4gYnl0ZXNSZWFkOworICAg
IH0gd2hpbGUgKGVycm9yICYmIGVycm9yLT5jb2RlID09IEdfRklMRV9FUlJPUl9JTlRSKTsKKyAg
ICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVs
ZSkKK3sKKyAgICByZXR1cm4gZ19tb2R1bGVfY2xvc2UobW9kdWxlKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgv
TUlNRVR5cGVSZWdpc3RyeU5peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvTUlN
RVR5cGVSZWdpc3RyeU5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWQzODFmZGNkNWZmYTBlZTAzNzU0YTBl
NTFiMDY5NWNjZDhhMjJiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25peC9NSU1FVHlwZVJlZ2lzdHJ5Tml4LmNwcApAQCAtMCwwICsxLDk4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJ
T04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBF
bGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0cnVjdCBFeHRlbnNpb25NYXAgeworICAgIGNvbnN0IGNoYXIqIGV4dGVuc2lvbjsKKyAg
ICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKK307CisKK3N0YXRpYyBjb25zdCBFeHRlbnNpb25NYXAg
ZXh0ZW5zaW9uTWFwW10gPSB7CisgICAgeyAiYm1wIiwgImltYWdlL2JtcCIgfSwKKyAgICB7ICJj
c3MiLCAidGV4dC9jc3MiIH0sCisgICAgeyAiZ2lmIiwgImltYWdlL2dpZiIgfSwKKyAgICB7ICJo
dG1sIiwgInRleHQvaHRtbCIgfSwKKyAgICB7ICJodG0iLCAidGV4dC9odG1sIiB9LAorICAgIHsg
ImljbyIsICJpbWFnZS94LWljb24iIH0sCisgICAgeyAianBlZyIsICJpbWFnZS9qcGVnIiB9LAor
ICAgIHsgImpwZyIsICJpbWFnZS9qcGVnIiB9LAorICAgIHsgImpzIiwgImFwcGxpY2F0aW9uL3gt
amF2YXNjcmlwdCIgfSwKKyAgICB7ICJtbmciLCAidmlkZW8veC1tbmciIH0sCisgICAgeyAicGJt
IiwgImltYWdlL3gtcG9ydGFibGUtYml0bWFwIiB9LAorICAgIHsgInBnbSIsICJpbWFnZS94LXBv
cnRhYmxlLWdyYXltYXAiIH0sCisgICAgeyAicGRmIiwgImFwcGxpY2F0aW9uL3BkZiIgfSwKKyAg
ICB7ICJwbmciLCAiaW1hZ2UvcG5nIiB9LAorICAgIHsgInBwbSIsICJpbWFnZS94LXBvcnRhYmxl
LXBpeG1hcCIgfSwKKyAgICB7ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKKyAgICB7
ICJzdmciLCAiaW1hZ2Uvc3ZnK3htbCIgfSwKKyAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0s
CisgICAgeyAidGlmIiwgImltYWdlL3RpZmYiIH0sCisgICAgeyAidGlmZiIsICJpbWFnZS90aWZm
IiB9LAorICAgIHsgInR4dCIsICJ0ZXh0L3BsYWluIiB9LAorICAgIHsgInhibSIsICJpbWFnZS94
LXhiaXRtYXAiIH0sCisgICAgeyAieG1sIiwgInRleHQveG1sIiB9LAorICAgIHsgInhwbSIsICJp
bWFnZS94LXhwbSIgfSwKKyAgICB7ICJ4c2wiLCAidGV4dC94c2wiIH0sCisgICAgeyAieGh0bWwi
LCAiYXBwbGljYXRpb24veGh0bWwreG1sIiB9LAorICAgIHsgIndtbCIsICJ0ZXh0L3ZuZC53YXAu
d21sIiB9LAorICAgIHsgIndtbGMiLCAiYXBwbGljYXRpb24vdm5kLndhcC53bWxjIiB9LAorICAg
IHsgMCwgMCB9Cit9OworCitTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JF
eHRlbnNpb24oY29uc3QgU3RyaW5nICZleHQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKworICAgIFN0cmluZyBsb3dlckNhc2VFeHQgPSBleHQubG93ZXIoKTsKKyAgICBjb25zdCBF
eHRlbnNpb25NYXAqIGV4dE1hcCA9IGV4dGVuc2lvbk1hcDsKKyAgICB3aGlsZSAoZXh0TWFwLT5l
eHRlbnNpb24pIHsKKyAgICAgICAgaWYgKGxvd2VyQ2FzZUV4dCA9PSBleHRNYXAtPmV4dGVuc2lv
bikKKyAgICAgICAgICAgIHJldHVybiBleHRNYXAtPm1pbWVUeXBlOworICAgICAgICArK2V4dE1h
cDsKKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgTUlNRVR5cGVSZWdp
c3RyeTo6aXNBcHBsaWNhdGlvblBsdWdpbk1JTUVUeXBlKGNvbnN0IFN0cmluZyYpCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9TaGFyZWRUaW1lck5peC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uaXgvU2hhcmVkVGltZXJOaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmMWMw
ZGQyZDA3N2RiMTY3YjdlMDcyNDg2MzUwNWRiZTE4NGIyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvU2hhcmVkVGltZXJOaXguY3BwCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcyku
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZFRpbWVyLmgiCisK
KyNkZWZpbmUgR0RLX1BSSU9SSVRZX1JFRFJBVyAoR19QUklPUklUWV9ISUdIX0lETEUgKyAyMCkK
KyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgZ3Vp
bnQgc2hhcmVkVGltZXI7CitzdGF0aWMgdm9pZCAoKnNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbiko
KTsKKwordm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmZpcmVkRnVuY3Rp
b24pKCkpCit7CisgICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uID0gZmlyZWRGdW5jdGlvbjsK
K30KKworc3RhdGljIGdib29sZWFuIHRpbWVvdXRDYWxsYmFjayhncG9pbnRlcikKK3sKKyAgICBp
ZiAoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKQorICAgICAgICBzaGFyZWRUaW1lckZpcmVkRnVu
Y3Rpb24oKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJl
SW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQoreworICAgIEFTU0VSVChzaGFyZWRUaW1lckZpcmVk
RnVuY3Rpb24pOworCisgICAgZ3VpbnQgaW50ZXJ2YWxJbk1TID0gc3RhdGljX2Nhc3Q8Z3VpbnQ+
KGludGVydmFsICogMTAwMCk7CisKKyAgICBzdG9wU2hhcmVkVGltZXIoKTsKKyAgICBzaGFyZWRU
aW1lciA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfUkVEUkFXLCBpbnRlcnZhbElu
TVMsIHRpbWVvdXRDYWxsYmFjaywgMCwgMCk7Cit9CisKK3ZvaWQgc3RvcFNoYXJlZFRpbWVyKCkK
K3sKKyAgICBpZiAoIXNoYXJlZFRpbWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBnYm9vbGVh
biByZW1vdmVkU291cmNlID0gZ19zb3VyY2VfcmVtb3ZlKHNoYXJlZFRpbWVyKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHJlbW92ZWRTb3VyY2UsIHJlbW92ZWRTb3VyY2UpOworICAgIHNoYXJlZFRpbWVy
ID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uaXgvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25peC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllZTdi
NmUyZjBlOTVjMDQxMmUyMzQ0ZWZkMDhhMmUzMzk1ZTQ0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU1NMS2V5R2Vu
ZXJhdG9yLmgiCisjaW5jbHVkZSAiVVJMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5nPiYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1
bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJikKK3sKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwo=
</data>
<flag name="review"
          id="241584"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="241585"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218261</attachid>
            <date>2013-12-02 20:30:10 -0800</date>
            <delta_ts>2013-12-03 06:23:08 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-124987-20131203012930.patch</filename>
            <type>text/plain</type>
            <size>31292</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5OTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ3MjIxOTFmZDI4YWI5
YjBjMmQ4M2QyZDhjNzU3OWQ4ZjQ1MGJmOS4uOWZhNGQ5Njg2MzYzY2JjMGI4YjlkY2E3OWE1MWMz
NGMyNzc0MzNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTEyLTAyICBUaGlh
Z28gZGUgQmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIE5peCBVcHN0cmVhbTogQWRkaW5nIG1pc3Npbmcgbml4IG5ldyBmaWxlcyB0byBXZWJD
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ5
ODcKKworICAgICAgICBSZXZpZXdlZCBieSBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBuZWVkZWQuCisKKyAgICAgICAgKiBQbGF0Zm9ybU5peC5jbWFrZToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uaXgvRXJyb3JzTml4LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbml4L0Vycm9yc05peC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uaXgvRmlsZVN5
c3RlbU5peC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25peC9NSU1FVHlwZVJlZ2lz
dHJ5Tml4LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbml4L1NoYXJlZFRpbWVyTml4
LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbml4L1RlbXBvcmFyeUxpbmtTdHVicy5j
cHA6IEFkZGVkLgorCiAyMDEzLTEyLTAyICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNv
bT4KIAogICAgICAgICBBdm9pZCBzZXR0aW5nIHN0eWxlIHR3aWNlIGZvciBnZW5lcmF0ZWQgaW1h
Z2UgY29udGVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTml4LmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1OaXguY21ha2UKaW5kZXggZDE5NTkxMTJjNTQ0YTFi
NTAxZDg1MzM1ZWQ4ODJkOTdmMzdlN2Q2Zi4uNjk5OTc4MDVlNjBlMDM1NTA4MTc1MWQ4ODkwNWJi
N2U5ZTc0YTUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1OaXguY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1OaXguY21ha2UKQEAgLTExNiwxNiArMTE2LDIx
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25peC9DdXJzb3JO
aXguY3BwCiAgICAgcGxhdGZvcm0vbml4L0RyYWdEYXRhTml4LmNwcAogICAgIHBsYXRmb3JtL25p
eC9EcmFnSW1hZ2VOaXguY3BwCisgICAgcGxhdGZvcm0vbml4L0Vycm9yc05peC5jcHAKKyAgICBw
bGF0Zm9ybS9uaXgvRmlsZVN5c3RlbU5peC5jcHAKICAgICBwbGF0Zm9ybS9uaXgvR2FtZXBhZHNO
aXguY3BwCiAgICAgcGxhdGZvcm0vbml4L0xhbmd1YWdlTml4LmNwcAogICAgIHBsYXRmb3JtL25p
eC9Mb2NhbGl6ZWRTdHJpbmdzTml4LmNwcAorICAgIHBsYXRmb3JtL25peC9NSU1FVHlwZVJlZ2lz
dHJ5Tml4LmNwcAogICAgIHBsYXRmb3JtL25peC9OaXhLZXlib2FyZFV0aWxpdGllcy5jcHAKICAg
ICBwbGF0Zm9ybS9uaXgvUGFzdGVib2FyZE5peC5jcHAKICAgICBwbGF0Zm9ybS9uaXgvUGxhdGZv
cm1LZXlib2FyZEV2ZW50Tml4LmNwcAogICAgIHBsYXRmb3JtL25peC9QbGF0Zm9ybVNjcmVlbk5p
eC5jcHAKICAgICBwbGF0Zm9ybS9uaXgvUmVuZGVyVGhlbWVOaXguY3BwCiAgICAgcGxhdGZvcm0v
bml4L1Njcm9sbGJhclRoZW1lTml4LmNwcAorICAgIHBsYXRmb3JtL25peC9TaGFyZWRUaW1lck5p
eC5jcHAKICAgICBwbGF0Zm9ybS9uaXgvU291bmROaXguY3BwCisgICAgcGxhdGZvcm0vbml4L1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAKICAgICBwbGF0Zm9ybS9uaXgvV2lkZ2V0Tml4LmNwcAogCiAg
ICAgcGxhdGZvcm0vbml4L3N1cHBvcnQvTXVsdGlDaGFubmVsUENNRGF0YS5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9FcnJvcnNOaXguY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbml4L0Vycm9yc05peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDkyOWJlNGNlZDk5
NDBjN2JjYjVlNDUxODI3MDE5MmY0YmYyYjA3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25peC9FcnJvcnNOaXguY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkVycm9yc05peC5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgorI2luY2x1ZGUgIlJl
c291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVzb3VyY2VFcnJv
ciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAg
cmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3b3JrLCBOZXR3b3JrRXJyb3JDYW5j
ZWxsZWQsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIEFTQ0lJTGl0ZXJhbCgiTG9hZCByZXF1ZXN0
IGNhbmNlbGxlZCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9y
RG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0LCByZXF1ZXN0
LnVybCgpLnN0cmluZygpLCBBU0NJSUxpdGVyYWwoIk5vdCBhbGxvd2VkIHRvIHVzZSByZXN0cmlj
dGVkIG5ldHdvcmsgcG9ydCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJy
b3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJj
ZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFNob3dVUkwsIHJlcXVl
c3QudXJsKCkuc3RyaW5nKCksIEFTQ0lJTGl0ZXJhbCgiVVJMIGNhbm5vdCBiZSBzaG93biIpKTsK
K30KKworUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihl
cnJvckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRlZEJ5UG9saWN5
Q2hhbmdlLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLCBBU0NJSUxpdGVyYWwoIkZyYW1lIGxvYWQg
d2FzIGludGVycnVwdGVkIikpOworfQorCitSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1FVHlw
ZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHJldHVybiBS
ZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFNob3dNaW1l
VHlwZSwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIEFTQ0lJTGl0ZXJhbCgiQ29udGVudCB3aXRo
IHRoZSBzcGVjaWZpZWQgTUlNRSB0eXBlIGNhbm5vdCBiZSBzaG93biIpKTsKK30KKworUmVzb3Vy
Y2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3b3JrLCBO
ZXR3b3JrRXJyb3JGaWxlRG9lc05vdEV4aXN0LCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgQVND
SUlMaXRlcmFsKCJGaWxlIGRvZXMgbm90IGV4aXN0IikpOworfQorCitSZXNvdXJjZUVycm9yIHBs
dWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QbHVnaW4sIFBsdWdpbkVy
cm9yV2lsbEhhbmRsZUxvYWQsIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBBU0NJSUxpdGVyYWwo
IlBsdWdpbiB3aWxsIGhhbmRsZSBsb2FkIikpOworfQorCitSZXNvdXJjZUVycm9yIGRvd25sb2Fk
TmV0d29ya0Vycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIG5ldHdvcmtFcnJvcikKK3sKKyAgICBy
ZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVycm9yTmV0
d29yaywgbmV0d29ya0Vycm9yLmZhaWxpbmdVUkwoKSwgbmV0d29ya0Vycm9yLmxvY2FsaXplZERl
c2NyaXB0aW9uKCkpOworfQorCitSZXNvdXJjZUVycm9yIGRvd25sb2FkQ2FuY2VsbGVkQnlVc2Vy
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoZXJyb3JEb21haW5Eb3dubG9hZCwgRG93bmxvYWRFcnJvckNhbmNlbGxlZEJ5
VXNlciwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIEFTQ0lJTGl0ZXJhbCgiVXNlciBjYW5jZWxs
ZWQgdGhlIGRvd25sb2FkIikpOworfQorCitSZXNvdXJjZUVycm9yIGRvd25sb2FkRGVzdGluYXRp
b25FcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Eb3du
bG9hZCwgRG93bmxvYWRFcnJvckRlc3RpbmF0aW9uLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwg
ZXJyb3JNZXNzYWdlKTsKK30KKworUmVzb3VyY2VFcnJvciBwcmludEVycm9yKGNvbnN0IFByaW50
Q29udGV4dCogcHJpbnRDb250ZXh0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAg
ICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBwcmludENvbnRleHQtPmZyYW1lKCkt
PmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7CisKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihl
cnJvckRvbWFpblByaW50LCBQcmludEVycm9yR2VuZXJhbCwgZG9jdW1lbnRMb2FkZXIgPyBkb2N1
bWVudExvYWRlci0+dXJsKCkgOiBVUkwoKSwgZXJyb3JNZXNzYWdlKTsKK30KKworUmVzb3VyY2VF
cnJvciBwcmludGVyTm90Rm91bmRFcnJvcihjb25zdCBQcmludENvbnRleHQqIHByaW50Q29udGV4
dCkKK3sKKyAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBwcmludENvbnRleHQt
PmZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7CisKKyAgICByZXR1cm4gUmVzb3Vy
Y2VFcnJvcihlcnJvckRvbWFpblByaW50LCBQcmludEVycm9yUHJpbnRlck5vdEZvdW5kLCBkb2N1
bWVudExvYWRlciA/IGRvY3VtZW50TG9hZGVyLT51cmwoKSA6IFVSTCgpLCBBU0NJSUxpdGVyYWwo
IlByaW50ZXIgbm90IGZvdW5kIikpOworfQorCitSZXNvdXJjZUVycm9yIGludmFsaWRQYWdlUmFu
Z2VUb1ByaW50KGNvbnN0IFByaW50Q29udGV4dCogcHJpbnRDb250ZXh0KQoreworICAgIERvY3Vt
ZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IHByaW50Q29udGV4dC0+ZnJhbWUoKS0+bG9hZGVy
KCkuZG9jdW1lbnRMb2FkZXIoKTsKKworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9t
YWluUHJpbnQsIFByaW50RXJyb3JJbnZhbGlkUGFnZVJhbmdlLCBkb2N1bWVudExvYWRlciA/IGRv
Y3VtZW50TG9hZGVyLT51cmwoKSA6IFVSTCgpLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgcGFnZSBy
YW5nZSIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvRXJyb3JzTml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uaXgvRXJyb3JzTml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzcxYjBlYzkzOTMxM2MxYmJiZGEyMmVk
YTgyMGM2ZTljOWQwMDNjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25peC9FcnJvcnNOaXguaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRXJyb3JzTml4X2gKKyNkZWZpbmUgRXJyb3Jz
Tml4X2gKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFByaW50Q29udGV4dDsKK2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFz
cyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworCitzdGF0aWMgY29u
c3QgY2hhciBlcnJvckRvbWFpbk5ldHdvcmtbXSA9ICJXZWJLaXROZXR3b3JrRXJyb3IiOworc3Rh
dGljIGNvbnN0IGNoYXIgZXJyb3JEb21haW5Qb2xpY3lbXSA9ICJXZWJLaXRQb2xpY3lFcnJvciI7
CitzdGF0aWMgY29uc3QgY2hhciBlcnJvckRvbWFpblBsdWdpbltdID0gIldlYktpdFBsdWdpbkVy
cm9yIjsKK3N0YXRpYyBjb25zdCBjaGFyIGVycm9yRG9tYWluRG93bmxvYWRbXSA9ICJXZWJLaXRE
b3dubG9hZEVycm9yIjsKK3N0YXRpYyBjb25zdCBjaGFyIGVycm9yRG9tYWluUHJpbnRbXSA9ICJX
ZWJLaXRQcmludEVycm9yIjsKKworZW51bSBOZXR3b3JrRXJyb3IgeworICAgIE5ldHdvcmtFcnJv
ckZhaWxlZCA9IDM5OSwKKyAgICBOZXR3b3JrRXJyb3JUcmFuc3BvcnQgPSAzMDAsCisgICAgTmV0
d29ya0Vycm9yVW5rbm93blByb3RvY29sID0gMzAxLAorICAgIE5ldHdvcmtFcnJvckNhbmNlbGxl
ZCA9IDMwMiwKKyAgICBOZXR3b3JrRXJyb3JGaWxlRG9lc05vdEV4aXN0ID0gMzAzCit9OworCisv
LyBTeW5jJ2Qgd2l0aCBNYWMncyBXZWJLaXQgRXJyb3JzIGF0OgorLy8gU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJLaXRFcnJvcnNbUHJpdmF0ZV0uaAorZW51bSBQb2xpY3lFcnJvciB7CisgICAg
UG9saWN5RXJyb3JGYWlsZWQgPSAxOTksCisgICAgUG9saWN5RXJyb3JDYW5ub3RTaG93TWltZVR5
cGUgPSAxMDAsCisgICAgUG9saWN5RXJyb3JDYW5ub3RTaG93VVJMID0gMTAxLAorICAgIFBvbGlj
eUVycm9yRnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBvbGljeUNoYW5nZSA9IDEwMiwKKyAgICBQb2xp
Y3lFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0ID0gMTAzCit9OworCitlbnVtIFBsdWdpbkVy
cm9yIHsKKyAgICBQbHVnaW5FcnJvckZhaWxlZCA9IDI5OSwKKyAgICBQbHVnaW5FcnJvckNhbm5v
dEZpbmRQbHVnaW4gPSAyMDAsCisgICAgUGx1Z2luRXJyb3JDYW5ub3RMb2FkUGx1Z2luID0gMjAx
LAorICAgIFBsdWdpbkVycm9ySmF2YVVuYXZhaWxhYmxlID0gMjAyLAorICAgIFBsdWdpbkVycm9y
Q29ubmVjdGlvbkNhbmNlbGxlZCA9IDIwMywKKyAgICBQbHVnaW5FcnJvcldpbGxIYW5kbGVMb2Fk
ID0gMjA0Cit9OworCitlbnVtIERvd25sb2FkRXJyb3IgeworICAgIERvd25sb2FkRXJyb3JOZXR3
b3JrID0gNDk5LAorICAgIERvd25sb2FkRXJyb3JDYW5jZWxsZWRCeVVzZXIgPSA0MDAsCisgICAg
RG93bmxvYWRFcnJvckRlc3RpbmF0aW9uID0gNDAxCit9OworCitlbnVtIFByaW50RXJyb3Igewor
ICAgIFByaW50RXJyb3JHZW5lcmFsID0gNTk5LAorICAgIFByaW50RXJyb3JQcmludGVyTm90Rm91
bmQgPSA1MDAsCisgICAgUHJpbnRFcnJvckludmFsaWRQYWdlUmFuZ2UgPSA1MDEKK307CisKK1Jl
c291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CitSZXNv
dXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKK1Jlc291cmNl
RXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3Vy
Y2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYpOworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7CitSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CitSZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2Fk
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworUmVzb3VyY2VFcnJvciBkb3dubG9hZE5l
dHdvcmtFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJik7CitSZXNvdXJjZUVycm9yIGRvd25sb2Fk
Q2FuY2VsbGVkQnlVc2VyRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworUmVzb3VyY2VF
cnJvciBkb3dubG9hZERlc3RpbmF0aW9uRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKK1Jlc291cmNlRXJyb3IgcHJpbnRFcnJvcihjb25z
dCBQcmludENvbnRleHQqLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CitSZXNvdXJjZUVy
cm9yIHByaW50ZXJOb3RGb3VuZEVycm9yKGNvbnN0IFByaW50Q29udGV4dCopOworUmVzb3VyY2VF
cnJvciBpbnZhbGlkUGFnZVJhbmdlVG9QcmludChjb25zdCBQcmludENvbnRleHQqKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRXJyb3JzTml4X2gKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L0ZpbGVTeXN0ZW1OaXguY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbml4L0ZpbGVTeXN0ZW1OaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkZTg4
MWE1ZTM2N2M1YzdmMzczYjM2NzFhZDg1MTcwNWUyZGZlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvRmlsZVN5c3RlbU5peC5jcHAKQEAgLTAsMCArMSwz
NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9u
cyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkZpbGVNZXRhZGF0
YS5oIgorI2luY2x1ZGUgIlVVSUQuaCIKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8
Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HbGliVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIE9uIGxpbnV4IGZpbGUgbmFtZXMgYXJlIGp1c3QgcmF3IGJ5dGVzLCBzbyBhbHNvIHN0
cmluZ3MgdGhhdCBjYW5ub3QgYmUgZW5jb2RlZCBpbiBhbnkgd2F5CisvLyBhcmUgdmFsaWQgZmls
ZSBuYW1lcy4gVGhpcyBtZWFuIHRoYXQgd2UgY2Fubm90IGp1c3Qgc3RvcmUgYSBmaWxlIG5hbWUg
YXMtaXMgaW4gYSBTdHJpbmcKKy8vIGJ1dCB3ZSBoYXZlIHRvIGVzY2FwZSBpdC4KKy8vIE9uIFdp
bmRvd3MgdGhlIEdMaWIgZmlsZSBuYW1lIGVuY29kaW5nIGlzIGFsd2F5cyBVVEYtOCBzbyB3ZSBj
YW4gb3B0aW1pemUgdGhpcyBjYXNlLgorU3RyaW5nIGZpbGVuYW1lVG9TdHJpbmcoY29uc3QgY2hh
ciogZmlsZW5hbWUpCit7CisgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworCisgICAgR093blB0cjxnY2hhcj4gZXNjYXBlZFN0cmluZyhnX3VyaV9lc2NhcGVfc3Ry
aW5nKGZpbGVuYW1lLCAiLzoiLCBmYWxzZSkpOworICAgIHJldHVybiBlc2NhcGVkU3RyaW5nLmdl
dCgpOworfQorCitDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcm
IHBhdGgpCit7CisgICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ191cmlfdW5lc2NhcGVfc3Ry
aW5nKHBhdGgudXRmOCgpLmRhdGEoKSwgMCkpOworICAgIHJldHVybiBmaWxlbmFtZS5nZXQoKTsK
K30KKworLy8gQ29udmVydHMgYSBzdHJpbmcgdG8gc29tZXRoaW5nIHN1aXRhYmxlIHRvIGJlIGRp
c3BsYXllZCB0byB0aGUgdXNlci4KK1N0cmluZyBmaWxlbmFtZUZvckRpc3BsYXkoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihzdHJpbmcpOworICAgIEdPd25QdHI8Z2NoYXI+IGRpc3BsYXkoZ19maWxlbmFtZV90
b191dGY4KGZpbGVuYW1lLmRhdGEoKSwgMCwgMCwgMCwgMCkpOworICAgIGlmICghZGlzcGxheSkK
KyAgICAgICAgcmV0dXJuIHN0cmluZzsKKworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRp
c3BsYXkuZ2V0KCkpOworfQorCitib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkp
CisgICAgICAgIHJlc3VsdCA9IGdfZmlsZV90ZXN0KGZpbGVuYW1lLmRhdGEoKSwgR19GSUxFX1RF
U1RfRVhJU1RTKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgZGVsZXRlRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBDU3Ry
aW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworCisgICAgaWYg
KCFmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmVzdWx0ID0gIWdfcmVtb3ZlKGZpbGVuYW1l
LmRhdGEoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGRlbGV0ZUVtcHR5RGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOwor
ICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisK
KyAgICBpZiAoIWZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAgICByZXN1bHQgPSAhZ19ybWRpcihm
aWxlbmFtZS5kYXRhKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBnZXRGaWxl
U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKK3sKKyAgICBD
U3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlm
IChmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1N0YXRC
dWYgc3RhdFJlc3VsdDsKKyAgICBnaW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZS5kYXRhKCks
ICZzdGF0UmVzdWx0KTsKKyAgICBpZiAocmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXN1bHRTaXplID0gc3RhdFJlc3VsdC5zdF9zaXplOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgdGlt
ZV90JiBtb2RpZmllZFRpbWUpCit7CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7CisgICAgZ2ludCByZXN1
bHQgPSBnX3N0YXQoZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3VsdCk7CisgICAgaWYgKHJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbW9kaWZpZWRUaW1lID0gc3RhdFJlc3Vs
dC5zdF9tdGltZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBnZXRGaWxlTWV0YWRhdGEo
Y29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQoreworICAgIENTdHJp
bmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgaWYgKGZp
bGVuYW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdHJ1Y3Qgc3Rh
dCBzdGF0UmVzdWx0OworICAgIGdpbnQgcmVzdWx0ID0gZ19zdGF0KGZpbGVuYW1lLmRhdGEoKSwg
JnN0YXRSZXN1bHQpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUgPSBzdGF0UmVzdWx0LnN0X210aW1lOworICAg
IG1ldGFkYXRhLmxlbmd0aCA9IHN0YXRSZXN1bHQuc3Rfc2l6ZTsKKyAgICBtZXRhZGF0YS50eXBl
ID0gU19JU0RJUihzdGF0UmVzdWx0LnN0X21vZGUpID8gRmlsZU1ldGFkYXRhOjpUeXBlRGlyZWN0
b3J5IDogRmlsZU1ldGFkYXRhOjpUeXBlRmlsZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3Ry
aW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgY29tcG9uZW50KQoreworICAgIGlmIChwYXRoLmVuZHNXaXRoKEdfRElSX1NFUEFSQVRP
Ul9TKSkKKyAgICAgICAgcmV0dXJuIHBhdGggKyBjb21wb25lbnQ7CisgICAgcmV0dXJuIHBhdGgg
KyBHX0RJUl9TRVBBUkFUT1JfUyArIGNvbXBvbmVudDsKK30KKworYm9vbCBtYWtlQWxsRGlyZWN0
b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBnaW50IHJlc3VsdCA9IGdfbWtkaXJfd2l0aF9w
YXJlbnRzKGZpbGVuYW1lLmRhdGEoKSwgU19JUldYVSk7CisKKyAgICByZXR1cm4gIXJlc3VsdDsK
K30KKworU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKK3sKKyAgICByZXR1cm4gZmlsZW5hbWVU
b1N0cmluZyhnX2dldF9ob21lX2RpcigpKTsKK30KKworU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShj
b25zdCBTdHJpbmcmIHBhdGhOYW1lKQoreworICAgIGlmIChwYXRoTmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBwYXRoTmFtZTsKKworICAgIENTdHJpbmcgdG1wRmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aE5hbWUpOworICAgIEdPd25QdHI8Z2NoYXI+IGJhc2VO
YW1lKGdfcGF0aF9nZXRfYmFzZW5hbWUodG1wRmlsZW5hbWUuZGF0YSgpKSk7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUuZ2V0KCkpOworfQorCitDU3RyaW5nIGFwcGxpY2F0
aW9uRGlyZWN0b3J5UGF0aCgpCit7CisgICAgQ1N0cmluZyBwYXRoID0gZ2V0Q3VycmVudEV4ZWN1
dGFibGVQYXRoKCk7CisgICAgaWYgKCFwYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gcGF0
aDsKKworICAgIC8vIElmIHRoZSBhYm92ZSBmYWlscywgY2hlY2sgdGhlIFBBVEggZW52IHZhcmlh
YmxlLgorICAgIEdPd25QdHI8Y2hhcj4gY3VycmVudEV4ZVBhdGgoZ19maW5kX3Byb2dyYW1faW5f
cGF0aChnX2dldF9wcmduYW1lKCkpKTsKKyAgICBpZiAoIWN1cnJlbnRFeGVQYXRoLmdldCgpKQor
ICAgICAgICByZXR1cm4gQ1N0cmluZygpOworCisgICAgR093blB0cjxjaGFyPiBkaXJuYW1lKGdf
cGF0aF9nZXRfZGlybmFtZShjdXJyZW50RXhlUGF0aC5nZXQoKSkpOworICAgIHJldHVybiBkaXJu
YW1lLmdldCgpOworfQorCitDU3RyaW5nIHNoYXJlZFJlc291cmNlc1BhdGgoKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQ1N0cmluZywgY2FjaGVkUGF0aCwgKCkpOworICAgIGlmICghY2Fj
aGVkUGF0aC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZFBhdGg7CisKKyAgICBHT3du
UHRyPGdjaGFyPiBkYXRhUGF0aChnX2J1aWxkX2ZpbGVuYW1lKERBVEFfRElSLCAid2Via2l0bml4
IiwgTlVMTCkpOworCisgICAgY2FjaGVkUGF0aCA9IGRhdGFQYXRoLmdldCgpOworICAgIHJldHVy
biBjYWNoZWRQYXRoOworfQorCit1aW50NjRfdCBnZXRWb2x1bWVGcmVlU2l6ZUZvclBhdGgoY29u
c3QgY2hhciogcGF0aCkKK3sKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdf
ZmlsZV9uZXdfZm9yX3BhdGgocGF0aCkpOworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5m
byA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfZmlsZXN5c3RlbV9pbmZvKGZpbGUuZ2V0KCksIEdf
RklMRV9BVFRSSUJVVEVfRklMRVNZU1RFTV9GUkVFLCAwLCAwKSk7CisgICAgaWYgKCFmaWxlSW5m
bykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZ19maWxlX2luZm9fZ2V0X2F0dHJp
YnV0ZV91aW50NjQoZmlsZUluZm8uZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfRklMRVNZU1RFTV9G
UkVFKTsKK30KKworU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQorewor
ICAgIEdPd25QdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSkpOworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KGRpcm5hbWUuZ2V0KCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgVmVjdG9yPFN0cmlu
Zz4gZW50cmllczsKKworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24ocGF0aCk7CisgICAgR0RpciogZGlyID0gZ19kaXJfb3BlbihmaWxlbmFtZS5kYXRhKCks
IDAsIDApOworICAgIGlmICghZGlyKQorICAgICAgICByZXR1cm4gZW50cmllczsKKworICAgIEdQ
YXR0ZXJuU3BlYyogcHNwZWMgPSBnX3BhdHRlcm5fc3BlY19uZXcoKGZpbHRlci51dGY4KCkpLmRh
dGEoKSk7CisgICAgd2hpbGUgKGNvbnN0IGNoYXIqIG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGly
KSkgeworICAgICAgICBpZiAoIWdfcGF0dGVybl9tYXRjaF9zdHJpbmcocHNwZWMsIG5hbWUpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgR093blB0cjxnY2hhcj4gZW50cnkoZ19i
dWlsZF9maWxlbmFtZShmaWxlbmFtZS5kYXRhKCksIG5hbWUsIE5VTEwpKTsKKyAgICAgICAgZW50
cmllcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhlbnRyeS5nZXQoKSkpOworICAgIH0KKyAgICBn
X3BhdHRlcm5fc3BlY19mcmVlKHBzcGVjKTsKKyAgICBnX2Rpcl9jbG9zZShkaXIpOworCisgICAg
cmV0dXJuIGVudHJpZXM7Cit9CisKK1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJp
bmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgR093blB0cjxn
Y2hhcj4gZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRh
KCksIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgR093
blB0cjxnY2hhcj4gdGVtcFBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF90bXBfZGlyKCksIGZp
bGVuYW1lLmdldCgpLCBOVUxMKSk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHRlbXBQYXRoLmdldCgpKSk7CisKKyAgICBoYW5kbGUgPSBn
X2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAs
IDApOworICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcFBhdGguZ2V0KCkpOworfQor
CitQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Bl
bk1vZGUgbW9kZSkKK3sKKyAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKHBhdGgpOworICAgIGlmIChmc1JlcC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGludmFs
aWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRH
UmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZnNSZXAuZGF0YSgpKSk7CisgICAgR0ZpbGVJT1N0cmVh
bSogaW9TdHJlYW0gPSAwOworICAgIGlmIChtb2RlID09IE9wZW5Gb3JSZWFkKQorICAgICAgICBp
b1N0cmVhbSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCAwLCAwKTsKKyAgICBl
bHNlIGlmIChtb2RlID09IE9wZW5Gb3JXcml0ZSkgeworICAgICAgICBpZiAoZ19maWxlX3Rlc3Qo
ZnNSZXAuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8
IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKKyAgICAgICAgICAgIGlvU3RyZWFtID0gZ19maWxl
X29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIDAsIDApOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBpb1N0cmVhbSA9IGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdfRklM
RV9DUkVBVEVfTk9ORSwgMCwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIGlvU3RyZWFtOworfQor
Cit2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpZiAo
IWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19pb19zdHJl
YW1fY2xvc2UoR19JT19TVFJFQU0oaGFuZGxlKSwgMCwgMCk7CisgICAgZ19vYmplY3RfdW5yZWYo
aGFuZGxlKTsKKyAgICBoYW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworfQorCits
b25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9m
ZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQoreworICAgIEdTZWVrVHlwZSBzZWVrVHlwZSA9
IEdfU0VFS19TRVQ7CisgICAgc3dpdGNoIChvcmlnaW4pIHsKKyAgICBjYXNlIFNlZWtGcm9tQmVn
aW5uaW5nOgorICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU2Vla0Zyb21DdXJyZW50OgorICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19DVVI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Vla0Zyb21FbmQ6CisgICAgICAgIHNlZWtUeXBl
ID0gR19TRUVLX0VORDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYgKCFnX3NlZWthYmxlX3NlZWsoR19T
RUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkp
KSwgb2Zmc2V0LCBzZWVrVHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1
cm4gZ19zZWVrYWJsZV90ZWxsKEdfU0VFS0FCTEUoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVh
bShHX0lPX1NUUkVBTShoYW5kbGUpKSkpOworfQorCitpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBn
c2l6ZSBieXRlc1dyaXR0ZW47CisgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbChnX2lvX3N0
cmVhbV9nZXRfb3V0cHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwgZGF0YSwgbGVuZ3Ro
LCAmYnl0ZXNXcml0dGVuLCAwLCAwKTsKKyAgICByZXR1cm4gYnl0ZXNXcml0dGVuOworfQorCitp
bnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGgpCit7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGRvIHsKKyAgICAg
ICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWQoZ19pb19zdHJlYW1fZ2V0
X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwgZGF0YSwgbGVuZ3RoLCAwLCAmZXJy
b3Iub3V0UHRyKCkpOworICAgICAgICBpZiAoYnl0ZXNSZWFkID49IDApCisgICAgICAgICAgICBy
ZXR1cm4gYnl0ZXNSZWFkOworICAgIH0gd2hpbGUgKGVycm9yICYmIGVycm9yLT5jb2RlID09IEdf
RklMRV9FUlJPUl9JTlRSKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgdW5sb2FkTW9kdWxl
KFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKK3sKKyAgICByZXR1cm4gZ19tb2R1bGVfY2xvc2UobW9k
dWxlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uaXgvTUlNRVR5cGVSZWdpc3RyeU5peC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uaXgvTUlNRVR5cGVSZWdpc3RyeU5peC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWQz
ODFmZGNkNWZmYTBlZTAzNzU0YTBlNTFiMDY5NWNjZDhhMjJiMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9NSU1FVHlwZVJlZ2lzdHJ5Tml4LmNwcApAQCAt
MCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBFeHRlbnNpb25NYXAgeworICAgIGNvbnN0
IGNoYXIqIGV4dGVuc2lvbjsKKyAgICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKK307CisKK3N0YXRp
YyBjb25zdCBFeHRlbnNpb25NYXAgZXh0ZW5zaW9uTWFwW10gPSB7CisgICAgeyAiYm1wIiwgImlt
YWdlL2JtcCIgfSwKKyAgICB7ICJjc3MiLCAidGV4dC9jc3MiIH0sCisgICAgeyAiZ2lmIiwgImlt
YWdlL2dpZiIgfSwKKyAgICB7ICJodG1sIiwgInRleHQvaHRtbCIgfSwKKyAgICB7ICJodG0iLCAi
dGV4dC9odG1sIiB9LAorICAgIHsgImljbyIsICJpbWFnZS94LWljb24iIH0sCisgICAgeyAianBl
ZyIsICJpbWFnZS9qcGVnIiB9LAorICAgIHsgImpwZyIsICJpbWFnZS9qcGVnIiB9LAorICAgIHsg
ImpzIiwgImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIgfSwKKyAgICB7ICJtbmciLCAidmlkZW8v
eC1tbmciIH0sCisgICAgeyAicGJtIiwgImltYWdlL3gtcG9ydGFibGUtYml0bWFwIiB9LAorICAg
IHsgInBnbSIsICJpbWFnZS94LXBvcnRhYmxlLWdyYXltYXAiIH0sCisgICAgeyAicGRmIiwgImFw
cGxpY2F0aW9uL3BkZiIgfSwKKyAgICB7ICJwbmciLCAiaW1hZ2UvcG5nIiB9LAorICAgIHsgInBw
bSIsICJpbWFnZS94LXBvcnRhYmxlLXBpeG1hcCIgfSwKKyAgICB7ICJyc3MiLCAiYXBwbGljYXRp
b24vcnNzK3htbCIgfSwKKyAgICB7ICJzdmciLCAiaW1hZ2Uvc3ZnK3htbCIgfSwKKyAgICB7ICJ0
ZXh0IiwgInRleHQvcGxhaW4iIH0sCisgICAgeyAidGlmIiwgImltYWdlL3RpZmYiIH0sCisgICAg
eyAidGlmZiIsICJpbWFnZS90aWZmIiB9LAorICAgIHsgInR4dCIsICJ0ZXh0L3BsYWluIiB9LAor
ICAgIHsgInhibSIsICJpbWFnZS94LXhiaXRtYXAiIH0sCisgICAgeyAieG1sIiwgInRleHQveG1s
IiB9LAorICAgIHsgInhwbSIsICJpbWFnZS94LXhwbSIgfSwKKyAgICB7ICJ4c2wiLCAidGV4dC94
c2wiIH0sCisgICAgeyAieGh0bWwiLCAiYXBwbGljYXRpb24veGh0bWwreG1sIiB9LAorICAgIHsg
IndtbCIsICJ0ZXh0L3ZuZC53YXAud21sIiB9LAorICAgIHsgIndtbGMiLCAiYXBwbGljYXRpb24v
dm5kLndhcC53bWxjIiB9LAorICAgIHsgMCwgMCB9Cit9OworCitTdHJpbmcgTUlNRVR5cGVSZWdp
c3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nICZleHQpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFN0cmluZyBsb3dlckNhc2VFeHQgPSBleHQu
bG93ZXIoKTsKKyAgICBjb25zdCBFeHRlbnNpb25NYXAqIGV4dE1hcCA9IGV4dGVuc2lvbk1hcDsK
KyAgICB3aGlsZSAoZXh0TWFwLT5leHRlbnNpb24pIHsKKyAgICAgICAgaWYgKGxvd2VyQ2FzZUV4
dCA9PSBleHRNYXAtPmV4dGVuc2lvbikKKyAgICAgICAgICAgIHJldHVybiBleHRNYXAtPm1pbWVU
eXBlOworICAgICAgICArK2V4dE1hcDsKKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK2Jvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNBcHBsaWNhdGlvblBsdWdpbk1JTUVUeXBlKGNv
bnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9TaGFyZWRU
aW1lck5peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvU2hhcmVkVGltZXJOaXgu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjVmMWMwZGQyZDA3N2RiMTY3YjdlMDcyNDg2MzUwNWRiZTE4NGIyOGIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvU2hhcmVkVGlt
ZXJOaXguY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNoYXJlZFRpbWVyLmgiCisKKyNkZWZpbmUgR0RLX1BSSU9SSVRZX1JFRFJBVyAoR19QUklP
UklUWV9ISUdIX0lETEUgKyAyMCkKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgZ3VpbnQgc2hhcmVkVGltZXI7CitzdGF0aWMgdm9pZCAoKnNoYXJl
ZFRpbWVyRmlyZWRGdW5jdGlvbikoKTsKKwordm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rp
b24odm9pZCAoKmZpcmVkRnVuY3Rpb24pKCkpCit7CisgICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0
aW9uID0gZmlyZWRGdW5jdGlvbjsKK30KKworc3RhdGljIGdib29sZWFuIHRpbWVvdXRDYWxsYmFj
ayhncG9pbnRlcikKK3sKKyAgICBpZiAoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKQorICAgICAg
ICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3Zv
aWQgc2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQoreworICAgIEFT
U0VSVChzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pOworCisgICAgZ3VpbnQgaW50ZXJ2YWxJbk1T
ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ+KGludGVydmFsICogMTAwMCk7CisKKyAgICBzdG9wU2hhcmVk
VGltZXIoKTsKKyAgICBzaGFyZWRUaW1lciA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJ
VFlfUkVEUkFXLCBpbnRlcnZhbEluTVMsIHRpbWVvdXRDYWxsYmFjaywgMCwgMCk7Cit9CisKK3Zv
aWQgc3RvcFNoYXJlZFRpbWVyKCkKK3sKKyAgICBpZiAoIXNoYXJlZFRpbWVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBnYm9vbGVhbiByZW1vdmVkU291cmNlID0gZ19zb3VyY2VfcmVtb3ZlKHNo
YXJlZFRpbWVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWRTb3VyY2UsIHJlbW92ZWRTb3Vy
Y2UpOworICAgIHNoYXJlZFRpbWVyID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjllZTdiNmUyZjBlOTVjMDQxMmUyMzQ0ZWZkMDhhMmUzMzk1ZTQ0YWIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiU1NMS2V5R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiVVJMLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5n
PiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIHNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgY29uc3QgVVJMJikK
K3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>