public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/10307: constructor for static object of template omitted
@ 2003-04-07 14:20 bangerth
  0 siblings, 0 replies; 5+ messages in thread
From: bangerth @ 2003-04-07 14:20 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, kilpatds, nobody

Synopsis: constructor for static object of template omitted

State-Changed-From-To: analyzed->closed
State-Changed-By: bangerth
State-Changed-When: Mon Apr  7 14:20:28 2003
State-Changed-Why:
    Independent analysis here:
      http://gcc.gnu.org/ml/gcc-bugs/2003-04/msg00183.html

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10307


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: c++/10307: constructor for static object of template omitted
@ 2003-04-04 20:26 Wolfgang Bangerth
  0 siblings, 0 replies; 5+ messages in thread
From: Wolfgang Bangerth @ 2003-04-04 20:26 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/10307; it has been noted by GNATS.

From: Wolfgang Bangerth <bangerth@ices.utexas.edu>
To: Douglas Kilpatrick <kilpatds@oppositelock.org>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/10307: constructor for static object of template omitted
Date: Fri, 4 Apr 2003 14:17:24 -0600 (CST)

 > I would have though that a subclass of a template by a non-template would
 > cause the template to be instantiated, but it doesn't seem to.  I have to
 > declare an explicit variable of the non-template class to get things to
 > work.
 
 Well, each component of a template can be instantiated in two ways:
 - an explicit instantiation
 - implicit instantiation by using this part (i.e. using a template member 
   function, etc)
 Note that in implicit instantiation, using one part of a template class 
 doesn't imply that _all_ the parts are instantiated. Deriving from a class 
 (and using the derived class) counts as implicit instantiation of the base 
 class.
 
 > What's the syntax for forcing that without actually declaring a variable? 
 > Its not a template, so using the explicit template instantation syntax
 > doesn't work.  (Code freely available if you want it.  ~6k)
 
 Just as I wrote it:
   template int Class<int>::StaticMemberVariable;
 (that's an explicit instantiation), or simply instantiating the entire 
 class and all it's parts:
   template class Class<int>;
 
 W.
 
 -------------------------------------------------------------------------
 Wolfgang Bangerth              email:            bangerth@ices.utexas.edu
                                www: http://www.ices.utexas.edu/~bangerth/
 
 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: c++/10307: constructor for static object of template omitted
@ 2003-04-04 20:16 Wolfgang Bangerth
  0 siblings, 0 replies; 5+ messages in thread
From: Wolfgang Bangerth @ 2003-04-04 20:16 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/10307; it has been noted by GNATS.

From: Wolfgang Bangerth <bangerth@ices.utexas.edu>
To: gcc-gnats@gcc.gnu.org
Cc:  
Subject: Re: c++/10307: constructor for static object of template omitted
Date: Fri, 4 Apr 2003 14:12:44 -0600 (CST)

 ---------- Forwarded message ----------
 Date: Thu, 3 Apr 2003 23:11:31 -0500
 From: Douglas Kilpatrick <kilpatds@oppositelock.org>
 To: bangerth@dealii.org
 Subject: Re: c++/10307: constructor for static object of template omitted
 
 On 3 Apr 2003 22:23:55 -0000
 bangerth@dealii.org wrote:
 
 >     I think this is actually what the standard prescribes,
 >     since static variables are only instantiated by use or
 >     by explicit instantiation, not by instantiation of
 >     the class they belong to. In fact, you can make the above
 >     code work as you expect it by adding this line:
 >       template TemplateStatic Template<int>::s;
 
 Ok.  Question for you then...
 
 The actual place I ran into this was a plugin framework, trying to
 eliminate some of the cookie-cutter code.
 
 I have a base class that is the plugin interface.  I want to create a
 intermediate class that the user of the framework subclasses that handles
 registering the plugin and factory method on library load (dlopen()).
 Then the user subclasses from that.
 
 I would have though that a subclass of a template by a non-template would
 cause the template to be instantiated, but it doesn't seem to.  I have to
 declare an explicit variable of the non-template class to get things to
 work.
 
 What's the syntax for forcing that without actually declaring a variable? 
 Its not a template, so using the explicit template instantation syntax
 doesn't work.  (Code freely available if you want it.  ~6k)
 
 Or is this simply a case of "Don't Do That Then."? :)
 
 Doug
 -- 
 Doug Kilpatrick
 kilpatds@oppositelock.org
 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: c++/10307: constructor for static object of template omitted
@ 2003-04-03 22:23 bangerth
  0 siblings, 0 replies; 5+ messages in thread
