This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
c++/746: GCC doesn't seem to like asmallfunction(time(NULL-1000);
- To: gcc-gnats at gcc dot gnu dot org
- Subject: c++/746: GCC doesn't seem to like asmallfunction(time(NULL-1000);
- From: pb at instadia dot net
- Date: 7 Nov 2000 17:32:45 -0000
- Reply-To: pb at instadia dot net
>Number: 746
>Category: c++
>Synopsis: GCC doesn't seem to like asmallfunction(time(NULL-1000);
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: unassigned
>State: open
>Class: ice-on-illegal-code
>Submitter-Id: net
>Arrival-Date: Tue Nov 07 09:36:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator: Philip Bergen
>Release: gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
>Organization:
>Environment:
RedHat 6.2/AMD ATHLON (!thunderbird)/ASUS A7V
>Description:
ICE on this code:
Parameter *p;
p->setValueAbsTime(time(NULL-1000);
RESULT:
testmod.h:53: Internal compiler error 108.
testmod.h:53: Please submit a full bug report to `egcs-bugs@egcs.cygnus.com'.
testmod.h:53: See <URL:http://egcs.cygnus.com/faq.html#bugreport> for details.
Attached: cat parameter.h parameter.cpp > parm
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="parm"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="parm"
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5o
PgojaW5jbHVkZSA8dGltZS5oPgojaW5jbHVkZSA8c3lzL3RpbWViLmg+CgojaW5jbHVkZSA8c3Ry
aW5nPgoKI2luY2x1ZGUgImxvZ2dlci5oIgoKI2lmbmRlZiBfUEFSQU1FVEVSX0hfCiNkZWZpbmUg
X1BBUkFNRVRFUl9IXwoKLyoqCiAgIFBhcmFtZXRlciBpcyB0aGUgaW5mb3JtYXRpb24gY2Fycmll
ciBmb3IgYWxsIENvbmZpZ3VyYWJsZQogICBvYmplY3RzLiBCYXNpY2FsbHkgYSBwYXJhbWV0ZXIg
Y29uY2lzdHMgb2YgRm91ciBwYXJ0czoKICAgTmFtZSwKICAgRGVzY3JpcHRpb24sCiAgIFR5cGUg
YW5kCiAgIFZhbHVlLgogICBFdmVyeSBQYXJhbWV0ZXIgaGFzIGEgbmV4dCBhbmQgYXJyYXkgcG9p
bnRlci4gVGhlIGFycmF5IHBvaW50ZXIKICAgaG9sZHMgcGFyYW1ldGVyIG9iamVjdHMgdGhhdCBj
YXJyeSB2YWx1ZXMgaW4gY2FzZSB0aGUgcGFyYW1ldGVyCiAgIGlzIHJhZGlvYnV0dG9uIG9yIGNv
bWJvYm94LiBTdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSBhcnJhbmdlZCB1c2luZyB0aGUgCiAgIG5l
eHQtcG9pbnRlciBhbGxvd2luZyBOLWRpbWVuc2lvbmFsIHRyZWVzIHdpdGggYW55IGFycmF5IHBh
cmFtZXRlciBiZWluZwogICBub3Qgb25seSBhbiBlbGVtZW50IGJ1dCBhbiBhcnJheSBpdCBzZWxm
LgogICBAc2VlIENvbmZpZ3VyYWJsZQogICBAdmVyc2lvbiAwLjkKICAgQEF1dGhvciBQaGlsaXAg
QmVyZ2VuCiovCmNsYXNzIFBhcmFtZXRlcgp7CnB1YmxpYzoKICBQYXJhbWV0ZXIoKTsKICBQYXJh
bWV0ZXIoY2hhciAqZGVzY3IpOwogIFBhcmFtZXRlcihjaGFyICpkZXNjciwgY2hhciAqX25hbWUs
IGludCBfdHlwZSk7CiAgUGFyYW1ldGVyKFBhcmFtZXRlciAmcGFyKTsKICB+UGFyYW1ldGVyKCk7
CgogIHN0YXRpYyBjb25zdCBpbnQgdHlwZV9pbnQ7CiAgc3RhdGljIGNvbnN0IGludCB0eXBlX2Zs
b2F0OwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZV9ib29sOwogIHN0YXRpYyBjb25zdCBpbnQgdHlw
ZV9jb21ibzsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVfY29tYm9faXRlbTsKICBzdGF0aWMgY29u
c3QgaW50IHR5cGVfYWJzX3RpbWU7CiAgc3RhdGljIGNvbnN0IGludCB0eXBlX3JlbF90aW1lOwog
IHN0YXRpYyBjb25zdCBpbnQgdHlwZV9hcnJheTsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVfc3Ry
aW5nOwoKICBzdGF0aWMgY29uc3QgaW50IGRpc3BfbXVsdGlzZWxlY3Q7CiAgc3RhdGljIGNvbnN0
IGludCBkaXNwX3NpbmdsZXNlbGVjdDsKICBzdGF0aWMgY29uc3QgaW50IGRpc3BfcmFkaW9idXR0
b247CiAgc3RhdGljIGNvbnN0IGludCBkaXNwX2J1dHRvbmxpc3Q7CiAgc3RhdGljIGNvbnN0IGlu
dCBkaXNwX2NoZWNrYm94OwogIHN0YXRpYyBjb25zdCBpbnQgZGlzcF9jb21ib2JveDsKICBzdGF0
aWMgY29uc3QgaW50IGRpc3BfbGlzdGJveDsKICBzdGF0aWMgY29uc3QgaW50IGRpc3BfaW1hZ2U7
CiAgc3RhdGljIGNvbnN0IGludCBkaXNwX3Bhc3N3b3JkOwoKICBQYXJhbWV0ZXIgJm9wZXJhdG9y
PShQYXJhbWV0ZXIgJnJpZ2h0KTsKICB2b2lkIHNldEFsbChQYXJhbWV0ZXIgJnJpZ2h0KTsKCiAg
aW5saW5lIFBhcmFtZXRlciAqZ2V0QXJyYXkodm9pZCk7CiAgaW5saW5lIGludCAgICBnZXRUeXBl
KHZvaWQpOwogIGlubGluZSBpbnQgICAgZ2V0VmFsdWVJbnQodm9pZCk7CiAgaW5saW5lIGZsb2F0
ICBnZXRWYWx1ZUZsb2F0KHZvaWQpOwogIGlubGluZSBjaGFyICAqZ2V0VmFsdWVTdHJpbmcodm9p
ZCk7CiAgaW5saW5lIGludCAgICBnZXRWYWx1ZUJvb2wodm9pZCk7CiAgaW5saW5lIHRpbWVfdCBn
ZXRWYWx1ZUFic1RpbWUodm9pZCk7CiAgaW5saW5lIHRpbWVfdCBnZXRWYWx1ZVJlbFRpbWUodm9p
ZCk7CiAgaW5saW5lIGludCAgICBnZXRTY2FsZSh2b2lkKTsKICBpbmxpbmUgaW50IGdldEdyb3Vw
KHZvaWQpOwogIFBhcmFtZXRlciAqZ2V0VmFsdWVBcnJheShpbnQgcG9zKTsKICBpbmxpbmUgaW50
IGdldEFycmF5TGVuZ3RoKHZvaWQpOwogIGlubGluZSBjb25zdCBjaGFyICpnZXREZXNjcmlwdGlv
bih2b2lkKTsKICBpbmxpbmUgY29uc3QgY2hhciAqZ2V0TmFtZSh2b2lkKTsKICBpbmxpbmUgUGFy
YW1ldGVyICpnZXROZXh0KHZvaWQpOwoKICB2b2lkIHNldE1pbk1heChmbG9hdCBsbWluLCBmbG9h
dCBsbWF4LCBib29sIGNoZWNrbWluPXRydWUsIAoJCSBib29sIGNoZWNrbWF4PXRydWUpOwogIGlu
bGluZSB2b2lkIHNldFR5cGUoaW50IHQpOwogIGlubGluZSB2b2lkIHNldFZhbHVlSW50KGludCB2
KTsKICBpbmxpbmUgdm9pZCBzZXRWYWx1ZUZsb2F0KGZsb2F0IHYpOwogIHZvaWQgc2V0VmFsdWVT
dHJpbmcoY29uc3QgY2hhciAqdik7CiAgaW5saW5lIHZvaWQgc2V0VmFsdWVCb29sKGludCB2KTsK
ICBpbmxpbmUgdm9pZCBzZXRWYWx1ZUFic1RpbWUodGltZV90IHYpOwogIGlubGluZSB2b2lkIHNl
dFZhbHVlUmVsVGltZSh0aW1lX3Qgdik7CiAgaW5saW5lIHZvaWQgc2V0U2NhbGUoaW50IHMpOwog
IHZvaWQgc2V0RGlzcGxheU9wdGlvbnMoaW50IGRpc3AsIGNvbnN0IGNoYXIgKmZuYW1lPU5VTEwp
OwogIHZvaWQgc2V0RGVzY3JpcHRpb24oY29uc3QgY2hhciAqZCk7CiAgdm9pZCBzZXROYW1lKGNv
bnN0IGNoYXIgKm4pOwogIGlubGluZSB2b2lkIHNldEdyb3VwKGludCBfZ3JvdXApOwoKICB2b2lk
IHNldEFycmF5KGNoYXIgKnBhcl9uYW1lLCBjaGFyICpwYXJfdmFsdWUpOwogIGlubGluZSB2b2lk
IHNldEFycmF5KFBhcmFtZXRlciAqX2FycmF5KTsKICBpbmxpbmUgdm9pZCBkcm9wQXJyYXkodm9p
ZCk7CiAgdm9pZCBjaGVja0NvbWJvKGNoYXIgKnBhcl9uYW1lKTsgIAoKICB2b2lkIGR1bXBBc0hU
TUwoaW50IF9ncm91cCwgY2hhciAqZm9ybWF0PU5VTEwsIGludCBkdW1wbmV4dD0xKTsKICBQYXJh
bWV0ZXIgKmFkZEFzQXJyYXkoUGFyYW1ldGVyICphKTsKICBQYXJhbWV0ZXIgKmFkZEFzTmV4dChQ
YXJhbWV0ZXIgKmEpOwoKICB2b2lkIGh1bWFuUmVhZGFibGVIVE1MKHZvaWQpOwoKICBQYXJhbWV0
ZXIgKmZpbmRQYXJhbWV0ZXJCeU5hbWUoY29uc3QgY2hhciAqcGFyX25hbWUpOwogIFBhcmFtZXRl
ciAqZmluZEFuZFNldFBhcmFtZXRlcihjb25zdCBjaGFyICpwYXJfbmFtZSwgY29uc3QgY2hhciAq
cGFyX3ZhbHVlKTsKICB2b2lkIGZpbmRBbmRBc3NpZ25QYXJhbWV0ZXIoY29uc3QgY2hhciAqcGFy
X25hbWUsIFBhcmFtZXRlciAmcGFyX3ZhbHVlKTsKICAKICB2b2lkIHNlcmlhbGl6ZUdldChzdHJp
bmcgJnN0ciwgaW50IGRpdmU9MSk7CiAgdm9pZCBzZXJpYWxpemVTZXQoY29uc3QgY2hhciAqaW5w
dXQpOwogIC8vIHBhcl9uYW1lPSJfSURfbmFtZSIsIHBhcl92YWx1ZT1hbnkgc3RyaW5nCiAgdm9p
ZCBwcmludCh2b2lkKTsKCiAgaW50IGdlbmVyYXRlRnJvbUZpbGUoY2hhciAqZm5hbWUpOwoKICBj
aGFyICp2YWxpZGF0ZUxpbWl0cyhpbnQgYXV0b2ZpeCwgaW50IHJlY3Vyc2l2ZT0wKTsKCnByaXZh
dGU6CiAgY2hhciAqZGVzY3JpcHRpb247CiAgY2hhciAqbmFtZTsKICBpbnQgZGF0YVR5cGUsZGlz
cFR5cGUsc2VsZWN0VHlwZTsKICBjaGFyICp2YWx1ZV9zdHJpbmc7CiAgaW50IHZhbHVlX2ludDsK
ICBmbG9hdCB2YWx1ZV9mbG9hdDsKICB0aW1lX3QgdmFsdWVfdGltZTsKICBQYXJhbWV0ZXIgKm5l
eHQ7CiAgUGFyYW1ldGVyICphcnJheTsKICBpbnQgYXJyYXlfbGVuZ3RoOwogIGludCBzY2FsZSxn
cm91cDsKICBmbG9hdCBtaW5MaW1pdCwgbWF4TGltaXQ7CiAgYm9vbCBjaGVja01pbkxpbWl0LGNo
ZWNrTWF4TGltaXQ7Cn07CgovKiAqKioqKioqKioqKioqKioqKioqKioqKiogIElOTElORSBDT0RF
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KCi8qKgogICBAcmV0dXJuIFRoZSBh
cnJheSBwb2ludGVyLgoqLwppbmxpbmUgUGFyYW1ldGVyKiBQYXJhbWV0ZXI6OmdldEFycmF5KHZv
aWQpCnsKICByZXR1cm4gYXJyYXk7Cn0KCi8qKgogICBAcmV0dXJuIFRoZSBvYmplY3QncyB0eXBl
LCBQYXJhbWV0ZXI6OnR5cGVfaW50IG9yIFBhcmFtZXRlcjo6dHlwZV9ib29sIAogICBhbmQgc28g
Zm9ydGguLi4KKi8KaW5saW5lIGludCBQYXJhbWV0ZXI6OmdldFR5cGUodm9pZCkKewogIHJldHVy
biBkYXRhVHlwZTsKfQoKLyoqCiAgIEByZXR1cm4gVGhlIG9iamVjdCdzIGdyb3VwLgogICBAc2Vl
IFBhcmFtZXRlcjo6ZHVtcFRvSFRNTAoqLwppbmxpbmUgaW50IFBhcmFtZXRlcjo6Z2V0R3JvdXAo
dm9pZCkKewogIHJldHVybiBncm91cDsKfQoKLyoqCiAgIEByZXR1cm4gVGhlIHBhcmFtZXRlcidz
IHR5cGVfaW50LXZhbHVlLgoqLwppbmxpbmUgaW50IFBhcmFtZXRlcjo6Z2V0VmFsdWVJbnQodm9p
ZCkKewogIHJldHVybiB2YWx1ZV9pbnQ7Cn0KCi8qKgogICBAcmV0dXJuIFRoZSBwYXJhbWV0ZXIn
cyB0eXBlX2Zsb2F0LXZhbHVlLgoqLwppbmxpbmUgZmxvYXQgUGFyYW1ldGVyOjpnZXRWYWx1ZUZs
b2F0KHZvaWQpCnsKICByZXR1cm4gdmFsdWVfZmxvYXQ7Cn0KCi8qKgogICBAcmV0dXJuIFRoZSBw
YXJhbWV0ZXIncyB0eXBlX3N0cmluZy12YWx1ZSwgcGxlYXNlIGRvIG5vdCBtb2RpZnkgdGhlIAog
ICByZXN1bHQuIEl0IGlzIG5vdCBhIGNvcHksIGJ1dCBhIHBvaW50ZXIgdG8gdGhlIHBoeXNpY2Fs
IHN0cmluZy4KKi8KaW5saW5lIGNoYXIgKlBhcmFtZXRlcjo6Z2V0VmFsdWVTdHJpbmcodm9pZCkK
ewogIHJldHVybiB2YWx1ZV9zdHJpbmc7Cn0KCi8qKgogICBAcmV0dXJuIFRoZSBwYXJhbWV0ZXIn
cyB0eXBlX2Jvb2wtdmFsdWUuCiovCmlubGluZSBpbnQgUGFyYW1ldGVyOjpnZXRWYWx1ZUJvb2wo
dm9pZCkKewogIHJldHVybiB2YWx1ZV9pbnQ7Cn0KCi8qKgogICBAcmV0dXJuIFRoZSBwYXJhbWV0
ZXIncyB0eXBlX2Fic190aW1lLXZhbHVlLgoqLwppbmxpbmUgdGltZV90IFBhcmFtZXRlcjo6Z2V0
VmFsdWVBYnNUaW1lKHZvaWQpCnsKICByZXR1cm4gdmFsdWVfdGltZTsKfQoKLyoqCiAgIFRoZSB0
eXBlX3JlbF90aW1lLXZhbHVlIGlzIHRoZSBzYW1lIHBoeXNpY2FsIGNodW5rIG9mIG1lbW9yeSBh
cyAKICAgdHlwZV9hYnNfdGltZS12YWx1ZSdzLgogICBAcmV0dXJuIFRoZSBwYXJhbWV0ZXIncyB0
eXBlX3JlbF90aW1lLXZhbHVlLgoqLwppbmxpbmUgdGltZV90IFBhcmFtZXRlcjo6Z2V0VmFsdWVS
ZWxUaW1lKHZvaWQpCnsKICByZXR1cm4gdmFsdWVfdGltZTsKfQoKLyoqCiAgIFNjYWxlIGlzIHVz
ZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aW1lIHZhbHVlcy4gVGhlIHRpbWUgaXMKICAgZGl2aWRl
ZCBieSB0aGlzIHZhbHVlIGJlZm9yZSBwdWJsaXNoaW5nIG9uIHRoZSBuZXQgYW5kIHRoZW4KICAg
bXVsdGlwbGllZCBvbiB0aGUgd2F5IGJhY2suCiAgIEByZXR1cm4gVGhlIHZhbHVlIG9mICJzY2Fs
ZSIKKi8KaW5saW5lIGludCBQYXJhbWV0ZXI6OmdldFNjYWxlKHZvaWQpCnsKICByZXR1cm4gc2Nh
bGU7Cn0KCgovKioKICAgQHJldHVybiBMZW5ndGggb2YgdGhlIGFycmF5IGJlbG9uZ2luZyB0byB0
aGlzIG9iamVjdC4KKi8KaW5saW5lIGludCBQYXJhbWV0ZXI6OmdldEFycmF5TGVuZ3RoKHZvaWQp
CnsKICByZXR1cm4gYXJyYXlfbGVuZ3RoOwp9CgovKioKICAgQHJldHVybiBUaGUgZGVzY3JpcHRp
b24gZm9yIHRoaXMgUGFyYW1ldGVyLW9iamVjdC4KKi8KaW5saW5lIGNvbnN0IGNoYXIgKlBhcmFt
ZXRlcjo6Z2V0RGVzY3JpcHRpb24odm9pZCkKewogIHJldHVybiBkZXNjcmlwdGlvbjsKfQoKLyoq
CiAgIEByZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QuCiovCmlubGlu
ZSBjb25zdCBjaGFyICpQYXJhbWV0ZXI6OmdldE5hbWUodm9pZCkKewogIHJldHVybiBuYW1lOwp9
CgovKioKICAgQHJldHVybiBBIHBvaW50ZXIgdG8gdGhlIG5leHQgUGFyYW1ldGVyLCBOVUxMIGlm
IG5vbmUuCiovCmlubGluZSBQYXJhbWV0ZXIgKlBhcmFtZXRlcjo6Z2V0TmV4dCh2b2lkKQp7CiAg
cmV0dXJuIG5leHQ7Cn0KCi8qKgogICBLaWxscyB0aGUgY3VycmVudCBhcnJheSBpZiBhbnksIGFu
ZCBzZXRzIGl0IHRvIHBvaW50IGF0IF9hcnJheS4KICAgQHBhcmFtIF9hcnJheSBBbnkgUGFyYW1l
dGVyIHBvaW50ZXIsIGV2ZW4gTlVMTC4gUmVtZW1iZXIgdGhhdCB0aGUKICAgcG9pbnRlciBpcyBu
b3cgYSBwYXJ0IG9mIHRoaXMgUGFyYW1ldGVyIG9iamVjdCwgc28gZG9uJ3QgZGVsZXRlIGl0Lgoq
LwppbmxpbmUgdm9pZCBQYXJhbWV0ZXI6OnNldEFycmF5KFBhcmFtZXRlciAqX2FycmF5KQp7CiAg
aWYgKGFycmF5KQogICAgewogICAgICBkZWxldGUgYXJyYXk7CiAgICB9CiAgYXJyYXk9X2FycmF5
Owp9CgovKioKICAgSnVzdCBzZXRzIHRoZSBhcnJheSBwb2ludGVyIHRvIE5VTEwuCiAgID4+IFdB
Uk5JTkchISEgPDwgRG9lcyBOT1QgREVMRVRFIHRoZSBhcnJheSEgLVVzZSBQYXJhbWV0ZXI6OnNl
dEFycmF5KE5VTEwpIAogICB0byBnZXQgdGhhdCBhY3Rpb24uCiAgIFVzZSB0aGlzIGlmIHRoZSB0
cmVlIG9mIG9iamVjdHMgaXMgcGFzc2VkIG9uIHRvIGFub3RoZXIgcGFyYW1ldGVyLgogICBAc2Vl
IFBhcmFtZXRlcjo6c2V0QXJyYXkKKi8KaW5saW5lIHZvaWQgUGFyYW1ldGVyOjpkcm9wQXJyYXko
dm9pZCkKewogIGFycmF5PU5VTEw7Cn0KCi8qKgogICBDaGFuZ2UgdGhlIHBhcmFtZXRlcidzIHR5
cGUuIEJhc2ljYWxseSBhbGwgdmFsdWVzIGFyZSB2YWxpZCwgYnV0CiAgIHZlcnkgdW5wcmVkaWN0
ZWQgYmVoYXZpb3VyIG9jY3VycyBpZiB5b3UgZG9uJ3QgdXNlIHRoZSBwcmVkZWZpbmVkIHR5cGVz
CiAgIGxpa2UgUGFyYW1ldGVyOjp0eXBlX3N0cmluZy4KKi8KaW5saW5lIHZvaWQgUGFyYW1ldGVy
OjpzZXRUeXBlKGludCB0KQp7CiAgZGF0YVR5cGU9dDsKICBpZiAoZGF0YVR5cGU9PVBhcmFtZXRl
cjo6dHlwZV9jb21ibykKICAgIHsKICAgICAgdmFsdWVfaW50PS0yOwogICAgfQp9CgovKioKICAg
Q2hhbmdlIHRoZSBwYXJhbWV0ZXIncyBncm91cC4gUGFyYW1ldGVycyBmcm9tIGEgc2VsZWN0IGdy
b3VwIGNhbgogICBiZSBkdW1wZWQgdG8gSFRNTCBpbmRpdmlkdWFsbHkuCiAgIEBwYXJhbSBfZ3Jv
dXAgQW55IHZhbHVlIG90aGVyIHRoYW4gemVyby4KKi8KaW5saW5lIHZvaWQgUGFyYW1ldGVyOjpz
ZXRHcm91cChpbnQgX2dyb3VwKQp7CiAgZ3JvdXA9X2dyb3VwOwp9CgovKioKICAgU2V0IHRoZSB2
YWx1ZSBmb3IgdGhlIHR5cGVfaW50LgogICBAcGFyYW0gdiBBbnkgaW50ZWdlciB2YWx1ZS4KKi8K
aW5saW5lIHZvaWQgUGFyYW1ldGVyOjpzZXRWYWx1ZUludChpbnQgdikKewogIHZhbHVlX2ludD12
Owp9CgovKioKICAgU2V0IHRoZSB2YWx1ZSBmb3IgdGhlIHR5cGVfZmxvYXQuCiAgIEBwYXJhbSB2
IGFueSBmbG9hdCB2YWx1ZS4KKi8KaW5saW5lIHZvaWQgUGFyYW1ldGVyOjpzZXRWYWx1ZUZsb2F0
KGZsb2F0IHYpCnsKICB2YWx1ZV9mbG9hdD12Owp9CgoKLyoqCiAgIFNldCB0aGUgdmFsdWUgZm9y
IHR5cGVfYm9vbC4gCiAgIEBwYXJhbSB2IEFueSBpbnRlZ2VyIHZhbHVlLCB6ZXJvICgwKSBpcyBm
YWxzZSwgYWxsIG90aGVyIHZhbHVlcyBhcmUgdHJ1ZS4KKi8KaW5saW5lIHZvaWQgUGFyYW1ldGVy
OjpzZXRWYWx1ZUJvb2woaW50IHYpCnsKICB2YWx1ZV9pbnQ9djsKfQoKLyoqCiAgIFNldCB0aGUg
dmFsdWUgZm9yIHR5cGVfYWJzX3RpbWUuIAogICBAcGFyYW0gdiBVTklYIHRpbWUgKHNlY29uZHMg
c2luY2UgMS4gSmFuIDE5NzApLCBwb3NpdGl2ZSBudW1iZXJzIG9ubHkhCiovCmlubGluZSB2b2lk
IFBhcmFtZXRlcjo6c2V0VmFsdWVBYnNUaW1lKHRpbWVfdCB2KQp7CiAgdmFsdWVfdGltZT12Owp9
CgovKioKICAgU2V0IHRoZSB2YWx1ZSBmb3IgdHlwZV9yZWxfdGltZS4KICAgQHBhcmFtIHYgVU5J
WCB0aW1lIChzZWNvbmRzKSwgcG9zaXRpdmUgb3IgbmVnYXRpdmUuCiovCmlubGluZSB2b2lkIFBh
cmFtZXRlcjo6c2V0VmFsdWVSZWxUaW1lKHRpbWVfdCB2KQp7CiAgdmFsdWVfdGltZT12Owp9Cgov
KioKICAgU2NhbGUgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRpbWUgdmFsdWVzLiBUaGUg
dGltZSBpcwogICBkaXZpZGVkIGJ5IHRoaXMgdmFsdWUgYmVmb3JlIHB1Ymxpc2hpbmcgb24gdGhl
IG5ldCBhbmQgdGhlbgogICBtdWx0aXBsaWVkIG9uIHRoZSB3YXkgYmFjay4KICAgQHBhcmFtIHMg
VGhlIHZhbHVlIGZvciBzY2FsZQoqLwppbmxpbmUgdm9pZCBQYXJhbWV0ZXI6OnNldFNjYWxlKGlu
dCBzKQp7CiAgc2NhbGU9czsKfQoKCiNlbmRpZgoKCgoKCiNpbmNsdWRlICJwYXJhbWV0ZXIuaCIK
CmNvbnN0IGludCBQYXJhbWV0ZXI6OnR5cGVfaW50PTE7CmNvbnN0IGludCBQYXJhbWV0ZXI6OnR5
cGVfZmxvYXQ9MjsKY29uc3QgaW50IFBhcmFtZXRlcjo6dHlwZV9ib29sPTM7CmNvbnN0IGludCBQ
YXJhbWV0ZXI6OnR5cGVfY29tYm89NDsKY29uc3QgaW50IFBhcmFtZXRlcjo6dHlwZV9jb21ib19p
dGVtPTEwOwpjb25zdCBpbnQgUGFyYW1ldGVyOjp0eXBlX2Fic190aW1lPTU7CmNvbnN0IGludCBQ
YXJhbWV0ZXI6OnR5cGVfcmVsX3RpbWU9NjsKY29uc3QgaW50IFBhcmFtZXRlcjo6dHlwZV9hcnJh
eT03Owpjb25zdCBpbnQgUGFyYW1ldGVyOjp0eXBlX3N0cmluZz04OwoKY29uc3QgaW50IFBhcmFt
ZXRlcjo6ZGlzcF9tdWx0aXNlbGVjdD0xMDA7CmNvbnN0IGludCBQYXJhbWV0ZXI6OmRpc3Bfc2lu
Z2xlc2VsZWN0PTEwMTsKY29uc3QgaW50IFBhcmFtZXRlcjo6ZGlzcF9yYWRpb2J1dHRvbj0yMDA7
CmNvbnN0IGludCBQYXJhbWV0ZXI6OmRpc3BfYnV0dG9ubGlzdD0yMDE7CmNvbnN0IGludCBQYXJh
bWV0ZXI6OmRpc3BfY2hlY2tib3g9MjAyOwpjb25zdCBpbnQgUGFyYW1ldGVyOjpkaXNwX2NvbWJv
Ym94PTIwMzsKY29uc3QgaW50IFBhcmFtZXRlcjo6ZGlzcF9saXN0Ym94PTIwNDsKY29uc3QgaW50
IFBhcmFtZXRlcjo6ZGlzcF9pbWFnZT0zMDA7CmNvbnN0IGludCBQYXJhbWV0ZXI6OmRpc3BfcGFz
c3dvcmQ9NDAwOwoKCi8qKgogICBTZXRzIGV2ZXJ5dGhpbmcgdG8gbm90aGluZy4KKi8KUGFyYW1l
dGVyOjpQYXJhbWV0ZXIoKQp7CiAgZGVzY3JpcHRpb249TlVMTDsKICBuYW1lPU5VTEw7CiAgZGF0
YVR5cGU9LTE7CiAgZGlzcFR5cGU9MDsKICBzZWxlY3RUeXBlPTA7CiAgdmFsdWVfc3RyaW5nPU5V
TEw7CiAgdmFsdWVfaW50PTA7CiAgdmFsdWVfZmxvYXQ9MDsKICBuZXh0PU5VTEw7CiAgYXJyYXk9
TlVMTDsKICBhcnJheV9sZW5ndGg9MDsKICBzY2FsZT0xOwp9CgovKioKICAgSW5pdGlhdGVzIGEg
bmV3IG9iamVjdCBhbmQgc2V0cyBkZXNjcmlwdGlvbiwgbmFtZSBhbmQgdHlwZSAKICAgYWNjb3Jk
aW5nbHkuCiAgIEBwYXJhbSBkZXNjciBBIGRlc2NyaXB0aW9uIG9mIHRoZSBvYmplY3QgdG8gYmUg
cHJpbnRlZCB0bwogICB0aGUgY3VzdG9tZXIuCiAgIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRo
ZSBvYmplY3QuIE1VU1QgQkUgVU5JUVVFIQogICBAcGFyYW0gX3R5cGUgQW55IG9mIHRoZSBjb25z
dGFudHMgbGlrZSBQYXJhbWV0ZXI6OnR5cGVfaW50IGV0Yy4KKi8KUGFyYW1ldGVyOjpQYXJhbWV0
ZXIoY2hhciAqZGVzY3IsIGNoYXIgKl9uYW1lLCBpbnQgX3R5cGUpCnsKICBkZXNjcmlwdGlvbj1O
VUxMOwogIG5hbWU9TlVMTDsKICBkYXRhVHlwZT0tMTsKICBkaXNwVHlwZT0wOwogIHNlbGVjdFR5
cGU9MDsKICB2YWx1ZV9zdHJpbmc9TlVMTDsKICB2YWx1ZV9pbnQ9MDsKICB2YWx1ZV9mbG9hdD0w
OwogIG5leHQ9TlVMTDsKICBhcnJheT1OVUxMOwogIGFycmF5X2xlbmd0aD0wOwogIHNjYWxlPTE7
CiAgc2V0RGVzY3JpcHRpb24oZGVzY3IpOwogIHNldE5hbWUoX25hbWUpOwogIHNldFR5cGUoX3R5
cGUpOwp9CgovKioKICAgU2V0IGV2ZXJ5dGhpbmcgdG8gbm90aGluZyBleGNlcHQgZGVzY3JpcHRp
b24uCiAgIEBwYXJhbSBkZXNjciBEZXNjcmlwdGlvbiBmb3IgdGhlIG5ldyBwYXJhbWV0ZXIuCiov
ClBhcmFtZXRlcjo6UGFyYW1ldGVyKGNoYXIgKmRlc2NyKQp7CiAgZGVzY3JpcHRpb249TlVMTDsK
ICBuYW1lPU5VTEw7CiAgZGF0YVR5cGU9LTE7CiAgZGlzcFR5cGU9MDsKICBzZWxlY3RUeXBlPTA7
CiAgdmFsdWVfc3RyaW5nPU5VTEw7CiAgdmFsdWVfaW50PTA7CiAgdmFsdWVfZmxvYXQ9MDsKICBu
ZXh0PU5VTEw7CiAgYXJyYXk9TlVMTDsKICBhcnJheV9sZW5ndGg9MDsKICBzY2FsZT0xOwogIHNl
dERlc2NyaXB0aW9uKGRlc2NyKTsKfQoKLyoqCiAgIENvcHkgY29uc3RydWN0b3IsIGJhc2ljYWxs
eSBqdXN0IHVzaW5nIHRoZSBvcGVyYXRvcj0uCiAgIEBzZWUgUGFyYW1ldGVyOjpvcGVyYXRvcj0K
Ki8KUGFyYW1ldGVyOjpQYXJhbWV0ZXIoUGFyYW1ldGVyICZwYXIpCnsKICBkZXNjcmlwdGlvbj1O
VUxMOwogIG5hbWU9TlVMTDsKICBkYXRhVHlwZT0tMTsKICBkaXNwVHlwZT0wOwogIHNlbGVjdFR5
cGU9MDsKICB2YWx1ZV9zdHJpbmc9TlVMTDsKICB2YWx1ZV9pbnQ9MDsKICB2YWx1ZV9mbG9hdD0w
OwogIG5leHQ9TlVMTDsKICBhcnJheT1OVUxMOwogIGFycmF5X2xlbmd0aD0wOwogIHNjYWxlPTE7
CiAgKnRoaXM9cGFyOwp9CgovKioKICAgRGlzYWxsb2NhdGVzIGV2ZXJ5dGhpbmcgaW5jbHVkaW5n
IG5leHQgYW5kIGFycmF5IHBvaW50ZXJzLgoqLwpQYXJhbWV0ZXI6On5QYXJhbWV0ZXIoKQp7CiAg
aWYgKGRlc2NyaXB0aW9uKQogICAgewogICAgICBkZWxldGUgZGVzY3JpcHRpb247CiAgICB9CiAg
aWYgKG5hbWUpCiAgICB7CiAgICAgIGRlbGV0ZSBuYW1lOwogICAgfQogIGlmICh2YWx1ZV9zdHJp
bmcpCiAgICB7CiAgICAgIGRlbGV0ZSB2YWx1ZV9zdHJpbmc7CiAgICB9CiAgaWYgKG5leHQpCiAg
ICB7CiAgICAgIGRlbGV0ZSBuZXh0OwogICAgfQogIGlmIChhcnJheSkKICAgIHsKICAgICAgZGVs
ZXRlIGFycmF5OwogICAgfQp9CgovKioKICAgVXNlcyBzZXRBbGwgdG8gY29weSB0aGUgdmFyaWFi
bGUgcmlnaHQncyBzdGF0ZS4KICAgQHBhcmFtIHJpZ2h0IFRoZSBvYmplY3QgdG8gY29weSBmcm9t
LgogICBAc2VlIFBhcmFtZXRlcjo6c2V0QWxsCiovClBhcmFtZXRlciAmUGFyYW1ldGVyOjpvcGVy
YXRvcj0oUGFyYW1ldGVyICZyaWdodCkKewogIGlmICh0aGlzIT0mcmlnaHQpCiAgICB7CiAgICAg
IHNldEFsbChyaWdodCk7CiAgICB9CiAgcmV0dXJuICp0aGlzOyAgCn0KCi8qKgogICBDb3BpZXMg
YWxsIHZhbHVlcyBmcm9tICJyaWdodCIgdG8gdGhpcy4gSWYgdGhlIHBhcmFtZXRlcgogICBoYXMg
YW4gYXJyYXksIHRoYXQgaXMgY29waWVkIGFzIHdlbGwuIE5leHQgaXMgbm90IGNvcGllZC4KICAg
QHBhcmFtIHJpZ2h0IFRoZSBvYmplY3QgdG8gY29weSBmcm9tLgoqLwp2b2lkIFBhcmFtZXRlcjo6
c2V0QWxsKFBhcmFtZXRlciAmcmlnaHQpIAp7CiAgc2V0TmFtZShyaWdodC5uYW1lKTsKICBzZXRE
ZXNjcmlwdGlvbihyaWdodC5kZXNjcmlwdGlvbik7CiAgc2V0VHlwZShyaWdodC5kYXRhVHlwZSk7
CiAgZGlzcFR5cGU9cmlnaHQuZGlzcFR5cGU7CiAgc2V0VmFsdWVJbnQocmlnaHQudmFsdWVfaW50
KTsKICBzZXRWYWx1ZUZsb2F0KHJpZ2h0LnZhbHVlX2Zsb2F0KTsKICBzZXRWYWx1ZUFic1RpbWUo
cmlnaHQudmFsdWVfdGltZSk7CiAgc2V0VmFsdWVTdHJpbmcocmlnaHQudmFsdWVfc3RyaW5nKTsK
ICBzZXRTY2FsZShyaWdodC5nZXRTY2FsZSgpKTsKICBzZXRHcm91cChyaWdodC5nZXRHcm91cCgp
KTsKICBpZiAoYXJyYXkpCiAgICB7CiAgICAgIGRlbGV0ZSBhcnJheTsKICAgIH0KICBQYXJhbWV0
ZXIgKnRtcCwqcl90bXA9cmlnaHQuYXJyYXk7CiAgd2hpbGUocl90bXApCiAgICB7CiAgICAgIHRt
cD1uZXcgUGFyYW1ldGVyKCpyX3RtcCk7CiAgICAgIGFkZEFzQXJyYXkodG1wKTsKICAgICAgcl90
bXA9cl90bXAtPm5leHQ7CiAgICB9Cn0KCgovKioKICAgVGhlIGFycmF5IHBvaW50ZXIgaXMgdGhl
IHBvaW50ZXIgdG8gdGhlIGZpcnN0IFBhcmFtZXRlciBvYmplY3QKICAgaW4gYW4gYXJyYXktcGFy
YW1ldGVyLiBUaGUgb2JqZWN0cyBmb2xsb3dpbmcgdGhhdCBpcyByZXRyZWl2ZWQKICAgYnkgZm9s
bG93aW5nIHRoZSBuZXh0IHBvaW50ZXIgZnJvbSB0aGUgYXJyYXktcG9pbnRlci1vYmplY3QuCiov
ClBhcmFtZXRlciAqUGFyYW1ldGVyOjpnZXRWYWx1ZUFycmF5KGludCBwb3MpCnsKICBQYXJhbWV0
ZXIgKnQ7CiAgaW50IGM9MDsKICBpZiAocG9zPDApCiAgICB7CiAgICAgIHJldHVybiBOVUxMOwog
ICAgfQogIHQ9dGhpcy0+YXJyYXk7CiAgd2hpbGUoYzxwb3MpCiAgICB7CiAgICAgIGlmICh0PT1O
VUxMKQoJewoJICByZXR1cm4gdDsKCX0KICAgICAgYysrOwogICAgICB0PXQtPm5leHQ7CiAgICB9
CiAgcmV0dXJuIHQ7Cn0KCgovKioKICAgU2V0cyBsaW1pdHMgdGhhdCB0aGUgcGFyYW1ldGVyIG11
c3Qgb2JleS4KICAgQ2FsbCBQYXJhbWV0ZXI6OnZhbGlkYXRlIHRvIGdldCByZXN1bHQuCiAgIEBw
YXJhbSBsbWluIFRoZSBsb3dlc3QgdmFsdWUgYWxsb3dlZCBmb3IgdGhpcyBwYXJhbWV0ZXIKICAg
KG9yIHRoZSBzaG9ydGVzdCBhIHN0cmluZyBjYW4gYmUpLgogICBAcGFyYW0gbG1heCBUaGUgaGln
aGVzdCB2YWx1ZSBhbGxvd2VkIGZvciB0aGlzIHBhcmFtZXRlcgogICAob3IgdGhlIGxvbmdlc3Qg
YSBzdHJpbmcgY2FuIGJlKS4KCiovCnZvaWQgUGFyYW1ldGVyOjpzZXRNaW5NYXgoZmxvYXQgbG1p
biwgZmxvYXQgbG1heCwgYm9vbCBjaGVja21pbj10cnVlLCAKCQkJICBib29sIGNoZWNrbWF4PXRy
dWUpCnsKICBjaGVja01pbkxpbWl0PWNoZWNrbWluOwogIGNoZWNrTWF4TGltaXQ9Y2hlY2ttYXg7
CiAgbWluTGltaXQ9bG1pbjsKICBtYXhMaW1pdD1sbWF4Owp9CgovKioKICAgU2V0IHRoZSB2YWx1
ZSBmb3IgdHlwZV9zdHJpbmcuIFRoZSBzdHJpbmcgaXMgY29waWVkLCBub3QganVzdCBwb2ludGVk
IHRvLgogICBAcGFyYW0gdiBBbnkgemVyby10ZXJtaW5hdGVkIHN0cmluZy4KKi8Kdm9pZCBQYXJh
bWV0ZXI6OnNldFZhbHVlU3RyaW5nKGNvbnN0IGNoYXIgKnYpCnsKICBpZiAodmFsdWVfc3RyaW5n
KQogICAgewogICAgICBkZWxldGUgdmFsdWVfc3RyaW5nOwogICAgfQogIGlmICghdikKICAgIHsK
ICAgICAgdmFsdWVfc3RyaW5nPU5VTEw7CiAgICB9CiAgZWxzZQogICAgewogICAgICB2YWx1ZV9z
dHJpbmc9bmV3IGNoYXJbc3RybGVuKHYpKzFdOwogICAgICBzdHJjcHkodmFsdWVfc3RyaW5nLHYp
OwogICAgfQkKfQoKLyoqCiAgIENoYW5nZSB0aGUgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoaXMg
cGFyYW1ldGVyLgogICBAcGFyYW0gZCBOZXcgZGVzY3JpcHRpb24uCiovCnZvaWQgUGFyYW1ldGVy
OjpzZXREZXNjcmlwdGlvbihjb25zdCBjaGFyICpkKQp7CiAgaWYgKGRlc2NyaXB0aW9uKQogICAg
ewogICAgICBkZWxldGUgZGVzY3JpcHRpb247CiAgICAgIGRlc2NyaXB0aW9uPU5VTEw7CiAgICB9
CiAgaWYgKGQpCiAgICB7CiAgICAgIGRlc2NyaXB0aW9uPW5ldyBjaGFyW3N0cmxlbihkKSsxXTsK
ICAgICAgc3RyY3B5KGRlc2NyaXB0aW9uLGQpOwogICAgfQp9CgovKioKICAgQ2hhbmdlIHRoZSBu
YW1lIGZvciB0aGlzIHBhcmFtZXRlci4KICAgQHBhcmFtIG4gVGhlIG5ldyBuYW1lLiBTdHJpbmcg
aXMgY29waWVkLCBub3QgdXNlZCwgIHNvIGl0IGNhbiAKICAgYmUgZGVsZXRlZCBhZnRlciB0aGlz
IGNhbGwuCiovCnZvaWQgUGFyYW1ldGVyOjpzZXROYW1lKGNvbnN0IGNoYXIgKm4pCnsKICBpZiAo
bmFtZSkKICAgIHsKICAgICAgZGVsZXRlIG5hbWU7CiAgICAgIG5hbWU9TlVMTDsKICAgIH0KICBp
ZiAobikKICAgIHsKICAgICAgbmFtZT1uZXcgY2hhcltzdHJsZW4obikrMV07CiAgICAgIHN0cmNw
eShuYW1lLG4pOwogICAgfQp9CgovKioKICAgQWxtb3N0IGFsbCBvZiB0aGUgZGlmZmVyZW50IHR5
cGVzIG9mIHBhcmFtZXRlcnMgY2FuIGJlIGRpc3BsYXllZAogICBpbiBtb3JlIHRoYW4gb25lIHdh
eS4gQnkgc2V0dGluZyBvcHRpb25zIG9uIGEgcGFyYW1ldGVyIHlvdSBjYW4KICAgY2hvc2UgaG93
IHRvIGRpc3BsYXkgaXQuCiAgIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBzZXZlcmFsIHRp
bWVzIHRvIHNldCBtdWx0aXBsZSBwcm9wZXJ0aWVzCiAgIG9uIGEgcGFyYW1ldGVyLgogICBAcGFy
YW0gZGlzcCBBIGNvbnN0YW50IAogKi8Kdm9pZCBQYXJhbWV0ZXI6OnNldERpc3BsYXlPcHRpb25z
KGludCBkaXNwLCBjb25zdCBjaGFyICpmbmFtZT1OVUxMKQp7CiAgc3dpdGNoIChkaXNwKQogICAg
ewogICAgY2FzZSBkaXNwX211bHRpc2VsZWN0OgogICAgICBzZWxlY3RUeXBlPTE7CiAgICAgIGJy
ZWFrOwogICAgY2FzZSBkaXNwX3NpbmdsZXNlbGVjdDoKICAgICAgc2VsZWN0VHlwZT0wOwogICAg
ICBicmVhazsKICAgIGNhc2UgZGlzcF9jb21ib2JveDoKICAgICAgZGlzcFR5cGU9MDsKICAgICAg
YnJlYWs7CiAgICBjYXNlIGRpc3BfbGlzdGJveDoKICAgICAgZGlzcFR5cGU9MTsKICAgICAgYnJl
YWs7CiAgICBjYXNlIGRpc3BfY2hlY2tib3g6CiAgICAgIGRpc3BUeXBlPTI7CiAgICAgIGJyZWFr
OwogICAgY2FzZSBkaXNwX2J1dHRvbmxpc3Q6CiAgICAgIGRpc3BUeXBlPTM7CiAgICAgIGJyZWFr
OwogICAgY2FzZSBkaXNwX3JhZGlvYnV0dG9uOgogICAgICBkaXNwVHlwZT00OwogICAgICBicmVh
azsKICAgIGNhc2UgZGlzcF9wYXNzd29yZDoKICAgICAgZGlzcFR5cGU9NTsKICAgICAgYnJlYWs7
CiAgICBjYXNlIGRpc3BfaW1hZ2U6CiAgICAgIGRpc3BUeXBlPTEwMDA7CiAgICAgIGJyZWFrOwog
ICAgfQp9CgovKioKICAgV3JpdGVzIGFsbCB0aGUgcGFyYW1ldGVycyBhcyBIVE1MLWZvcm1zLiBU
aGlzIGdpdmVzIGEgc2ltcGxlIHdheSB0byAKICAgY29tbXVuaWNhdGUgYW5kIGNvbmZpZ3VyYXRl
IG9iamVjdHMgb3ZlciB0aGUgbmV0LgogICBAcGFyYW0gX2dyb3VwIElmIHplcm8gdGhlbiBhbGwg
YXJlIGR1bXBlZCBlbHNlIG9ubHkgcGFyYW1ldGVycwogICB3aXRoIGdyb3VwIG51bWJlciBlcXVh
bCB0byBfZ3JvdXAgd2lsbCBiZSBkdW1wZWQuCiAgIEBwYXJhbSBkdW1wbmV4dCBJZiB0cnVlIHRo
ZW4gYSBkdW1wIGlzIGlzc3VlZCBmb3IgY2hpbGRyZW4gbm9kZXMuCiovCnZvaWQgUGFyYW1ldGVy
OjpkdW1wQXNIVE1MKGludCBfZ3JvdXAsIGNoYXIgKmZvcm1hdCwgaW50IGR1bXBuZXh0KQp7CiAg
aWYgKCFfZ3JvdXAgfHwgX2dyb3VwPT1ncm91cCkKICAgIHsKICAgICAgc3dpdGNoIChkYXRhVHlw
ZSkKCXsKCWNhc2UgdHlwZV9hcnJheToKCSAgcHJpbnRmKCIlc0FycmF5OiAlczxCUj5cbiIsZm9y
bWF0P2Zvcm1hdDoiIix0aGlzLT5nZXREZXNjcmlwdGlvbigpKTsKCSAgaWYgKGFycmF5KQoJICAg
IHsKCSAgICAgIGFycmF5LT5kdW1wQXNIVE1MKF9ncm91cCxmb3JtYXQsZHVtcG5leHQpOwoJICAg
IH0KCgkgIGJyZWFrOwoJICAKCWNhc2UgdHlwZV9jb21ibzoKCSAgewoJICAgIGludCBzaXplPTE7
CgkgICAgaWYgKGRpc3BUeXBlPT0xKQoJICAgICAgewoJCXNpemU9Z2V0QXJyYXlMZW5ndGgoKTsK
CSAgICAgIH0KCSAgICBpZiAoc2l6ZT4xNCkKCSAgICAgIHsKCQlzaXplPTE0OwoJICAgICAgfQoK
CSAgICBwcmludGYoIjxUUj48VEQ+JXMlczwvVEQ+PFREPiVzIixmb3JtYXQ/Zm9ybWF0OiIiLGdl
dERlc2NyaXB0aW9uKCksCgkJICAgZm9ybWF0P2Zvcm1hdDoiIik7CgkgICAgcHJpbnRmKCI8SU5Q
VVQgVFlQRT1oaWRkZW4gTkFNRT1cIiVzXCIgVkFMVUU9XCItMVwiPlxuIiwKCQkgICBnZXROYW1l
KCkpOwoJICAgIHByaW50ZigiPFNFTEVDVCBOQU1FPVwiJXNcIiBzdHlsZT1cImZvbnQtZmFtaWx5
OiBWZXJkYW5hOyAiCgkJICAgImZvbnQtc2l6ZTogMTA7XCIgU0laRT1cIiVkXCIgJXMgVFlQRT1c
IjJcIj5cbiIsZ2V0TmFtZSgpLAoJCSAgIHNpemUsc2VsZWN0VHlwZT09MT8ibXVsdGlwbGUiOiIi
KTsKCgkgICAgYXJyYXktPmR1bXBBc0hUTUwoMCxmb3JtYXQ/Zm9ybWF0OiIiLDEpOwoJICAgIHBy
aW50ZigiPC9TRUxFQ1Q+PC9URD48L1RSPlxuIik7CgkgIH0KCSAgYnJlYWs7CgkgIAoJY2FzZSB0
eXBlX2NvbWJvX2l0ZW06CgkgIHByaW50ZigiPE9QVElPTiBWQUxVRT1cIiVzXCIlcz4lcyVzPC9P
UFRJT04+XG4iLAoJCSBnZXROYW1lKCksdmFsdWVfaW50PyIgc2VsZWN0ZWQiOiIiLAoJCSBmb3Jt
YXQ/Zm9ybWF0OiIiLGdldERlc2NyaXB0aW9uKCkpOwoJICBicmVhazsKCSAgCgljYXNlIHR5cGVf
aW50OgoJICBwcmludGYoIjxUUj48VEQ+JXMlczwvVEQ+PFREPjxpbnB1dCB0eXBlPVwidGV4dFwi
IHNpemU9MTUgbmFtZT1cIiVzXCIgIgoJCSAidmFsdWU9XCIlZFwiIHN0eWxlPVwiZm9udC1mYW1p
bHk6IFZlcmRhbmE7IGZvbnQtc2l6ZTogMTA7XCI+PC9URD48L1RSPlxuIiwKCQkgZm9ybWF0P2Zv
cm1hdDoiIixnZXREZXNjcmlwdGlvbigpLGdldE5hbWUoKSxnZXRWYWx1ZUludCgpKTsKCSAgYnJl
YWs7CgkgIAoJY2FzZSB0eXBlX2Zsb2F0OgoJICBwcmludGYoIjxUUj48VEQ+JXMlczwvVEQ+PFRE
PjxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9MTUgbmFtZT1cIiVzXCIgIgoJCSAidmFsdWU9XCIl
ZlwiIHN0eWxlPVwiZm9udC1mYW1pbHk6IFZlcmRhbmE7IGZvbnQtc2l6ZTogMTA7XCI+PC9URD48
L1RSPlxuIiwKCQkgZm9ybWF0P2Zvcm1hdDoiIixnZXREZXNjcmlwdGlvbigpLGdldE5hbWUoKSxn
ZXRWYWx1ZUZsb2F0KCkpOwoJICBicmVhazsKCSAgCgljYXNlIHR5cGVfc3RyaW5nOgoJICBwcmlu
dGYoIjxUUj48VEQ+JXMlczwvVEQ+PFREPjxpbnB1dCB0eXBlPVwiJXNcIiBzaXplPTIwIG5hbWU9
XCIlc1wiICIKCQkgInZhbHVlPVwiJXNcIiBzdHlsZT1cImZvbnQtZmFtaWx5OiBWZXJkYW5hOyBm
b250LXNpemU6IDEwO1wiPjwvVEQ+PC9UUj5cbiIsCgkJIGZvcm1hdD9mb3JtYXQ6IiIsZ2V0RGVz
Y3JpcHRpb24oKSxkaXNwVHlwZT09NT8icGFzc3dvcmQiOiJ0ZXh0IiwKCQkgZ2V0TmFtZSgpLGdl
dFZhbHVlU3RyaW5nKCk/Z2V0VmFsdWVTdHJpbmcoKToiIik7CgkgIGJyZWFrOwoJICAKCWNhc2Ug
dHlwZV9yZWxfdGltZToKCSAgcHJpbnRmKCI8VFI+PFREPiVzJXM8L1REPjxURD48aW5wdXQgdHlw
ZT1cInRleHRcIiBzaXplPTE1IG5hbWU9XCIlc1wiICIKCQkgInZhbHVlPVwiJWRcIiBzdHlsZT1c
ImZvbnQtZmFtaWx5OiBWZXJkYW5hOyBmb250LXNpemU6IDEwO1wiPjwvVEQ+PC9UUj5cbiIsCgkJ
IGZvcm1hdD9mb3JtYXQ6IiIsZ2V0RGVzY3JpcHRpb24oKSxnZXROYW1lKCksZ2V0VmFsdWVSZWxU
aW1lKCkvZ2V0U2NhbGUoKSk7CgkgIGJyZWFrOwoJICAKCWNhc2UgdHlwZV9ib29sOgoJICBwcmlu
dGYoIjxUUj48VEQ+JXMlczwvVEQ+PFREPiVzIixmb3JtYXQ/Zm9ybWF0OiIiLGdldERlc2NyaXB0
aW9uKCksZm9ybWF0P2Zvcm1hdDoiIik7CgkgIHByaW50ZigiPElOUFVUIFRZUEU9cmFkaW8gTkFN
RT1cIiVzXCIlcyBWQUxVRT0xPlllczxCUj5cbiIsCgkJIGdldE5hbWUoKSxnZXRWYWx1ZUJvb2wo
KT8iIENIRUNLRUQiOiIiKTsKCSAgcHJpbnRmKCI8SU5QVVQgVFlQRT1yYWRpbyBOQU1FPVwiJXNc
IiVzIFZBTFVFPTA+Tm9cbiIsCgkJIGdldE5hbWUoKSxnZXRWYWx1ZUJvb2woKT8iIjoiIENIRUNL
RUQiKTsKCSAgYnJlYWs7CgkgIAoJY2FzZSB0eXBlX2Fic190aW1lOgoJICB7CgkgICAgc3RydWN0
IHRtICp0OwoJICAgIHQ9bG9jYWx0aW1lKCZ2YWx1ZV90aW1lKTsKCSAgICBwcmludGYoIjxUUj48
VEQ+JXMlczwvVEQ+PFREPiIsZm9ybWF0P2Zvcm1hdDoiIixnZXREZXNjcmlwdGlvbigpKTsKCSAg
ICBwcmludGYoIjxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9NCBuYW1lPVwiJXNfeXl5eVwiIHZh
bHVlPVwiJWRcIiAiCgkJICAgInN0eWxlPVwiZm9udC1mYW1pbHk6IFZlcmRhbmE7IGZvbnQtc2l6
ZTogMTA7XCI+IC0gIixnZXROYW1lKCksCgkJICAgdC0+dG1feWVhcisxOTAwKTsKCSAgICBwcmlu
dGYoIjxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9MiBuYW1lPVwiJXNfbW1cIiB2YWx1ZT1cIiVk
XCIgIgoJCSAgICJzdHlsZT1cImZvbnQtZmFtaWx5OiBWZXJkYW5hOyBmb250LXNpemU6IDEwO1wi
PiAtICIsZ2V0TmFtZSgpLAoJCSAgIHQtPnRtX21vbisxKTsKCSAgICBwcmludGYoIjxpbnB1dCB0
eXBlPVwidGV4dFwiIHNpemU9MiBuYW1lPVwiJXNfZGRcIiB2YWx1ZT1cIiVkXCIgIgoJCSAgICJz
dHlsZT1cImZvbnQtZmFtaWx5OiBWZXJkYW5hOyBmb250LXNpemU6IDEwO1wiPiZuYnNwOyZuYnNw
OyZuYnNwOyIsCgkJICAgZ2V0TmFtZSgpLHQtPnRtX21kYXkpOwoJICAgIC8qCSAgICBwcmludGYo
IjxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9MiBuYW1lPVwiJXNfaFwiIHZhbHVlPVwiJWRcIiAi
CgkJICAgInN0eWxlPVwiZm9udC1mYW1pbHk6IFZlcmRhbmE7IGZvbnQtc2l6ZTogMTA7XCI+IDog
IixnZXROYW1lKCksCgkJICAgdC0+dG1faG91cik7CgkgICAgcHJpbnRmKCI8aW5wdXQgdHlwZT1c
InRleHRcIiBzaXplPTIgbmFtZT1cIiVzX21cIiB2YWx1ZT1cIiVkXCIgIgoJCSAgICJzdHlsZT1c
ImZvbnQtZmFtaWx5OiBWZXJkYW5hOyBmb250LXNpemU6IDEwO1wiPiA6ICIsCgkJICAgZ2V0TmFt
ZSgpLHQtPnRtX21pbik7CgkgICAgcHJpbnRmKCI8aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPTIg
bmFtZT1cIiVzX3NcIiB2YWx1ZT1cIiVkXCIgIgoJCSAgICJzdHlsZT1cImZvbnQtZmFtaWx5OiBW
ZXJkYW5hOyBmb250LXNpemU6IDEwO1wiPiIsZ2V0TmFtZSgpLAoJCSAgIHQtPnRtX3NlYyk7Ki8K
CSAgICBwcmludGYoIjwvVEQ+PC9UUj5cbiIpOwoJICB9CgkgIGJyZWFrOwoJfQogICAgfQogIGlm
IChkdW1wbmV4dCAmJiBuZXh0KQogICAgewogICAgICBuZXh0LT5kdW1wQXNIVE1MKF9ncm91cCxm
b3JtYXQ/Zm9ybWF0OiIiLGR1bXBuZXh0KTsKICAgIH0KfQoKLyoqCiAgIEluc2VydHMgYSBQYXJh
bWV0ZXIgaW4gdGhlIGFycmF5IHJhdGhlciB0aGFuIGp1c3QgIm5leHQiLgogICBAcGFyYW0gYSBU
aGlzIHBhcmFtZXRlciBtdXN0IG5vdCBiZSBkZWxldGVkLCBpdCBpcyBub3cgaW5zZXJ0ZWQgCiAg
IHBvaW50ZXItd2lzZS4KICovClBhcmFtZXRlciAqUGFyYW1ldGVyOjphZGRBc0FycmF5KFBhcmFt
ZXRlciAqYSkKewogIGlmIChhcnJheSkKICAgIHsKICAgICAgYXJyYXktPmFkZEFzTmV4dChhKTsK
ICAgICAgYXJyYXlfbGVuZ3RoKys7CiAgICB9CiAgZWxzZQogICAgewogICAgICBhcnJheT1hOwog
ICAgICBhcnJheV9sZW5ndGg9MTsKICAgIH0KICBhLT5ncm91cD1ncm91cDsKICByZXR1cm4gYTsK
fQoKLyoqCiAgIEluc2VydHMgcGFyYW1ldGVyIGFmdGVyIHRoaXMgcGFyYW1ldGVyIGJ1dCBiZWZv
cmUgbmV4dC4KICAgQHBhcmFtIGEgVGhpcyBwYXJhbWV0ZXIgb2JqZWN0IG11c3Qgbm90IGJlIGRl
bGV0ZWQsIGl0IGlzIG5vdyBpbnNlcnRlZAogICBwb2ludGVyLXdpc2UuCiovClBhcmFtZXRlciAq
UGFyYW1ldGVyOjphZGRBc05leHQoUGFyYW1ldGVyICphKQp7CiAgUGFyYW1ldGVyICp0bXA9dGhp
czsKICB3aGlsZSAodG1wLT5uZXh0KQogICAgewogICAgICB0bXA9dG1wLT5uZXh0OwogICAgfQog
IHRtcC0+bmV4dD1hOwogIHJldHVybiBhOwp9CgovKioKICAgRmluZHMgYSBwYXJhbWV0ZXIgKGxv
b2tzIGluIGFycmF5cyBhcyB3ZWxsKSBieSBpdHMgbmFtZS4KICAgQHBhcmFtIHBhcl9uYW1lIFRo
aXMgaXMgdGhlIG5hbWUgdG8gbG9vayBmb3IuCiAgIEByZXR1cm4gQSBjb25zdCBwb2ludGVyIHRv
IHRoZSBvYmplY3Qgd2l0aCBuYW1lIGFzICJwYXJfbmFtZSIsIE5VTEwKICAgaWYgbm8gbmFtZSBt
YXRjaGVzLgoqLwpQYXJhbWV0ZXIgKlBhcmFtZXRlcjo6ZmluZFBhcmFtZXRlckJ5TmFtZShjb25z
dCBjaGFyICpwYXJfbmFtZSkKewogIGlmICghc3RyY21wKHBhcl9uYW1lLGdldE5hbWUoKSkpCiAg
ICB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgUGFyYW1ldGVy
ICpwPU5VTEw7CiAgICAgIGlmIChhcnJheSkKCXsKCSAgcD1hcnJheS0+ZmluZFBhcmFtZXRlckJ5
TmFtZShwYXJfbmFtZSk7Cgl9CiAgICAgIGlmICghcCAmJiBuZXh0KQoJewoJICBwPW5leHQtPmZp
bmRQYXJhbWV0ZXJCeU5hbWUocGFyX25hbWUpOwoJfSAgICAgIAogICAgICByZXR1cm4gcDsKICAg
IH0KICByZXR1cm4gTlVMTDsKfQoKLyoqCiAgIEZpbmRzIGEgcGFyYW1ldGVyIGJ5IGl0cyBuYW1l
IGFuZCBieSBpdHMgSUQgaWYgc28gaXMgY2hvc2VuLiBUaGUgc3RyaW5nCiAgICJwYXJfdmFsdWUi
IGlzIHBhcnNlZCBhY2NvcmRpbmcgdG8gdGhlIGZvdW5kIG9iamVjdCdzIHR5cGUuCiAgIEBwYXJh
bSBwYXJfbmFtZSBUaGUgbmFtZSB0byBsb29rIGZvci4KICAgQHBhcmFtIHBhcl92YWx1ZSBUaGUg
dmFsdWUgdG8gc2V0IHRoZSBmb3VuZCBvYmplY3QgdG8uIFR5cGUgaXMgZ2l2ZW4gYnkKICAgdGhl
IGZvdW5kIG9iamVjdC4KKi8KUGFyYW1ldGVyKiBQYXJhbWV0ZXI6OmZpbmRBbmRTZXRQYXJhbWV0
ZXIoY29uc3QgY2hhciAqcGFyX25hbWUsIAoJCQkJCSAgY29uc3QgY2hhciAqcGFyX3ZhbHVlKQp7
CiAgaWYgKCFwYXJfbmFtZSB8fCAhKnBhcl9uYW1lKQogICAgewogICAgICByZXR1cm4gTlVMTDsK
ICAgIH0KCiAgaWYgKCFzdHJjbXAocGFyX25hbWUsZ2V0TmFtZSgpKSkKICAgIHsKICAgICAgaWYg
KCFwYXJfdmFsdWUgfHwgISpwYXJfdmFsdWUpCgl7CgkgIHJldHVybiB0aGlzOwoJfQoKICAgICAg
c3dpdGNoKGRhdGFUeXBlKQoJewoJY2FzZSB0eXBlX2FycmF5OgoJICBzZXRWYWx1ZUludChhdG9p
KHBhcl92YWx1ZSkpOwoJICBicmVhazsKCQkJCgljYXNlIHR5cGVfY29tYm86CgkgIHsKCSAgICBw
cmludGYoIk5BTUU9JXMgVkFMVUU9JXNcbiIscGFyX25hbWUscGFyX3ZhbHVlKTsKCSAgICBpbnQg
aT1hdG9pKHBhcl92YWx1ZSk7CgkgICAgaWYgKGk9PS0xIHx8IHZhbHVlX2ludD09LTIpCgkgICAg
ICB7CgkJcHJpbnRmKCJDTEVBUklORyFcbiIpOwoJCVBhcmFtZXRlciAqdG1wOwoJCXRtcD1hcnJh
eTsKCQl3aGlsZSh0bXApCgkJICB7CgkJICAgIHRtcC0+c2V0VmFsdWVJbnQoMCk7CgkJICAgIHRt
cD10bXAtPm5leHQ7CgkJICB9CgkJdmFsdWVfaW50PS0xOwoJICAgICAgfQoJICAgIGlmIChpIT0t
MSkKCSAgICAgIHsKCQlQYXJhbWV0ZXIgKnA9ZmluZEFuZFNldFBhcmFtZXRlcihwYXJfdmFsdWUs
IjEiKTsKCQlpZiAoIXApCgkJICB7CgkJICAgIHByaW50ZigiQWRkZWQhXG4iKTsKCQkgICAgcD1h
ZGRBc0FycmF5KG5ldyBQYXJhbWV0ZXIoKGNoYXIgKilwYXJfdmFsdWUsCgkJCQkJICAgICAgIChj
aGFyICopcGFyX3ZhbHVlLAoJCQkJCSAgICAgICBQYXJhbWV0ZXI6OnR5cGVfaW50KSk7CgkJICAg
IHAtPnNldFZhbHVlSW50KDEpOwoJCSAgfQoJCWVsc2UKCQkgIHsKCQkgICAgcHJpbnRmKCJGT1VO
RDogJXNcbiIscC0+Z2V0TmFtZSgpKTsKCQkgIH0KCSAgICAgIH0KCSAgfQoJICBicmVhazsKCQkJ
CgljYXNlIHR5cGVfY29tYm9faXRlbToKCSAgc2V0VmFsdWVJbnQoYXRvaShwYXJfdmFsdWUpKTsK
CSAgYnJlYWs7CgkJCQoJY2FzZSB0eXBlX2ludDoKCSAgc2V0VmFsdWVJbnQoYXRvaShwYXJfdmFs
dWUpKTsKCSAgYnJlYWs7CgkJCQoJY2FzZSB0eXBlX2Zsb2F0OgoJICBzZXRWYWx1ZUZsb2F0KChm
bG9hdClhdG9mKHBhcl92YWx1ZSkpOwoJICBicmVhazsKCQkJCgljYXNlIHR5cGVfc3RyaW5nOgoJ
ICBzZXRWYWx1ZVN0cmluZyhwYXJfdmFsdWUpOwoJICBicmVhazsKCQkJCgljYXNlIHR5cGVfcmVs
X3RpbWU6CgkgIHNldFZhbHVlUmVsVGltZShhdG9pKHBhcl92YWx1ZSkpOwoJICBicmVhazsKCQkJ
CgljYXNlIHR5cGVfYm9vbDoKCSAgaWYgKCFzdHJjbXAocGFyX3ZhbHVlLCIxIikpCgkgICAgewoJ
ICAgICAgc2V0VmFsdWVCb29sKDEpOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgIHNldFZh
bHVlQm9vbCgwKTsKCSAgICB9CgkgIGJyZWFrOwoJCQkKCWNhc2UgdHlwZV9hYnNfdGltZToKCSAg
c2V0VmFsdWVBYnNUaW1lKGF0b2kocGFyX3ZhbHVlKSk7CgkgIGJyZWFrOwoJfQogICAgfQogIGVs
c2UKICAgIHsKICAgICAgUGFyYW1ldGVyICpyZXM9TlVMTDsKICAgICAgaWYgKGFycmF5KQoJewoJ
ICByZXM9YXJyYXktPmZpbmRBbmRTZXRQYXJhbWV0ZXIocGFyX25hbWUscGFyX3ZhbHVlKTsKCX0K
ICAgICAgaWYgKG5leHQgJiYgIXJlcykKCXsKCSAgcmVzPW5leHQtPmZpbmRBbmRTZXRQYXJhbWV0
ZXIocGFyX25hbWUscGFyX3ZhbHVlKTsKCX0KICAgICAgcmV0dXJuIHJlczsKICAgIH0KICByZXR1
cm4gdGhpczsKfQoKLyoqCiAgIEZpbmRzIGEgcGFyYW1ldGVyIGJ5IGl0cyBuYW1lIGFuZCBieSBp
dHMgSUQgaWYgc28gaXMgY2hvc2VuLiBUaGUgb2JqZWN0CiAgICJwYXJfdmFsdWUiIGlzIHVzZWQg
YXMgaW5mb3JtYXRpb24gY2Fycmllci4KICAgQHBhcmFtIHBhcl9uYW1lIFRoZSBuYW1lIHRvIGxv
b2sgZm9yLgogICBAcGFyYW0gcGFyX3ZhbHVlIFRoZSBvYmplY3QncyBldmVyeSBwcm9wZXJ0eSBp
cyBjb3BpZWQgKGluY2x1ZGluZyBhcnJheSkgdG8KICAgdGhlIGZvdW5kIG9iamVjdCB3aXRoIHNl
dEFsbC4KICAgQHBhcmFtIElEX211c3RfbWF0Y2ggSWYgdGhpcyBpcyB6ZXJvICgwKSBhbnkgcGFy
YW1ldGVyIHdpdGggdGhlIG5hbWUKICAgZXF1YWwgdG8gInBhcl9uYW1lIiBpcyBhc3NpZ25lZCB0
aGUgdmFsdWUgInBhcl92YWx1ZSIgaWYgb3RoZXIgdGhhbiB6ZXJvCiAgIGJvdGggbmFtZSBhbmQg
SUQgbXVzdCBtYXRjaC4gICAKICAgQHNlZSBQYXJhbWV0ZXI6OnNldEFsbAoqLwp2b2lkIFBhcmFt
ZXRlcjo6ZmluZEFuZEFzc2lnblBhcmFtZXRlcihjb25zdCBjaGFyICpwYXJfbmFtZSwgUGFyYW1l
dGVyICZwYXJfdmFsdWUpCnsKICBpZiAoIXN0cmNtcChwYXJfbmFtZSxnZXROYW1lKCkpKQogICAg
ewogICAgICB0aGlzLT5zZXRBbGwocGFyX3ZhbHVlKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAg
IGlmIChhcnJheSkKCXsKCSAgYXJyYXktPmZpbmRBbmRBc3NpZ25QYXJhbWV0ZXIocGFyX25hbWUs
cGFyX3ZhbHVlKTsKCX0KICAgICAgaWYgKG5leHQpCgl7CgkgIG5leHQtPmZpbmRBbmRBc3NpZ25Q
YXJhbWV0ZXIocGFyX25hbWUscGFyX3ZhbHVlKTsKCX0KICAgIH0KfQoKLyoqCiAgIEFuIGFzY2lp
LXZlcnNpb24gb2YgYWxsIHN1YnNlcXVlbnQgKGlmICJkaXZlIiBpcyB0cnVlKSBQYXJhbWV0ZXIg
b2JqZWN0cycgCiAgIHZhbHVlcyBhcmUgcGFzdGVkIGludG8gIm91dHB1dCIuIAogICBAcGFyYW0g
ZGl2ZSBJZiBkaXZlIGlzIHRydWUgYWxsIG5leHQtcG9pbnRlcnMgYXJlIGZvbGxvd2VkLiBUaGlz
IGlzIAogICBub3JtYWxseSB0cnVlLCBidXQgaWYgc2VyaWFsaXplZCB2ZXJzaW9ucyBvZiBhIHNp
bmdsZSBwYXJhbWV0ZXIgaXMgCiAgIHJlcXVlc3RlZCBpdCBzaG91bGQgYmUgc2V0IHRvIGZhbHNl
ICh6ZXJvLCAwKS4KKi8Kdm9pZCBQYXJhbWV0ZXI6OnNlcmlhbGl6ZUdldChzdHJpbmcgJnN0ciwg
aW50IGRpdmUpCnsKICBzdHJpbmcgdG1wOwogIGNoYXIgZGlnaXRidWZmZXJbMjVdOwogIHByaW50
ZigiTXkgbmFtZSBpczogJXNcbiIsbmFtZSk7CiAgc3RyPSIiOwogIHN3aXRjaChkYXRhVHlwZSkK
ICAgIHsKICAgIGNhc2UgdHlwZV9pbnQ6CiAgICAgIHNwcmludGYoZGlnaXRidWZmZXIsIiVkIixn
ZXRWYWx1ZUludCgpKTsKICAgICAgdG1wPSJOJyI7CiAgICAgIHRtcCs9bmFtZTsKICAgICAgdG1w
Kz0iJztWJyI7CiAgICAgIHRtcCs9ZGlnaXRidWZmZXI7CiAgICAgIHRtcCs9Iic7IjsKICAgICAg
YnJlYWs7CiAgICBjYXNlIHR5cGVfZmxvYXQ6CiAgICAgIHNwcmludGYoZGlnaXRidWZmZXIsIiVm
IixnZXRWYWx1ZUZsb2F0KCkpOwogICAgICB0bXA9Ik4nIjsKICAgICAgdG1wKz1uYW1lOwogICAg
ICB0bXArPSInO1YnIjsKICAgICAgdG1wKz1kaWdpdGJ1ZmZlcjsKICAgICAgdG1wKz0iJzsiOwog
ICAgICBicmVhazsKICAgIGNhc2UgdHlwZV9ib29sOgogICAgICB0bXA9Ik4nIjsKICAgICAgdG1w
Kz1uYW1lOwogICAgICB0bXArPSInO1YnIjsKICAgICAgdG1wKz1nZXRWYWx1ZUJvb2woKT8iMSI6
IjAiOwogICAgICB0bXArPSInOyI7CiAgICAgIGJyZWFrOwogICAgY2FzZSB0eXBlX2NvbWJvOgog
ICAgICB7CglQYXJhbWV0ZXIgKnA9YXJyYXk7Cgl0bXA9Ik4nIjsKCXRtcCs9bmFtZTsKCXRtcCs9
Iic7VictMSc7IjsKCXdoaWxlIChwKQoJICB7CgkgICAgaWYgKHAtPmdldFZhbHVlSW50KCkpCgkg
ICAgICB7CgkJdG1wKz0iTiciOwoJCXRtcCs9bmFtZTsKCQl0bXArPSInO1YnIjsKCQl0bXArPXAt
PmdldE5hbWUoKTsKCQl0bXArPSInOyI7CgkgICAgICB9CgkgICAgcD1wLT5nZXROZXh0KCk7Cgkg
IH0KICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgdHlwZV9jb21ib19pdGVtOgogICAgICBi
cmVhazsKICAgIGNhc2UgdHlwZV9hYnNfdGltZToKICAgICAgc3ByaW50ZihkaWdpdGJ1ZmZlciwi
JWQiLGdldFZhbHVlQWJzVGltZSgpKTsKICAgICAgdG1wPSJOJyI7CiAgICAgIHRtcCs9bmFtZTsK
ICAgICAgdG1wKz0iJztWJyI7CiAgICAgIHRtcCs9ZGlnaXRidWZmZXI7CiAgICAgIHRtcCs9Iic7
IjsKICAgICAgYnJlYWs7CiAgICBjYXNlIHR5cGVfcmVsX3RpbWU6CiAgICAgIHNwcmludGYoZGln
aXRidWZmZXIsIiVkIixnZXRWYWx1ZVJlbFRpbWUoKSk7CiAgICAgIHRtcD0iTiciOwogICAgICB0
bXArPW5hbWU7CiAgICAgIHRtcCs9Iic7ViciOwogICAgICB0bXArPWRpZ2l0YnVmZmVyOwogICAg
ICB0bXArPSInOyI7CiAgICAgIGJyZWFrOwogICAgY2FzZSB0eXBlX2FycmF5OgogICAgICB7CglQ
YXJhbWV0ZXIgKnA9YXJyYXk7CglpbnQgYz0wOwoJc3RyaW5nIHQ7Cgl3aGlsZSAocCkKCSAgewoJ
ICAgIHAtPnNlcmlhbGl6ZUdldCh0LDApOwoJICAgIHByaW50ZigiU0VSSUFMWkVHRVQgRk9SIDB4
JVggPSAlc1xuIiwoaW50KXAsdC5jX3N0cigpKTsKCSAgICB0bXArPXQ7CgkgICAgYysrOwoJICAg
IHA9cC0+Z2V0TmV4dCgpOwoJICB9CglpZiAoYykKCSAgewoJICAgIGNoYXIgeVsxMl07CgkgICAg
c3ByaW50Zih5LCIlZCIsYyk7CgkgICAgdD0iTiciOwoJICAgIHQrPW5hbWU7CgkgICAgdCs9Iic7
ViciOwoJICAgIHQrPXk7CgkgICAgdCs9Iic7IjsKCSAgICB0bXA9dCt0bXA7CgkgIH0KICAgICAg
fQogICAgICBicmVhazsKICAgIGNhc2UgdHlwZV9zdHJpbmc6CiAgICAgIHRtcD0iTiciOwogICAg
ICB0bXArPW5hbWU7CiAgICAgIHRtcCs9Iic7ViciOwogICAgICB0bXArPWdldFZhbHVlU3RyaW5n
KCk7CiAgICAgIHRtcCs9Iic7IjsKICAgICAgYnJlYWs7ICAgICAgCiAgICB9CiAgc3RyKz10bXA7
CiAgaWYgKGRpdmUgJiYgbmV4dCkKICAgIHsKICAgICAgbmV4dC0+c2VyaWFsaXplR2V0KHN0cixk
aXZlKTsKICAgIH0KfQoKLyoqCiAgIFRoZSBpbnZlcnNlIG9mIHNlcmlhbGl6ZUdldC4gUGFyc2Vz
IGEgc3RyaW5nIHJldHJlaXZlZCB3aXRoIHNlcmlhbHplR2V0CiAgIGFuZCBzZXRzIHRoZSBvYmpl
Y3RzIHN0YXRlLgogICBAcGFyYW0gaW5wdXQgQSBzdHJpbmcgZm9ybWF0dGVkIGFzIG9yIHJldHJl
aXZlZCB3aXRoIHNlcmlhbGl6ZUdldC4KICAgQHNlZSBQYXJhbWV0ZXI6OnNlcmlhbGl6ZUdldAoq
Lwp2b2lkIFBhcmFtZXRlcjo6c2VyaWFsaXplU2V0KGNvbnN0IGNoYXIgKmlucHV0KQp7CiAgY29u
c3QgY2hhciAqdG1wPWlucHV0OwogIGNoYXIgZnVsbG5hbWVbMjUwXTsKICBpbnQgYXJyYXlDb3Vu
dD0wOwogIFBhcmFtZXRlciAqbGFzdEFycmF5LCpra2s9TlVMTDsKCiAgd2hpbGUgKCp0bXApCiAg
ICB7CiAgICAgIGNoYXIgKm5hbWVwPXN0cnN0cih0bXAsIk4nIik7CiAgICAgIGNoYXIgKnZhbHVl
cD1zdHJzdHIobmFtZXArMiwiJztWJyIpOwogICAgICBjaGFyICplbmR0YWc9c3Ryc3RyKHZhbHVl
cCs0LCInOyIpOwoKICAgICAgdmFsdWVwWzBdPTA7CiAgICAgIGVuZHRhZ1swXT0wOwogICAgICAK
ICAgICAgaWYgKGFycmF5Q291bnQpCgl7CgkgIGFycmF5Q291bnQtLTsKCSAgbGFzdEFycmF5LT5z
ZXRBcnJheShuYW1lcCsyLHZhbHVlcCs0KTsKCX0KICAgICAgZWxzZQoJewoJICBra2s9dGhpcy0+
ZmluZEFuZFNldFBhcmFtZXRlcihuYW1lcCsyLHZhbHVlcCs0KTsKCSAgaWYgKGtrayAmJiBra2st
PmdldFR5cGUoKT09dHlwZV9hcnJheSkKCSAgICB7CgkgICAgICBsYXN0QXJyYXk9a2trOwoJICAg
ICAgYXJyYXlDb3VudD1ra2stPmdldFZhbHVlSW50KCk7CgkgICAgfQoJfQogICAgICB2YWx1ZXBb
MF09J1wnJzsKICAgICAgZW5kdGFnWzBdPSdcJyc7CgkJCiAgICAgIHRtcD1lbmR0YWcrMjsKICAg
IH0KfQoKLyoqCiAgIFByaW50cyB0aGUgcGFyYW1ldGVyJ3MgY29udGVudCByZWN1cnNpdmVseSAo
dG8gc3Rkb3V0KS4KKi8Kdm9pZCBQYXJhbWV0ZXI6OnByaW50KHZvaWQpCnsKICBzdHJpbmcgczsK
ICBzZXJpYWxpemVHZXQocywxKTsKICBwcmludGYocy5jX3N0cigpKTsKfQoKLyoqCiAgIFByaW50
cyBodW1hbiByZWFkYmxlIEhUTUwtdmVyc2lvbiBvZiB0aGUgcGFyYW1ldGVyLgogICBOb3QgcmVj
dXJzaXZlLgoqLwp2b2lkIFBhcmFtZXRlcjo6aHVtYW5SZWFkYWJsZUhUTUwodm9pZCkKewogIGNv
bnN0IGNoYXIgKmRlc2M9Z2V0RGVzY3JpcHRpb24oKTsKICBpZiAoZGVzYyAmJiBkZXNjWzBdKQog
ICAgewogICAgICBwcmludGYoIjxCPiVzOiA8L0I+IixnZXREZXNjcmlwdGlvbigpKTsKICAgIH0K
ICBzd2l0Y2ggKGRhdGFUeXBlKQogICAgewogICAgY2FzZSB0eXBlX2Fic190aW1lOgogICAgICB7
Cgl0aW1lX3QgdGltZTE9Z2V0VmFsdWVBYnNUaW1lKCk7CglzdHJ1Y3QgdG0gKnRpbWUyPWxvY2Fs
dGltZSgmdGltZTEpOwoJcHJpbnRmKCIlLjRkLSUuMmQtJS4yZDxCUj5cbiIsIHRpbWUyLT50bV95
ZWFyKzE5MDAsCgkgICAgICAgdGltZTItPnRtX21vbisxLCB0aW1lMi0+dG1fbWRheSk7IAogICAg
ICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSB0eXBlX2FycmF5OgogICAgICB7CglwcmludGYoIjxU
QUJMRSBCT1JERVI9XCIwXCIgV0lEVEg9XCIxMDAlXCI+PFRSPjxURCBXSURUSD1cIjY1XCI+Iik7
CglQYXJhbWV0ZXIgKnRtcDsKCXRtcD1hcnJheTsKCXdoaWxlICh0bXApCgkgIHsKCSAgICB0bXAt
Pmh1bWFuUmVhZGFibGVIVE1MKCk7CgkgICAgdG1wPXRtcC0+bmV4dDsKCSAgfQoJcHJpbnRmKCI8
L1REPjwvVFI+PC9UQUJMRT48QlI+XG4iKTsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2Ug
dHlwZV9ib29sOgogICAgICBwcmludGYoIiVzPEJSPlxuIix2YWx1ZV9pbnQ/IlllcyI6Ik5vIik7
CiAgICAgIGJyZWFrOwogICAgY2FzZSB0eXBlX2NvbWJvOgogICAgICB7CglQYXJhbWV0ZXIgKnRt
cDsKCWlmIChhcnJheSkKCSAgewoJICAgIHRtcD1hcnJheTsKCSAgICB3aGlsZSAodG1wKQoJICAg
ICAgewoJCWlmICh0bXAtPmdldFZhbHVlSW50KCkpCgkJICB7CgkJICAgIHByaW50ZigiJXMgXG4i
LHRtcC0+Z2V0RGVzY3JpcHRpb24oKSk7CgkJICB9CgkJdG1wPXRtcC0+bmV4dDsKCSAgICAgIH0K
CSAgfQoJZWxzZQoJICB7CgkgICAgcHJpbnRmKCItIik7CgkgIH0KCXByaW50ZigiPEJSPlxuIik7
CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIHR5cGVfY29tYm9faXRlbToKICAgICAgYnJl
YWs7CiAgICBjYXNlIHR5cGVfZmxvYXQ6CiAgICAgIHByaW50ZigiJWY8QlI+XG4iLHZhbHVlX2Zs
b2F0KTsKICAgICAgYnJlYWs7CiAgICBjYXNlIHR5cGVfaW50OgogICAgICBwcmludGYoIiVkPEJS
PlxuIix2YWx1ZV9pbnQpOwogICAgICBicmVhazsKICAgIGNhc2UgdHlwZV9yZWxfdGltZToKICAg
ICAgewoJaWYgKGdldFNjYWxlKCk8NjApCgkgIHsKCSAgICBwcmludGYoIiVkIHNlY29uZHMgYmFj
ayBmcm9tIG5vdyB0byAiLGdldFZhbHVlUmVsVGltZSgpKTsKCSAgfQoJZWxzZQoJICBpZiAoZ2V0
U2NhbGUoKTwzNjAwKQoJICAgIHsKCSAgICAgIHByaW50ZigiJWQgbWludXRlcyBiYWNrIGZyb20g
bm93IHRvICIsZ2V0VmFsdWVSZWxUaW1lKCkvNjApOwoJICAgIH0KCSAgZWxzZQoJICAgIGlmIChn
ZXRTY2FsZSgpPDM2MDAqMjQpCgkgICAgICB7CgkJcHJpbnRmKCIlZCBob3VycyBiYWNrIGZyb20g
bm93IHRvICIsZ2V0VmFsdWVSZWxUaW1lKCkvMzYwMCk7CgkgICAgICB9CgkgICAgZWxzZQoJICAg
ICAgaWYgKGdldFNjYWxlKCk8MzYwMCoyNCo3KQoJCXsKCQkgIHByaW50ZigiJWQgZGF5cyBiYWNr
IGZyb20gbm93IHRvICIsZ2V0VmFsdWVSZWxUaW1lKCkvKDM2MDAqMjQpKTsKCQl9CgkgICAgICBl
bHNlCgkJaWYgKGdldFNjYWxlKCk8MzYwMCoyNCozNjUpCgkJICB7CgkJICAgIHByaW50ZigiJWQg
d2Vla3MgYmFjayBmcm9tIG5vdyB0byAiLGdldFZhbHVlUmVsVGltZSgpLygzNjAwKjI0KjcpKTsK
CQkgIH0KCQllbHNlCgkJICBpZiAoMSkKCQkgICAgewoJCSAgICAgIHByaW50ZigiJWQgeWVhcnMg
YmFjayBmcm9tIG5vdyB0byAiLGdldFZhbHVlUmVsVGltZSgpLygzNjAwKjI0KjM2NSkpOwoJCSAg
ICB9CgkKCXRpbWVfdCB0aW1lMT10aW1lKE5VTEwpLWdldFZhbHVlUmVsVGltZSgpOwoJc3RydWN0
IHRtICp0aW1lMj1sb2NhbHRpbWUoJnRpbWUxKTsKCXByaW50ZigiJS40ZC0lLjJkLSUuMmQ8QlI+
XG4iLCB0aW1lMi0+dG1feWVhcisxOTAwLAoJICAgICAgIHRpbWUyLT50bV9tb24rMSwgdGltZTIt
PnRtX21kYXkpOyAKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgdHlwZV9zdHJpbmc6CiAg
ICAgIHByaW50ZigiJXM8QlI+XG4iLHZhbHVlX3N0cmluZz92YWx1ZV9zdHJpbmc6IiIpOwogICAg
ICBicmVhazsKICAgIH0KCn0KCi8qKgogICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgQ29uZmln
dXJhYmxlOjpTZXJpYWxpemVTZXQgdG8KICAgYWRkIFBhcmFtZXRlcnMgdG8gdGhlIGFycmF5LiBJ
ZiB0aGUgcGFyYW1ldGVyIGRvZXMgbm90IGV4aXN0CiAgIGEgbmV3IG9uZSBpcyBjcmVhdGVkLiBB
bGwgaW5mb3JtYWlvbiByZWdhcmRpbmcgdHlwZSBpcyBsb3N0LAogICBzbyBpdCBkZWZhdWx0cyB0
byBzdHJpbmcuCiovCnZvaWQgUGFyYW1ldGVyOjpzZXRBcnJheShjaGFyICpwYXJfbmFtZSwgY2hh
ciAqcGFyX3ZhbHVlKQp7CiAgUGFyYW1ldGVyICp0PWZpbmRBbmRTZXRQYXJhbWV0ZXIocGFyX25h
bWUscGFyX3ZhbHVlKTsKICBpZiAoIXQpCiAgICB7CiAgICAgIHQ9bmV3IFBhcmFtZXRlcihwYXJf
bmFtZSk7CiAgICAgIHQtPnNldE5hbWUocGFyX25hbWUpOwogICAgICBpZiAoZ2V0VHlwZSgpPT10
eXBlX2FycmF5KQoJewoJICB0LT5zZXRUeXBlKHR5cGVfc3RyaW5nKTsKCSAgdC0+c2V0VmFsdWVT
dHJpbmcocGFyX3ZhbHVlKTsKCX0KICAgICAgZWxzZQoJewoJICB0LT5zZXRUeXBlKHR5cGVfY29t
Ym9faXRlbSk7CgkgIHQtPnNldFZhbHVlSW50KGF0b2kocGFyX3ZhbHVlKSk7CgkgIHQtPnNldERl
c2NyaXB0aW9uKHBhcl9uYW1lKTsKCX0KICAgICAgYWRkQXNBcnJheSh0KTsKICAgIH0KfQoKLyoq
CiAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBDb25maWd1cmFibGU6OmxvYWRGcm9tSFRNTCB0
byBzZXQKICAgY2hlY2tlZCBvbiBjb21ibyBpdGVtcy4gSWYgdGhlIFBhcmFtZXRlciBkb2VzIG5v
dCBleGlzdCBpdCB3aWxsCiAgIGJlIGNyZWF0ZWQuCiAgIEBwYXJhbSBwYXJfbmFtZSBUaGUgbmFt
ZSBvZiB0aGUgcGFyYW1ldGVyIHRvIGxvb2sgdXAuIFdpbGwgYWxzbyAKICAgYmUgdXNlZCBhcyBk
ZXNjcmlwdGlvbiB3aGVuIGNyZWF0aW5nIGEgbmV3IFBhcmFtZXRlciBvYmplY3QuCiovCnZvaWQg
UGFyYW1ldGVyOjpjaGVja0NvbWJvKGNoYXIgKnBhcl9uYW1lKQp7CiAgUGFyYW1ldGVyICp0PWZp
bmRQYXJhbWV0ZXJCeU5hbWUocGFyX25hbWUpOwogIGlmICghdCkKICAgIHsKICAgICAgdD1uZXcg
UGFyYW1ldGVyKHBhcl9uYW1lLHBhcl9uYW1lLHR5cGVfY29tYm9faXRlbSk7CiAgICAgIHQtPnNl
dEdyb3VwKGdldEdyb3VwKCkpOwogICAgICBhZGRBc0FycmF5KHQpOwogICAgfQogIHQtPnNldFZh
bHVlSW50KDEpOwp9CgovKioKICAgR2VuZXJhdGVzIGEgY29tcGxldGUgYXJyYXktdHJlZSBmcm9t
IGEgZmlsZS4KICAgRklMRSBGT1JNQVQ6IHR5cGUsIG5hbWUsIGRlc2NyaXB0aW9uICAobGluZSBi
eSBsaW5lKS4KICAgQHBhcmFtIGZuYW1lIEEgY29tcGxldGUgZmlsZW5hbWUgdG8gYSBmaWxlIGNv
bnRhaW5pbmcgbGluZXMKICAgb2YgdGV4dCBhcyBzcGVjaWZpZWQgYWJvdmUuCiAgIEByZXR1cm4g
VGhlIG51bWJlciBvZiBzdWJpdGVtcyBhZGRlZCwgLTEgaWYgZmlsZSBjb3VsZCBub3QKICAgYmUg
b3BlbmVkLgoqLwppbnQgUGFyYW1ldGVyOjpnZW5lcmF0ZUZyb21GaWxlKGNoYXIgKmZuYW1lKQp7
CiAgaW50IHJlcz0wOwoKICBGSUxFICpmaW49Zm9wZW4oZm5hbWUsInIiKTsKCiAgaWYgKCFmaW4p
CiAgICB7CiAgICAgIC8qIEJBRCBGSUxFICovCiAgICAgIHJlcz0tMTsKICAgIH0KICBlbHNlCiAg
ICB7CiAgICAgIC8qIEdPT0QgRklMRSAqLwogICAgICBjaGFyIGJ1ZlsyMDAwXSwqcCwqcTsKICAg
ICAgd2hpbGUgKGZnZXRzKGJ1ZiwyMDAwLGZpbikpCgl7CgkgIHA9c3RyY2hyKGJ1ZiwnLCcpOwoJ
ICBpZiAocCkKCSAgICB7CgkgICAgICAqcD0wOwoJICAgICAgcCsrOwoJICAgICAgcT1zdHJjaHIo
cCwnLCcpOwoJICAgICAgaWYgKHEpCgkJewoJCSAgKnE9MDsKCQkgIHErKzsKCQkgIHFbc3RybGVu
KHEpXT0wOyAvKiByZW1vdmUgXG4gKi8KCQkgIGFkZEFzQXJyYXkobmV3IFBhcmFtZXRlcihxLHAs
YXRvaShidWYpKSk7CgkJfQoJICAgIH0KCX0KICAgIH0KCiAgcmV0dXJuIHJlczsKfQoKLyoqCiAg
IFJ1bnMgY2hlY2tzIG9mIHZhbHVlIHZlcnN1cyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBsaW1p
dHMuCiAgIEBwYXJhbSBhdXRvZml4IENyb3BzIHZhbHVlcyB0byB0aGVpciByZXNwZWN0aXZlIGxp
bWl0LgogICBAcGFyYW0gcmVjdXJzaXZlIElmIHRydWUgdGhlbiB0aGUgdmFsaWRhdGlvbiBpcyBy
dW4gb24gYWxsIGNoaWxkCiAgIGFuZCBicm90aGVyIHBhcmFtZXRlcnMuCiAgIEByZXR1cm4gQSBz
dHJpbmcgd2hpY2ggY2FsbGVyIG11c3QgZGVsZXRlIGNvbnRhaW5pbmcgdGhlIHN1bSBvZgogICBh
bGwgdmlvbGF0ZWQgbGltaXRzLgoqLwpjaGFyICpQYXJhbWV0ZXI6OnZhbGlkYXRlTGltaXRzKGlu
dCBhdXRvZml4LGludCByZWN1cnNpdmU9MCkKewogIGlmICgwKQogICAgewogICAgICBwcmludGYo
IjxIUj48Qj5QYXJhbWV0ZXI6IDwvQj4lczxCUj4iLGRlc2NyaXB0aW9uKTsKICAgICAgcHJpbnRm
KCI8Qj5hdXRvZml4OiA8L0I+JWQ8QlI+IixhdXRvZml4KTsKICAgICAgcHJpbnRmKCI8Qj5JbnQ6
PC9CPiVkIDxCPkZsb2F0OjwvQj4lMS43ZjxCUj4iLHZhbHVlX2ludCx2YWx1ZV9mbG9hdCk7CiAg
ICAgIHByaW50ZigiPEI+TGltaXQ6IDwvQj5bJTEuOWYsJTEuOWZdPEJSPiIsbWluTGltaXQsbWF4
TGltaXQpOwogICAgICBwcmludGYoIjxCPkxpbWl0IGNoZWNrOiA8L0I+WyVzLCVzXTxCUj4iLGNo
ZWNrTWluTGltaXQ/IlllcyEiOiJObyEiLAoJICAgICBjaGVja01heExpbWl0PyJZZXMhIjoiTm8h
Iik7CiAgICB9CiAgY2hhciAqcmVzPU5VTEw7CiAgaWYgKHJlY3Vyc2l2ZSkKICAgIHsKICAgICAg
Y2hhciAqcD1OVUxMOwogICAgICBpZiAoYXJyYXkpIAoJewoJICByZXM9YXJyYXktPnZhbGlkYXRl
TGltaXRzKGF1dG9maXgscmVjdXJzaXZlKTsKCX0KICAgICAgaWYgKG5leHQpCgl7CgkgIHA9bmV4
dC0+dmFsaWRhdGVMaW1pdHMoYXV0b2ZpeCxyZWN1cnNpdmUpOwoJfQogICAgICBpZiAoIXJlcyAm
JiBwKQoJewoJICByZXM9cDsKCSAgcD1OVUxMOwoJfQogICAgICBpZiAocmVzICYmIHApCgl7Cgkg
IGNoYXIgKnQ9bmV3IGNoYXJbc3RybGVuKHJlcykrMStzdHJsZW4ocCldOwoJICBzdHJjcHkodCxy
ZXMpOwoJICBzdHJjYXQodCxwKTsKCSAgZGVsZXRlIFtdIHJlczsKCSAgZGVsZXRlIFtdIHA7Cgkg
IHJlcz10OwoJICBwPU5VTEw7Cgl9CiAgICB9CiAgaWYgKGNoZWNrTWluTGltaXQpCiAgICB7CiAg
ICAgIGNoYXIgKmE9TlVMTDsKICAgICAgc3dpdGNoIChkYXRhVHlwZSkKCXsKCWNhc2UgdHlwZV9h
YnNfdGltZToKCSAgaWYgKGdldFZhbHVlQWJzVGltZSgpPG1pbkxpbWl0KQoJICAgIHsKCSAgICAg
IGlmIChhdXRvZml4KQoJCXsKCQkgIHNldFZhbHVlQWJzVGltZSgoaW50KW1pbkxpbWl0KTsKCQl9
CgkgICAgICBlbHNlCgkJewoJCSAgYT1uZXcgY2hhclszMDBdOwoJCSAgdGltZV90IHR0PShpbnQp
bWluTGltaXQ7CgkJICBzcHJpbnRmKGEsIjxCPiVzPC9CPjxCUj5WaW9sYXRlcyBsb3dlciBsaW1p
dCBvZiAlcy48QlI+IiwKCQkJICBkZXNjcmlwdGlvbixjdGltZSgmdHQpKTsKCQl9CgkgICAgfQoJ
ICBicmVhazsKCWNhc2UgdHlwZV9mbG9hdDoKCSAgaWYgKHZhbHVlX2Zsb2F0PG1pbkxpbWl0KQoJ
ICAgIHsKCSAgICAgIGlmIChhdXRvZml4KQoJCXsKCQkgIHNldFZhbHVlRmxvYXQobWluTGltaXQp
OwoJCX0KCSAgICAgIGVsc2UKCQl7CgkJICBhPW5ldyBjaGFyWzMwMF07CgkJICBzcHJpbnRmKGEs
IjxCPiVzPC9CPjxCUj5WaW9sYXRlcyBsb3dlciBsaW1pdCBvZiAlMS4zZi48QlI+IiwKCQkJICBk
ZXNjcmlwdGlvbixtaW5MaW1pdCk7CgkJfQoJICAgIH0KCSAgYnJlYWs7CgljYXNlIHR5cGVfaW50
OgoJICBpZiAodmFsdWVfaW50PG1pbkxpbWl0KQoJICAgIHsKCSAgICAgIGlmIChhdXRvZml4KQoJ
CXsKCQkgIHZhbHVlX2ludD0oaW50KW1pbkxpbWl0OwoJCX0KCSAgICAgIGVsc2UKCQl7CgkJICBh
PW5ldyBjaGFyWzMwMF07CgkJICBzcHJpbnRmKGEsIjxCPiVzPC9CPjxCUj5WaW9sYXRlcyBsb3dl
ciBsaW1pdCBvZiAlZC48QlI+IiwKCQkJICBkZXNjcmlwdGlvbiwoaW50KW1pbkxpbWl0KTsKCQl9
CgkgICAgfQoJICBicmVhazsKCWNhc2UgdHlwZV9yZWxfdGltZToKCSAgaWYgKHZhbHVlX3RpbWU8
bWluTGltaXQpCgkgICAgewoJICAgICAgaWYgKGF1dG9maXgpCgkJewoJCSAgdmFsdWVfdGltZT0o
aW50KW1pbkxpbWl0OwoJCX0KCSAgICAgIGVsc2UKCQl7CgkJICBhPW5ldyBjaGFyWzMwMF07CgkJ
ICBzcHJpbnRmKGEsCgkJICAgICAiPEI+JXM8L0I+PEJSPlZpb2xhdGVzIGxvd2VyIGxpbWl0IG9m
ICUxLjFmIGRheXMuPEJSPiIsCgkJCSAgZGVzY3JpcHRpb24sbWluTGltaXQvKDI0LjBmKjM2MDAu
MGYpKTsKCQl9CgkgICAgfQoJICBicmVhazsKCWNhc2UgdHlwZV9zdHJpbmc6CgkgIGlmICghdmFs
dWVfc3RyaW5nIHx8IHN0cmxlbih2YWx1ZV9zdHJpbmcpPG1pbkxpbWl0KQoJICAgIHsKCSAgICAg
IGlmICh2YWx1ZV9zdHJpbmcgJiYgYXV0b2ZpeCkKCQl7CgkJICBjaGFyIGJ1Zls4MDBdOwoJCSAg
c3ByaW50ZihidWYsIiVzXyVkIix2YWx1ZV9zdHJpbmcsdGltZShOVUxMKSk7CgkJICBzZXRWYWx1
ZVN0cmluZyhidWYpOwoJCX0KCSAgICAgIGVsc2UKCQl7CgkJICBhPW5ldyBjaGFyWzMwMF07CgkJ
ICBzcHJpbnRmKGEsCgkJICAiPEI+JXM8L0I+PEJSPlZpb2xhdGVzIGxvd2VyIGxpbWl0IG9mICVk
IGNoYXJhY3RlcnMuPEJSPiIsCgkJICAgICAgZGVzY3JpcHRpb24sKGludCltaW5MaW1pdCk7CgkJ
fQoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGlmIChhKQoJewoJICBpZiAocmVzKQoJICAgIHsK
CSAgICAgIGNoYXIgKnQ9bmV3IGNoYXJbc3RybGVuKHJlcykrMStzdHJsZW4oYSldOwoJICAgICAg
c3RyY3B5KHQscmVzKTsKCSAgICAgIHN0cmNhdCh0LGEpOwoJICAgICAgZGVsZXRlIFtdIHJlczsK
CSAgICAgIGRlbGV0ZSBbXSBhOwoJICAgICAgcmVzPXQ7CgkgICAgfQoJICBlbHNlCgkgICAgewoJ
ICAgICAgcmVzPWE7CgkgICAgfQoJfQogICAgfQogIGlmIChjaGVja01heExpbWl0KQogICAgewog
ICAgICBjaGFyICphPU5VTEw7CiAgICAgIHN3aXRjaCAoZGF0YVR5cGUpCgl7CgljYXNlIHR5cGVf
YWJzX3RpbWU6CgkgIGlmICh2YWx1ZV9pbnQ+bWF4TGltaXQpCgkgICAgewoJICAgICAgaWYgKGF1
dG9maXgpCgkJewoJCSAgdmFsdWVfaW50PShpbnQpbWF4TGltaXQ7CgkJfQoJICAgICAgZWxzZQoJ
CXsKCQkgIGE9bmV3IGNoYXJbMzAwXTsKCQkgIHRpbWVfdCB0dD0oaW50KW1heExpbWl0OwoJCSAg
c3ByaW50ZihhLCI8Qj4lczwvQj48QlI+VmlvbGF0ZXMgdXBwZXIgbGltaXQgb2YgJXMuPEJSPiIs
CgkJCSAgZGVzY3JpcHRpb24sY3RpbWUoJnR0KSk7CgkJfQoJICAgIH0KCSAgYnJlYWs7CgljYXNl
IHR5cGVfZmxvYXQ6CgkgIGlmICh2YWx1ZV9mbG9hdD5tYXhMaW1pdCkKCSAgICB7CgkgICAgICBp
ZiAoYXV0b2ZpeCkKCQl7CgkJICB2YWx1ZV9mbG9hdD1tYXhMaW1pdDsKCQl9CgkgICAgICBlbHNl
CgkJewoJCSAgYT1uZXcgY2hhclszMDBdOwoJCSAgc3ByaW50ZihhLCI8Qj4lczwvQj48QlI+Vmlv
bGF0ZXMgdXBwZXIgbGltaXQgb2YgJTEuM2YuPEJSPiIsCgkJCSAgZGVzY3JpcHRpb24sbWF4TGlt
aXQpOwoJCX0KCSAgICB9CgkgIGJyZWFrOwoJY2FzZSB0eXBlX2ludDoKCSAgaWYgKHZhbHVlX2lu
dD5tYXhMaW1pdCkKCSAgICB7CgkgICAgICBpZiAoYXV0b2ZpeCkKCQl7CgkJICB2YWx1ZV9pbnQ9
KGludCltYXhMaW1pdDsKCQl9CgkgICAgICBlbHNlCgkJewoJCSAgYT1uZXcgY2hhclszMDBdOwoJ
CSAgc3ByaW50ZihhLCI8Qj4lczwvQj48QlI+VmlvbGF0ZXMgdXBwZXIgbGltaXQgb2YgJWQuPEJS
PiIsCgkJCSAgZGVzY3JpcHRpb24sKGludCltYXhMaW1pdCk7CgkJfQoJICAgIH0KCSAgYnJlYWs7
CgljYXNlIHR5cGVfcmVsX3RpbWU6CgkgIGlmICh2YWx1ZV90aW1lPm1heExpbWl0KQoJICAgIHsK
CSAgICAgIGlmIChhdXRvZml4KQoJCXsKCQkgIHZhbHVlX3RpbWU9KGludCltYXhMaW1pdDsKCQl9
CgkgICAgICBlbHNlCgkJewoJCSAgYT1uZXcgY2hhclszMDBdOwoJCSAgc3ByaW50ZihhLAogICAg
ICAgICAgICAgICAiPEI+JXM8L0I+PEJSPlZpb2xhdGVzIHVwcGVyIGxpbWl0IG9mICUxLjFmIGRh
eXMuPEJSPiIsCgkJCSAgZGVzY3JpcHRpb24sbWF4TGltaXQvKDI0LjBmKjM2MDAuMGYpKTsKCQl9
CgkgICAgfQoJICBicmVhazsKCWNhc2UgdHlwZV9zdHJpbmc6CgkgIGlmICh2YWx1ZV9zdHJpbmcg
JiYgc3RybGVuKHZhbHVlX3N0cmluZyk+bWF4TGltaXQpCgkgICAgewoJICAgICAgaWYgKGF1dG9m
aXgpCgkJewoJCSAgdmFsdWVfc3RyaW5nWyhpbnQpbWF4TGltaXQtMV09MDsKCQl9CgkgICAgICBl
bHNlCgkJewoJCSAgYT1uZXcgY2hhclszMDBdOwoJCSAgc3ByaW50ZihhLAoJICAiPEI+JXM8L0I+
PEJSPlZpb2xhdGVzIHVwcGVyIGxpbWl0IG9mICVkIGNoYXJhY3RlcnMuPEJSPiIsCgkJCSAgZGVz
Y3JpcHRpb24sKGludCltYXhMaW1pdCk7CgkJfQoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGlm
IChhKQoJewoJICBpZiAocmVzKQoJICAgIHsKCSAgICAgIGNoYXIgKnQ9bmV3IGNoYXJbc3RybGVu
KHJlcykrMStzdHJsZW4oYSldOwoJICAgICAgc3RyY3B5KHQscmVzKTsKCSAgICAgIHN0cmNhdCh0
LGEpOwoJICAgICAgZGVsZXRlIFtdIHJlczsKCSAgICAgIGRlbGV0ZSBbXSBhOwoJICAgICAgcmVz
PXQ7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgcmVzPWE7CgkgICAgfQoJfQogICAgfQog
IHJldHVybiByZXM7Cn0K