From: bangerth @ 2003-04-03 22:23 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, kilpatds, nobody

Synopsis: constructor for static object of template omitted

State-Changed-From-To: open->analyzed
State-Changed-By: bangerth
State-Changed-When: Thu Apr  3 22:23:54 2003
State-Changed-Why:
    Behavior confirmed with all versions of gcc (2.95 .. 3.4).
    Another testcase is this:
    ----------------------
    #include <iostream>
    
    // ------------- template
    
    int template_counter = 0;
    
    struct TemplateStatic {
        TemplateStatic () { ++template_counter; }
    };
    
    template <typename T> struct Template {
        static TemplateStatic s;
    };
    template <typename T> TemplateStatic Template<T>::s;
    
    // ------------ non-template
    
    int non_template_counter = 0;
    
    struct NonTemplateStatic {
        NonTemplateStatic () { ++non_template_counter; }
    };
    
    struct NonTemplate {
        static NonTemplateStatic s;
    };
    NonTemplateStatic NonTemplate::s;
    
    // ------------- use both
    
    int main() {
      Template<int> t;
      NonTemplate   nt;
    
      std::cout << template_counter << " "
                << non_template_counter << std::endl;
    }
    ---------------------------
    
    Both Template and NonTemplate have a static variable,
    but the constructor of them is only run for the non-template.
    
    I think this is actually what the standard prescribes,
    since static variables are only instantiated by use or
    by explicit instantiation, not by instantiation of
    the class they belong to. In fact, you can make the above
    code work as you expect it by adding this line:
      template TemplateStatic Template<int>::s;
    
    Maybe someone of those with more knowledge of these matters
    can confirm my interpretation?
    
    Regards
      Wolfgang
    
    PS: icc7 agrees with gcc in all this, so I'd say it's not
    a bug.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10307


^ permalink raw reply	[flat|nested] 5+ messages in thread

* c++/10307: constructor for static object of template omitted
@ 2003-04-03 21:46 kilpatds
  0 siblings, 0 replies; 5+ messages in thread
From: kilpatds @ 2003-04-03 21:46 UTC (permalink / raw)
  To: gcc-gnats


>Number:         10307
>Category:       c++
>Synopsis:       constructor for static object of template omitted
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Thu Apr 03 21:46:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     kilpatds@oppositelock.org
>Release:        unknown-1.0
>Organization:
>Environment:
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --host=i386-redhat-linux --with-system-zlib --enable-__cxa_atexit
Thread model: posix
gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7)
$ rpm -q gcc
gcc-3.2-7
$ rpm -q redhat-release
redhat-release-8.0-8
>Description:
The Base class has a static member with a constructor.
The member only exists for the side effects (registration).
The constructor of the static object is not being called.

I can "force" the constructor to be invoked by having it
modify a data element I read (and ignore) elsewhere.

As per the submission guidelines, I have attached the 
preprocessed files, but it only includes stdio.h

The hackaround addes a public integer "i" to StaticReg,
and sets it to 0 in the constructor of "derived"
$ diff -u Foo.ii Foo-hack.ii
--- Foo.ii      2003-04-03 16:41:22.000000000 -0500
+++ Foo-hack.ii 2003-04-03 16:41:55.000000000 -0500
@@ -1132,8 +1132,8 @@

 class StaticReg {

-
-
+    public:
+        int i;

     public:
         StaticReg() {
@@ -1154,7 +1154,7 @@
     public:
     derived() {

-
+        sr.i = 0;

         fputs("World", stdout);
     }
>How-To-Repeat:
$ make Foo Foo-hack
c++ -O2 --save-temps -o Foo Foo.cc
c++ -O2 -DHACKAROUND=1 -o Foo-hack Foo.cc
$ ./Foo
World
$ ./Foo-hack
Hello World
>Fix:
No clue.  Temporary hack around provided above.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="Foo.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Foo.ii"

IyAxICJGb28uY2MiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAxICJG
b28uY2MiCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOTEgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMK
IyAyOTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTQgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTUgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIg
MwoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51
eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
cmVkaGF0LWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50
IHNpemVfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUv
Yml0cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGlu
dXgvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvYml0cy90eXBl
cy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3VfbG9uZzsKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9f
aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBz
aG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90
Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vp
bnQzMl90OwoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9f
aW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191
aW50NjRfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRf
dDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRf
dDsKIyAxMjggIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy90eXBlc2l6ZXMuaCIgMSAzCiMgMTI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAy
IDMKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19kZXZfdDsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgX191aWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19naWRfdDsKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGludCBfX2lub190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X19pbm82NF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX21vZGVfdDsKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgbG9uZyBs
b25nIGludCBfX29mZjY0X3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgc3RydWN0IHsg
aW50IF9fdmFsWzJdOyB9IF9fZnNpZF90Owp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3JsaW1fdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv
bmcgaW50IF9fcmxpbTY0X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9faWRfdDsKdHlwZWRlZiBs
b25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBl
ZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7Cgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVk
ZWYgbG9uZyBpbnQgX19zd2Jsa190Owp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgaW50
IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgp0eXBlZGVmIGxvbmcgaW50
IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIGxv
bmcgbG9uZyBpbnQgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19m
c2Jsa2NudF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19mc2Jsa2NudDY0X3Q7
CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBsb25nIGludCBfX2ZzZmlsY250NjRfdDsKCgoKCnR5cGVkZWYgaW50IF9fc3NpemVf
dDsKdHlwZWRlZiBfX29mZjY0X3QgX19sb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJf
dDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0
eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKIyAzNyAiL3Vzci9pbmNsdWRlL3N0ZGlv
LmgiIDIgMwoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKCgoKCiMgNjIg
Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsK
IyA3MiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg
MSAzCiMgMzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAxIDMKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MzIxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19H
X2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMy4yL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjMgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2Nv
dW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAg
fSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi
IDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19z
dGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAg
X19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19H
X2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI4ICIvdXNyL2lu
Y2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxp
bnV4LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDIgMwojIDYzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKIyAyOSAiL3Vzci9pbmNsdWRlL2dj
b252LmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8zLjIv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoK
CgplbnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05P
REIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZV
TExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVf
SU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxf
RVJST1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZf
SUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3Qg
X19nY29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBf
X2djb252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3Qg
X19nY29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVk
IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNp
emVfdCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiB3aW50X3QgKCpfX2djb252X2J0b3djX2ZjdCkg
KHN0cnVjdCBfX2djb252X3N0ZXAgKiwgdW5zaWduZWQgY2hhcik7CgoKdHlwZWRlZiBpbnQgKCpf
X2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgq
X19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQg
KCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hh
ciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkg
KHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNo
YXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3Qg
Y2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2Zj
dCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNf
ZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29u
dl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3Ry
YW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7
CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsK
CgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAq
X19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50
ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9m
Y3QgX19mY3Q7CiAgX19nY29udl9idG93Y19mY3QgX19idG93Y19mY3Q7CiAgX19nY29udl9pbml0
X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9f
bWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVl
ZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9p
ZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNo
YXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2Zs
YWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91
c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgog
IHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0
IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAg
Kl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRh
IFtdOwp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5
cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAg
ICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEg
X19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50
MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0df
aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7
CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19TSV9fKSkpOwojIDMzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTMgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51
eC8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1y
ZWRoYXQtbGludXgvMy4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFf
bGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2
MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9f
RklMRTsKIyAxNzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9j
a190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7
CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTUgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRf
b2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9u
b2NvbnYKfTsKIyAyNjMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklMRSB7
CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFk
X2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNo
YXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVm
X2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hh
ciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19t
YXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxl
bm87CgoKCiAgaW50IF9mbGFnczI7CgogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWdu
ZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hh
ciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzExICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwog
IHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9m
IChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9w
bHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4g
c3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19G
SUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM1MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK
dHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19i
dWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRl
X2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3Nl
ZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBl
ZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9f
cmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29v
a2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1
bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsK
Cgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4g
KndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBf
SU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25z
X3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRl
cm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUs
IGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19j
b29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7
CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAo
X0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9J
T19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0
aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0
aHJvdyAoKTsKIyA0MzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dl
dGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9f
YywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklM
RSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnAp
IHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhy
b3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDYy
ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklM
RSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jl
c3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgp
OwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkg
dGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNp
emVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAq
LCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vl
a3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQg
X0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwojIDUyMCAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMKfQojIDczICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0
eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMgODYgIi91c3IvaW5jbHVkZS9zdGRpby5o
IiAzCgoKdHlwZWRlZiBfR19mcG9zX3QgZnBvc190OwoKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3Qg
ZnBvczY0X3Q7CiMgMTM4ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMK
CgoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3RkaW47CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEUg
KnN0ZG91dDsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3RkZXJyOwoKCgoKCgoKCgpleHRlcm4g
aW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE3MyAi
L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAqX19zKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE5NSAiL3Vzci9p
bmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19k
aXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bWFsbG9jX18pKTsKCgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpm
b3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJu
IEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAg
ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAy
NDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwpleHRlcm4gRklMRSAqZnJl
b3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFn
aWNfY29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVu
Y3Rpb25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2
b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZs
b2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6
ZWxvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBf
X2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
LCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hh
ciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJ
TEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAg
ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNf
dmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg
ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAog
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u
LikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg
MywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6
ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgoKZXh0ZXJuIGlu
dCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDAp
KSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMp
KSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsK
CgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsK
ZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJp
bnRmX18sIDIsIDMpKSk7CgoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHZm
c2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpl
eHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2du
dWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf
XyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgoKCmV4dGVybiBp
bnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAo
KTsKCgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191
bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu
dCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQg
X193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkK
ICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBp
bnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0pIHRocm93ICgpOwojIDQ2MyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9f
c3NpemVfdCBfX2dldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxp
bWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVz
dHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19y
ZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90
IGdldGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpf
X3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9f
cHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgZndyaXRlIChf
X2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJp
Y3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gc2l6
ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXpl
X3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBmc2VlayAo
RklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoK
ZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4g
dm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCiMgNTMwICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3Qg
X19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA1NDYgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoK
CmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpf
X3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxF
ICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1NjUgIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFt
LCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0
X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0cG9z
NjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9z
KQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9f
Y29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNsZWFyZXJy
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoK
CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oIiAxIDMKIyAyNyAiL3Vzci9p
bmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMwpleHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4g
X19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBfc3lzX25l
cnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107CiMgNjAyICIv
dXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIg
Kl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVy
bWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFy
ICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNr
X3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg
MykpKTsKZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3Ry
aWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192
YV9saXN0IF9fYXJncykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo
X19wcmludGZfXywgMiwgMCkpKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CiMgNjc2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAz
CmlubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2du
dWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBf
X2ZtdCwgX19hcmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAoKQp7CiAg
cmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGluZSBpbnQKZ2V0Y191bmxvY2tlZCAo
RklMRSAqX19mcCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9wdHIgPj0g
KF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQgY2hhciAq
KSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tl
ZCAodm9pZCkgdGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRyID49IChz
dGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQgY2hhciAq
KSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlubGluZSBpbnQKcHV0Y2hhciAoaW50
IF9fYykgdGhyb3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoKCgpp
bmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+
X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChf
X2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChf
X2MpKSk7Cn0KCgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+
PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5z
aWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dy
aXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50
IF9fYykgdGhyb3cgKCkKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChz
dGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNo
YXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysg
PSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5l
cHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gX19n
ZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlubGluZSBp
bnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgo
X19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVycm9yX3Vu
bG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSkt
Pl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjc3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAz
CgoKfQojIDIgIkZvby5jYyIgMgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFN0YXRpY1Jl
ZyB7CgoKCgogICAgcHVibGljOgogICAgICAgIFN0YXRpY1JlZygpIHsKICAgICAgICAgICAgZnB1
dHMoIkhlbGxvICIsIHN0ZG91dCk7CiAgICAgICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNs
YXNzIGJhc2UgewogICAgcHJvdGVjdGVkOgogICAgICAgIFQgaTsKICAgICAgICBzdGF0aWMgU3Rh
dGljUmVnIHNyOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CiAgICBTdGF0aWNSZWcgYmFzZTxUPjo6
c3I7CgpjbGFzcyBkZXJpdmVkIDogcHVibGljIGJhc2U8aW50PiB7CiAgICBwdWJsaWM6CiAgICBk
ZXJpdmVkKCkgewoKCgogICAgICAgIGZwdXRzKCJXb3JsZCIsIHN0ZG91dCk7CiAgICB9Cgp9OwoK
aW50IG1haW4oKSB7CiAgICBkZXJpdmVkIGQ7CiAgICBmcHV0cygiXG4iLHN0ZG91dCk7CgogICAg
cmV0dXJuIDA7Cn0K


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-04-07 14:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-07 14:20 c++/10307: constructor for static object of template omitted bangerth
  -- strict thread matches above, loose matches on Subject: below --
2003-04-04 20:26 Wolfgang Bangerth
2003-04-04 20:16 Wolfgang Bangerth
2003-04-03 22:23 bangerth
2003-04-03 21:46 kilpatds

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).