[Xitami] SSI crash under WinXP

Gord Tanner xitami@lists.xitami.org
Sat, 30 Oct 2004 14:36:11 -0500


------=_Part_1778_25286245.1099164971055
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

I include the section of code from xixssi.c surrounding line 570. (and
attach the whole file)
I don't know much C,

Also, this is the exact SSI command that causes the failure.
<!--#include file="../cgi-bin/last_post.txt" -->

If I change it to:

<!--#include file="last_post.txt" -->

and make sure the last_post.txt file is located in the webroot
directory, it no longer causes a crash, but it doesn't include the
file.

/*****************************   OPEN SSI FILE   *****************************/

MODULE open_ssi_file (THREAD *thread)
{
    time_t
        file_time;
        
    tcb = thread-> tcb;                 /*  Point to thread's context        */

    ASSERT (tcb-> file_name);                          <<<----------- 
Line 570  ----------------

    /* Check if file is not already open                                     */
    if (sym_get_value (tcb-> open_file, tcb-> file_name, NULL) != NULL)
      {
        sprintf (error, "%s is already open", tcb-> file_name);
        raise_exception (command_error_event);
        return;
      }

    tcb-> file = fopen (tcb-> file_name, "rb");
    if (tcb-> file == NULL)
      {
        sprintf (error, "Can't open ssi file %s", tcb-> file_name);
        raise_exception (error_event);
      }
    else
      {
        sym_assume_symbol (tcb-> open_file, tcb-> file_name, "");

        file_time = get_file_time (tcb-> file_name);
        tcb-> file_date = timer_to_date (file_time);
        tcb-> file_time = timer_to_time (file_time);
      }
}

------=_Part_1778_25286245.1099164971055
Content-Type: application/octet-stream; name="xixssi.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="xixssi.c"

Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0qDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAqICB4aXhzc2ku
YyAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKg0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogKiAgQ29weXJpZ2h0IChjKSAxOTkx
LTIwMDMgaU1hdGl4IENvcnBvcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoN
CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKg0KICogIC0tLS0tLS0tLS0tLS0tLS0tLSBHUEwgTGljZW5z
ZWQgU291cmNlIENvZGUgLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAqDQogKiAgaU1hdGl4
IG1ha2VzIHRoaXMgc29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCAgICAg
ICAgICAgICAgICoNCiAqICBQdWJsaWMgTGljZW5zZSAoR1BMKSBsaWNlbnNlIGZvciBvcGVuIHNv
dXJjZSBwcm9qZWN0cy4gIEZvciAgICAgICAgICAgICAgKg0KICogIGRldGFpbHMgb2YgdGhlIEdQ
TCBsaWNlbnNlIHBsZWFzZSBzZWUgd3d3LmdudS5vcmcgb3IgcmVhZCB0aGUgICAgICAgICAgICAq
DQogKiAgZmlsZSBsaWNlbnNlLmdwbCBwcm92aWRlZCBpbiB0aGlzIHBhY2thZ2UuICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICoNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICogIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
ICAgICAgICAgICAqDQogKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgICAgICAgICAgICoNCiAqICBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAgICAgICAgICAg
Kg0KICogIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LiAgICAgICAgICAgICAgICAgICAgICAqDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAqICBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwgICAgICAgICAgKg0KICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICAqDQogKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAg
ICoNCiAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKg0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljICAg
ICAgICAgICAgICAgICoNCiAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtIGluIHRo
ZSBmaWxlICdsaWNlbnNlLmdwbCc7IGlmICAgICAgICAgICAgKg0KICogIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlICAgICAgICAgICAg
ICAqDQogKiAgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICogIFlv
dSBjYW4gYWxzbyBsaWNlbnNlIHRoaXMgc29mdHdhcmUgdW5kZXIgaU1hdGl4J3MgR2VuZXJhbCBU
ZXJtcyAgICAgICAgICAqDQogKiAgb2YgQnVzaW5lc3MgKEdUQikgZm9yIGNvbW1lcmNpYWwgcHJv
amVjdHMuICBJZiB5b3UgaGF2ZSBub3QgICAgICAgICAgICAgICoNCiAqICBleHBsaWNpdGx5IGxp
Y2Vuc2VkIHRoaXMgc29mdHdhcmUgdW5kZXIgdGhlIGlNYXRpeCBHVEIgeW91IG1heSAgICAgICAg
ICAgKg0KICogIG9ubHkgdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UuICAgICAgICAgICAqDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAqICBG
b3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VuZCBhbiBlbWFpbCB0byBpbmZvQGltYXRpeC5jb20uICAg
ICAgICAgICAgICAgICAgKg0KICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAqDQogKj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PSovDQovKg0KICAgIFN5bm9wc2lzOiAgIFBhcnNlIEhUTUwgcGFnZSB3aXRoIFNTSSB0YWdz
Lg0KDQoqLw0KI2luY2x1ZGUgInNtdGRlZm4uaCIgICAgICAgICAgICAgICAgICAgIC8qICBTTVQg
ZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAqLw0KI2luY2x1ZGUgInNtdGh0dHBsLmgiICAg
ICAgICAgICAgICAgICAgIC8qICBTTVQgSFRUUCBkZWZpbml0aW9ucyAgICAgICAgICAgICAqLw0K
DQovKi0gRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCiNpZmRlZiBBR0VOVF9OQU1FDQojICB1bmRlZiBB
R0VOVF9OQU1FDQojZW5kaWYNCg0KI2RlZmluZSBBR0VOVF9OQU1FICAgInhpeHNzaSIgICAgICAg
ICAgIC8qICBPdXIgcHVibGljIG5hbWUgICAgICAgICAgICAgICAgICAqLw0KDQojZGVmaW5lIEJV
RkZFUl9TSVpFICAxMDI0DQoNCiNkZWZpbmUgU1NJX0NPTkZJRyh2YWwsIGRlZikgIHN5bV9nZXRf
dmFsdWUgKHRjYi0+IGNvbmZpZywgdmFsLCBkZWYpDQoNCi8qIERlZmF1bHQgU1NJIHBhcmFtZXRl
cnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8N
CiNkZWZpbmUgU1NJX0VSUl9GT1JNQVQgICI8UD5bWGl0YW1pIFNTSTogXCIlc1wiIHByb2R1Y2Vk
IGVycm9yc10iDQojZGVmaW5lIFNTSV9USU1FX0ZPUk1BVCAiJUEsICVkLSViLSVZICVIOiVNOiVT
ICVaIg0KI2RlZmluZSBTU0lfU0laRUZNVCAgICAgImJ5dGVzIg0KI2RlZmluZSBTU0lfRVhFQyAg
ICAgICAgIjAiDQojZGVmaW5lIFNTSV9USU1FT1VUICAgICAiMzAiDQojZGVmaW5lIFNTSV9DR0lf
TU9OSVRPUiAiMjAwIg0KDQovKiBEZWZhdWx0IFNTSSBlcnJvciBtZXNzYWdlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQojZGVmaW5lIFNTSV9NU0df
RVhFQ19QUk9URUNUICIjZXhlYyBjb21tYW5kIG5vdCBwZXJtaXR0ZWQgZm9yIHNlY3VyaXR5IHJl
YXNvbnM7Ig0KDQovKiBTU0kgc3ludGF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQojZGVmaW5lIEJFR0lOX1RPS0VOICAg
ICAgICAgIjwhLS0jIg0KI2RlZmluZSBFTkRfVE9LRU4gICAgICAgICAgICItLT4iDQojZGVmaW5l
IEVDSE9fVkFSSUFCTEVfVE9LRU4gInZhcj1cIiINCg0KI2RlZmluZSBCRUdJTl9TSVpFICAgICAg
ICAgIDUNCiNkZWZpbmUgRU5EX1NJWkUgICAgICAgICAgICAzDQojZGVmaW5lIEVDSE9fVkFSX1NJ
WkUgICAgICAgNQ0KDQovKiBTdHJmdGltZSBmb3JtYXQNCiAgICAlYSAgIEFiYnJldmlhdGVkIHdl
ZWtkYXkgbmFtZQ0KICAgICVBICAgRnVsbCB3ZWVrZGF5IG5hbWUNCiAgICAlYiAgIEFiYnJldmlh
dGVkIG1vbnRoIG5hbWUNCiAgICAlQiAgIEZ1bGwgbW9udGggbmFtZQ0KICAgICVjICAgRGF0ZSBh
bmQgdGltZSByZXByZXNlbnRhdGlvbiBhcHByb3ByaWF0ZSBmb3IgbG9jYWxlDQogICAgJWQgICBE
YXkgb2YgbW9udGggYXMgZGVjaW1hbCBudW1iZXIgKDAxIC0gMzEpDQogICAgJUggICBIb3VyIGlu
IDI0LWhvdXIgZm9ybWF0ICgwMCAtIDIzKQ0KICAgICVJICAgSG91ciBpbiAxMi1ob3VyIGZvcm1h
dCAoMDEgLSAxMikNCiAgICAlaiAgIERheSBvZiB5ZWFyIGFzIGRlY2ltYWwgbnVtYmVyICgwMDEg
LSAzNjYpDQogICAgJW0gICBNb250aCBhcyBkZWNpbWFsIG51bWJlciAoMDEgLSAxMikNCiAgICAl
TSAgIE1pbnV0ZSBhcyBkZWNpbWFsIG51bWJlciAoMDAgLSA1OSkNCiAgICAlcCAgIEN1cnJlbnQg
bG9jYWxlknMgQS5NLi9QLk0uIGluZGljYXRvciBmb3IgMTItaG91ciBjbG9jaw0KICAgICVTICAg
U2Vjb25kIGFzIGRlY2ltYWwgbnVtYmVyICgwMCAtIDU5KQ0KICAgICVVICAgV2VlayBvZiB5ZWFy
IGFzIGRlY2ltYWwgbnVtYmVyLCB3aXRoIFN1bmRheSBhcyBmaXJzdCBkYXkgb2Ygd2VlayAoMDAg
LSA1MSkNCiAgICAldyAgIFdlZWtkYXkgYXMgZGVjaW1hbCBudW1iZXIgKDAgLSA2OyBTdW5kYXkg
aXMgMCkNCiAgICAlVyAgIFdlZWsgb2YgeWVhciBhcyBkZWNpbWFsIG51bWJlciwgd2l0aCBNb25k
YXkgYXMgZmlyc3QgZGF5IG9mIHdlZWsgKDAwIC0gNTEpDQogICAgJXggICBEYXRlIHJlcHJlc2Vu
dGF0aW9uIGZvciBjdXJyZW50IGxvY2FsZQ0KICAgICVYICAgVGltZSByZXByZXNlbnRhdGlvbiBm
b3IgY3VycmVudCBsb2NhbGUNCiAgICAleSAgIFllYXIgd2l0aG91dCBjZW50dXJ5LCBhcyBkZWNp
bWFsIG51bWJlciAoMDAgLSA5OSkNCiAgICAlWSAgIFllYXIgd2l0aCBjZW50dXJ5LCBhcyBkZWNp
bWFsIG51bWJlcg0KICAgICV6LCAlWiAgIFRpbWUtem9uZSBuYW1lIG9yIGFiYnJldmlhdGlvbjsg
bm8gY2hhcmFjdGVycyBpZiB0aW1lIHpvbmUgaXMgdW5rbm93bg0KICAgICUlICAgUGVyY2VudCBz
aWduDQoqLw0KDQovKi0gU3RydWN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCnR5cGVkZWYgc3RydWN0IF9zc2lf
Y29tbWFuZCAgICAgICAgICAgICAvKiAgU1NJIENvbW1hbmQgc3RydWN0dXJlICAgICAgICAgICAg
Ki8NCnsNCiAgICBzdHJ1Y3QgX3NzaV9jb21tYW5kDQogICAgICAgICAqbmV4dCwgKnByZXY7ICAg
ICAgICAgICAgICAgICAgLyogICAgUG9pbnRlciBmb3IgbGlua2VkIGxpc3QgICAgICAgICovDQog
ICAgY2hhciAqY29tbWFuZDsgICAgICAgICAgICAgICAgICAgICAgLyogICAgU1NJIGNvbW1hbmQg
ICAgICAgICAgICAgICAgICAgICovDQogICAgY2hhciAqcGFyYW07ICAgICAgICAgICAgICAgICAg
ICAgICAgLyogICAgQ29tbWFuZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICovDQogICAgbG9uZyBi
ZWdpbl9wb3M7ICAgICAgICAgICAgICAgICAgICAgLyogICAgUG9zaXRpb24gb2YgY29tbWFuZCBi
ZWdpbiAgICAgICovDQogICAgbG9uZyBlbmRfcG9zOyAgICAgICAgICAgICAgICAgICAgICAgLyog
ICAgUG9zaXRpb24gb2YgY29tbWFuZCBlbmQgICAgICAgICovDQogICAgY2hhciAqcmVzdWx0OyAg
ICAgICAgICAgICAgICAgICAgICAgLyogICAgUmVzdWx0IG9mIGNvbW1hbmQgZXhlY3V0aW9uICAg
ICovDQogICAgbG9uZyByZXN1bHRfc2l6ZTsgICAgICAgICAgICAgICAgICAgLyogICAgU2l6ZSBv
ZiByZXN1bHQgICAgICAgICAgICAgICAgICovDQp9IFNTSUNNRDsNCg0KDQp0eXBlZGVmIHN0cnVj
dCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIFRocmVhZCBjb250ZXh0IGJsb2NrOiAgICAg
ICAgICAgICovDQp7DQogICAgZXZlbnRfdA0KICAgICAgICB0aHJlYWRfdHlwZTsgICAgICAgICAg
ICAgICAgICAgIC8qICAgIFRocmVhZCB0eXBlIGluZGljYXRvciAgICAgICAgICAqLw0KICAgIHN0
cnVjdF9zbXRfd3N4X3JlcXVlc3QNCiAgICAgICAgKnJlcXVlc3Q7ICAgICAgICAgICAgICAgICAg
ICAgICAvKiAgICBJbmNvbWluZyBzbXRfd3N4IHJlcXVlc3QgICAgICAgKi8NCiAgICBTWU1UQUIN
CiAgICAgICAgKm9wZW5fZmlsZSwgICAgICAgICAgICAgICAgICAgICAvKiAgICBUYWJsZSBvZiBv
cGVuZWQgZmlsZSAgICAgICAgICAgKi8NCiAgICAgICAgKmNvbmZpZywgICAgICAgICAgICAgICAg
ICAgICAgICAvKiAgICBDb25maWd1cmF0aW9uIHZhbHVlICAgICAgICAgICAgKi8NCiAgICAgICAg
KmVudmlyb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAgICBFbnZpcm9uZW1lbnQgdmFsdWUg
ICAgICAgICAgICAgKi8NCiAgICBRSUQNCiAgICAgICAgc2VuZGVyX3FpZDsgICAgICAgICAgICAg
ICAgICAgICAvKiAgICBTZW5kZXIgdGhyZWFkIFFJRCAgICAgICAgICAgICAgKi8NCiAgICBjaGFy
DQogICAgICAgICpjZ2lfc3Rkb3V0LCAgICAgICAgICAgICAgICAgICAgLyogICAgRmlsZSBuYW1l
IG9mIENHSSBzdGRvdXQgICAgICAgICovDQogICAgICAgICoqY2dpX2Vudmlyb24sICAgICAgICAg
ICAgICAgICAgLyogICAgQ0dJIGVudmlyb25tZW50IGJ1ZmZlciAgICAgICAgICovDQogICAgICAg
ICpyZXN1bHQsICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgSFRNTCByZXN1bHQgYnVmZmVy
ICAgICAgICAgICAgICovDQogICAgICAgICpidWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAg
LyogICAgV29ya2luZyBidWZmZXIgICAgICAgICAgICAgICAgICovDQogICAgICAgICpmaWxlX25h
bWU7ICAgICAgICAgICAgICAgICAgICAgLyogICAgU1NJIGZpbGUgbmFtZSAgICAgICAgICAgICAg
ICAgICovDQogICAgbG9uZw0KICAgICAgICB0aW1lb3V0LCAgICAgICAgICAgICAgICAgICAgICAg
IC8qICAgIFNTSSB0aW1lIG91dCAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICByZXN1bHRf
c2l6ZSwgICAgICAgICAgICAgICAgICAgIC8qICAgIFNpemUgb2YgcmVzdWx0ICAgICAgICAgICAg
ICAgICAqLw0KICAgICAgICBmaWxlX2RhdGUsICAgICAgICAgICAgICAgICAgICAgIC8qICAgIFNT
SSBmaWxlIGRhdGUgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICBmaWxlX3RpbWUsICAgICAg
ICAgICAgICAgICAgICAgIC8qICAgIFNTSSBmaWxlIHRpbWUgICAgICAgICAgICAgICAgICAqLw0K
ICAgICAgICBmaWxlX3NpemU7ICAgICAgICAgICAgICAgICAgICAgIC8qICAgIFNTSSBmaWxlIHNp
emUgICAgICAgICAgICAgICAgICAqLw0KICAgIEZJTEUNCiAgICAgICAgKmZpbGU7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiAgICBTU0kgZmlsZSBoYW5kbGUgICAgICAgICAgICAgICAgKi8N
CiAgICBMSVNUDQogICAgICAgIGNtZF9saXN0OyAgICAgICAgICAgICAgICAgICAgICAgLyogICAg
TGlzdCBvZiBTU0kgY29tbWFuZCBzdHJ1Y3R1cmUgICovDQogICAgU1NJQ01EDQogICAgICAgICpj
b21tYW5kOyAgICAgICAgICAgICAgICAgICAgICAgLyogICAgQ3VycmVudCBjb21tYW5kIHN0cnVj
dHVyZSAgICAgICovDQogICAgZGJ5dGUNCiAgICAgICAgY29tbWFuZF9jb3VudDsgICAgICAgICAg
ICAgICAgICAvKiAgICBOdW1iZXIgb2YgU1NJIGNvbW1hbmQgICAgICAgICAgKi8NCiAgICBCb29s
DQogICAgICAgIGZpbGVfbmFtZV90b19kZWxldGU7ICAgICAgICAgICAgLyogICAgTmVlZCBmcmVl
IGZvciBmaWxlIG5hbWUgICAgICAgICovDQogICAgUFJPQ0VTUw0KICAgICAgICBjZ2lfcHJvY2Vz
c19pZDsgICAgICAgICAgICAgICAgIC8qICAgIElEIG9mIENHSSBwcm9jZXNzICAgICAgICAgICAg
ICAqLw0KfSBTU0lfVENCOw0KDQojZGVmaW5lIFRDQiBTU0lfVENCDQoNCi8qLSBGdW5jdGlvbiBw
cm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8NCg0Kc3RhdGljIFNTSUNNRCAqc3NpX2NvbW1hbmRfYWxsb2MgICAgKGNoYXIgKmNv
bW1hbmQsIGxvbmcgYmVnaW4sIGxvbmcgZW5kKTsNCnN0YXRpYyB2b2lkICAgIHNzaV9jb21tYW5k
X2ZyZWUgICAgIChTU0lDTUQgKmNvbW1hbmQpOw0Kc3RhdGljIGNoYXIgICAqZ2V0X3BhcnNlZF9m
aWxlX25hbWUgKFRDQiAqdGNiLCBjaGFyICpmaWxlX25hbWUsIEJvb2wgdmlydHVhbCk7DQoNCg0K
LyotIEdsb2JhbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGlzIHNvdXJjZSBmaWxlIG9ubHkgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQpzdGF0aWMgVENCDQogICAgKnRjYjsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLyogIEFkZHJlc3MgdGhyZWFkIGNvbnRleHQgYmxvY2sgICAg
ICovDQpzdGF0aWMgUUlEDQogICAgdGltZXEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogIFRpbWVyIGFnZW50IGV2ZW50IHF1ZXVlICAgICAgICAgICovDQogICAgb3BlcnE7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLyogIE9wZXJhdG9yIGNvbnNvbGUgZXZlbnQgcXVldWUg
ICAgICovDQpzdGF0aWMgY2hhcg0KICAgIGVycm9yICBbTElORV9NQVggICAgKyAxXSwgICAgICAg
ICAgIC8qICBFcnJvciBidWZmZXIgICAgICAgICAgICAgICAgICAgICAqLw0KICAgIGJ1ZmZlciBb
QlVGRkVSX1NJWkUgKyAxXTsgICAgICAgICAgIC8qICBXb3JraW5nIGJ1ZmZlciAgICAgICAgICAg
ICAgICAgICAqLw0KDQoNCiNpbmNsdWRlICJ4aXhzc2kuZCIgICAgICAgICAgICAgICAgICAgICAv
KiAgSW5jbHVkZSBkaWFsb2cgZGF0YSAgICAgICAgICAgICAgKi8NCg0KDQovKioqKioqKioqKioq
KioqKioqKiogICBJTklUSUFMSVNFIEFHRU5UIC0gRU5UUlkgUE9JTlQgICAqKioqKioqKioqKioq
KioqKioqKiovDQoNCmludCB4aXhzc2lfaW5pdCAodm9pZCkNCnsNCiAgICBBR0VOVCAgKmFnZW50
OyAgICAgICAgICAgICAgICAgICAgICAvKiAgSGFuZGxlIGZvciBvdXIgYWdlbnQgICAgICAgICAg
ICAgKi8NCiAgICBUSFJFQUQgKnRocmVhZDsgICAgICAgICAgICAgICAgICAgICAvKiAgSGFuZGxl
IHRvIHZhcmlvdXMgdGhyZWFkcyAgICAgICAgKi8NCiMgICBpbmNsdWRlICJ4aXhzc2kuaSIgICAg
ICAgICAgICAgICAgICAvKiAgSW5jbHVkZSBkaWFsb2cgaW50ZXJwcmV0ZXIgICAgICAgKi8NCg0K
ICAgIC8qICAgICAgICAgICAgICAgICAgICAgIE1ldGhvZCBuYW1lICAgRXZlbnQgdmFsdWUgICAg
IFByaW9yaXR5ICAgICAgICAgICovDQogICAgLyogIFNodXRkb3duIGV2ZW50IGNvbWVzIGZyb20g
S2VybmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgbWV0aG9k
X2RlY2xhcmUgKGFnZW50LCAiU0hVVERPV04iLCAgICAgICBzaHV0ZG93bl9ldmVudCwgU01UX1BS
SU9SSVRZX01BWCk7DQoNCiAgICAvKiAgUHVibGljIG1ldGhvZHMgc3VwcG9ydGVkIGJ5IHRoaXMg
YWdlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICBtZXRob2RfZGVjbGFy
ZSAoYWdlbnQsICJXU1hfUkVRVUVTVCIsICAgIHJlcXVlc3RfZXZlbnQsICAgICAgICAgMCk7DQoN
CiAgICAvKiAgUmVwbHkgZXZlbnRzIGZyb20gdGltZXIgYWdlbnQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICBtZXRob2RfZGVjbGFyZSAoYWdlbnQsICJUSU1F
X0FMQVJNIiwgICAgIHRpbWVfb3V0X2V2ZW50LCBTTVRfUFJJT1JJVFlfTE9XKTsNCg0KICAgIC8q
ICBQcml2YXRlIG1ldGhvZHMgdXNlZCB0byBwYXNzIGluaXRpYWwgdGhyZWFkIGV2ZW50cyAgICAg
ICAgICAgICAgICAgICAqLw0KICAgIG1ldGhvZF9kZWNsYXJlIChhZ2VudCwgIl9NQVNURVIiLCAg
ICAgICAgbWFzdGVyX2V2ZW50LCAgICAgICAgICAwKTsNCiAgICBtZXRob2RfZGVjbGFyZSAoYWdl
bnQsICJfRklMRSIsICAgICAgICAgIGZpbGVfZXZlbnQsICAgICAgICAgICAgMCk7DQogICAgbWV0
aG9kX2RlY2xhcmUgKGFnZW50LCAiX0NPTU1BTkQiLCAgICAgICBjb21tYW5kX2V2ZW50LCAgICAg
ICAgIDApOw0KICAgIG1ldGhvZF9kZWNsYXJlIChhZ2VudCwgIl9JTkNMVURFIiwgICAgICAgaW5j
bHVkZV9ldmVudCwgICAgICAgICAwKTsNCg0KICAgIG1ldGhvZF9kZWNsYXJlIChhZ2VudCwgIl9D
TURfRU5EIiwgICAgICAgZW5kX29mX2NvbW1hbmRfZXZlbnQsICAwKTsNCg0KICAgIC8qICBFbnN1
cmUgdGhhdCBvcGVyYXRvciBjb25zb2xlIGlzIHJ1bm5pbmcsIGVsc2Ugc3RhcnQgaXQgdXAgICAg
ICAgICAgICAqLw0KICAgIHNtdG9wZXJfaW5pdCAoKTsNCiAgICBpZiAoKHRocmVhZCA9IHRocmVh
ZF9sb29rdXAgKFNNVF9PUEVSQVRPUiwgIiIpKSAhPSBOVUxMKQ0KICAgICAgICBvcGVycSA9IHRo
cmVhZC0+IHF1ZXVlLT4gcWlkOw0KICAgIGVsc2UNCiAgICAgICAgcmV0dXJuICgtMSk7DQoNCiAg
ICAvKiAgRW5zdXJlIHRoYXQgdGltZXIgYWdlbnQgaXMgcnVubmluZywgZWxzZSBzdGFydCBpdCB1
cCAgICAgICAgICAgICAgICAgKi8NCiAgICBzbXR0aW1lX2luaXQgKCk7DQogICAgaWYgKCh0aHJl
YWQgPSB0aHJlYWRfbG9va3VwIChTTVRfVElNRVIsICIiKSkgIT0gTlVMTCkNCiAgICAgICAgdGlt
ZXEgPSB0aHJlYWQtPiBxdWV1ZS0+IHFpZDsNCiAgICBlbHNlDQogICAgICAgIHJldHVybiAoLTEp
Ow0KDQogICAgLyogIENyZWF0ZSBpbml0aWFsIHRocmVhZCB0byBtYW5hZ2UgbWFzdGVyIHBvcnQg
ICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgaWYgKCh0aHJlYWQgPSB0aHJlYWRfY3Jl
YXRlIChBR0VOVF9OQU1FLCAibWFpbiIpKSAhPSBOVUxMKQ0KICAgICAgew0KICAgICAgICBTRU5E
ICgmdGhyZWFkLT4gcXVldWUtPiBxaWQsICJfTUFTVEVSIiwgIiIpOw0KICAgICAgICAoKFRDQiAq
KSB0aHJlYWQtPiB0Y2IpLT4gdGhyZWFkX3R5cGUgPSBtYXN0ZXJfZXZlbnQ7DQogICAgICB9DQog
ICAgZWxzZQ0KICAgICAgICByZXR1cm4gKC0xKTsNCg0KICAgIC8qICBTaWduYWwgb2theSB0byBj
YWxsZXIgdGhhdCB3ZSBpbml0aWFsaXNlZCBva2F5ICAgICAgICAgICAgICAgICAgICAgICAqLw0K
ICAgIHJldHVybiAoMCk7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKiogICBJTklU
SUFMSVNFIFRIRSBUSFJFQUQgICAqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQpNT0RVTEUg
aW5pdGlhbGlzZV90aGVfdGhyZWFkIChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICB0Y2IgPSB0aHJl
YWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4dCAg
ICAgICAgKi8NCg0KICAgIHRjYi0+IGZpbGUgICAgICAgICAgICAgICAgPSBOVUxMOw0KICAgIHRj
Yi0+IGJ1ZmZlciAgICAgICAgICAgICAgPSBOVUxMOw0KICAgIHRjYi0+IHJlc3VsdCAgICAgICAg
ICAgICAgPSBOVUxMOw0KICAgIHRjYi0+IGNvbW1hbmRfY291bnQgICAgICAgPSAwOw0KICAgIHRj
Yi0+IGNnaV9zdGRvdXQgICAgICAgICAgPSBOVUxMOw0KICAgIHRjYi0+IGNnaV9lbnZpcm9uICAg
ICAgICAgPSBOVUxMOw0KICAgIHRjYi0+IGNnaV9wcm9jZXNzX2lkICAgICAgPSBOVUxMX1BST0NF
U1M7DQogICAgdGNiLT4gZmlsZV9uYW1lX3RvX2RlbGV0ZSA9IEZBTFNFOw0KICAgIHRjYi0+IHRp
bWVvdXQgICAgICAgICAgICAgPSAwOw0KICAgIGxpc3RfcmVzZXQgKCZ0Y2ItPiBjbWRfbGlzdCk7
DQoNCiAgICBpZiAodGNiLT4gdGhyZWFkX3R5cGUgPT0gbWFzdGVyX2V2ZW50DQogICAgfHwgIHRj
Yi0+IHRocmVhZF90eXBlID09IGZpbGVfZXZlbnQpDQogICAgICB7DQogICAgICAgIHRjYi0+IGZp
bGVfbmFtZSA9IE5VTEw7DQogICAgICAgIHRjYi0+IGVudmlyb24gICA9IE5VTEw7DQogICAgICAg
IHRjYi0+IGNvbmZpZyAgICA9IE5VTEw7DQogICAgICAgIHRjYi0+IGNvbW1hbmQgICA9IE5VTEw7
IA0KICAgICAgICB0Y2ItPiBvcGVuX2ZpbGUgPSBOVUxMOw0KICAgICAgfQ0KICAgIGlmICh0Y2It
PiB0aHJlYWRfdHlwZSA9PSBmaWxlX2V2ZW50KSAvKiBVc2VkIHRvIGNoZWNrIGZpbGUgYWxyZWFk
eSBvcGVuZWQqLw0KICAgICAgICB0Y2ItPiBvcGVuX2ZpbGUgPSBzeW1fY3JlYXRlX3RhYmxlICgp
Ow0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKiogICBDSEVDSyBUSFJFQUQgVFlQ
RSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KTU9EVUxFIGNoZWNrX3RocmVhZF90
eXBlIChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICB0Y2IgPSB0aHJlYWQtPiB0Y2I7ICAgICAgICAg
ICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4dCAgICAgICAgKi8NCg0KICAgIHRo
ZV9uZXh0X2V2ZW50ID0gdGNiLT4gdGhyZWFkX3R5cGU7DQp9DQoNCg0KLyoqKioqKioqKioqKioq
KioqKioqKioqKiogICBDUkVBVEUgQ09NTUFORCBUSFJFQUQgICAqKioqKioqKioqKioqKioqKioq
KioqKioqLw0KDQpNT0RVTEUgY3JlYXRlX2NvbW1hbmRfdGhyZWFkIChUSFJFQUQgKnRocmVhZCkN
CnsNCiAgICBTU0lDTUQNCiAgICAgICAgKmNtZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiAgQ3VycmVudCBTU0kgY29tbWFuZCAgICAgICAgICAgICAgKi8NCiAgICAgICAgKm5leHQ7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiAgTmV4dCBTU0kgY29tbWFuZCAgICAgICAgICAgICAg
ICAgKi8NCiAgICBUSFJFQUQNCiAgICAgICAgKmNoaWxkX3RocmVhZDsgICAgICAgICAgICAgICAg
ICAvKiAgSGFuZGxlIHRvIGNoaWxkIHRocmVhZHMgICAgICAgICAgKi8NCiAgICANCiAgICB0Y2Ig
PSB0aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29u
dGV4dCAgICAgICAgKi8NCg0KICAgIGZvciAoY21kID0gdGNiLT4gY21kX2xpc3QubmV4dDsNCiAg
ICAgICAgIGNtZCAmJiBjbWQgIT0gKFNTSUNNRCAqKSZ0Y2ItPiBjbWRfbGlzdDsNCiAgICAgICAg
IGNtZCA9IG5leHQpDQogICAgICB7DQogICAgICAgIG5leHQgPSBjbWQtPiBuZXh0Ow0KDQogICAg
ICAgIC8qIElmIGlzIGNvbmZpZyBjb21tYW5kLCBkb24ndCBjcmVhdGUgdGhyZWFkICAgICAgICAg
ICAgICAgICAgICAgICAgICovDQogICAgICAgIGlmIChsZXhjbXAgKGNtZC0+IGNvbW1hbmQsICJj
b25maWciKSA9PSAwKQ0KICAgICAgICAgICAgY29udGludWU7DQoNCiAgICAgICAgY2hpbGRfdGhy
ZWFkID0gdGhyZWFkX2NyZWF0ZSAoQUdFTlRfTkFNRSwgIiIpOw0KICAgICAgICBpZiAoY2hpbGRf
dGhyZWFkKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIC8qIENyZWF0ZSBhIGluY2x1ZGUgdGhy
ZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAg
IGlmIChsZXhjbXAgKGNtZC0+IGNvbW1hbmQsICJpbmNsdWRlIikgPT0gMCkNCiAgICAgICAgICAg
ICAgew0KICAgICAgICAgICAgICAgIFNFTkQgKCZjaGlsZF90aHJlYWQtPiBxdWV1ZS0+IHFpZCwg
Il9JTkNMVURFIiwgIiIpOw0KICAgICAgICAgICAgICAgICgoVENCICopIGNoaWxkX3RocmVhZC0+
IHRjYiktPiB0aHJlYWRfdHlwZSA9IGluY2x1ZGVfZXZlbnQ7DQogICAgICAgICAgICAgICAgKChU
Q0IgKikgY2hpbGRfdGhyZWFkLT4gdGNiKS0+IG9wZW5fZmlsZSAgID0gdGNiLT4gb3Blbl9maWxl
Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAvKiBDcmVhdGUgYSBjb21tYW5kIHRocmVh
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICBl
bHNlDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBTRU5EICgmY2hpbGRfdGhyZWFk
LT4gcXVldWUtPiBxaWQsICJfQ09NTUFORCIsICIiKTsNCiAgICAgICAgICAgICAgICAoKFRDQiAq
KSBjaGlsZF90aHJlYWQtPiB0Y2IpLT4gdGhyZWFkX3R5cGUgPSBjb21tYW5kX2V2ZW50Ow0KICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICAoKFRDQiAqKSBjaGlsZF90aHJlYWQtPiB0Y2IpLT4g
cmVxdWVzdCAgICAgPSB0Y2ItPiByZXF1ZXN0Ow0KICAgICAgICAgICAgKChUQ0IgKikgY2hpbGRf
dGhyZWFkLT4gdGNiKS0+IHNlbmRlcl9xaWQgID0gdGhyZWFkLT4gcXVldWUtPiBxaWQ7DQogICAg
ICAgICAgICAoKFRDQiAqKSBjaGlsZF90aHJlYWQtPiB0Y2IpLT4gY29tbWFuZCAgICAgPSBjbWQ7
DQogICAgICAgICAgICAoKFRDQiAqKSBjaGlsZF90aHJlYWQtPiB0Y2IpLT4gY29uZmlnICAgICAg
PSB0Y2ItPiBjb25maWc7DQogICAgICAgICAgICAoKFRDQiAqKSBjaGlsZF90aHJlYWQtPiB0Y2Ip
LT4gZW52aXJvbiAgICAgPSB0Y2ItPiBlbnZpcm9uOw0KICAgICAgICAgICAgKChUQ0IgKikgY2hp
bGRfdGhyZWFkLT4gdGNiKS0+IGZpbGVfbmFtZSAgID0gdGNiLT4gZmlsZV9uYW1lOw0KICAgICAg
ICAgICAgKChUQ0IgKikgY2hpbGRfdGhyZWFkLT4gdGNiKS0+IGZpbGVfc2l6ZSAgID0gdGNiLT4g
ZmlsZV9zaXplOw0KICAgICAgICAgIH0NCiAgICAgICB9DQp9DQoNCg0KLyoqKioqKioqKioqKioq
KioqKioqKioqICAgQ1JFQVRFIE1BU1RFUiBGSUxFIFRIUkVBRCAgICoqKioqKioqKioqKioqKioq
KioqKioqLw0KDQpNT0RVTEUgY3JlYXRlX21hc3Rlcl9maWxlX3RocmVhZCAoVEhSRUFEICp0aHJl
YWQpDQp7DQogICAgVEhSRUFEDQogICAgICAgICpjaGlsZF90aHJlYWQ7ICAgICAgICAgICAgICAg
ICAgLyogIEhhbmRsZSB0byBjaGlsZCB0aHJlYWRzICAgICAgICAgICovDQoNCiAgICB0Y2IgPSB0
aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4
dCAgICAgICAgKi8NCg0KICAgIGNoaWxkX3RocmVhZCA9IHRocmVhZF9jcmVhdGUgKEFHRU5UX05B
TUUsICJmaWxlIik7DQogICAgaWYgKGNoaWxkX3RocmVhZCkNCiAgICAgIHsNCiAgICAgICAgU0VO
RCAoJmNoaWxkX3RocmVhZC0+IHF1ZXVlLT4gcWlkLCAiX0ZJTEUiLCAiIik7DQogICAgICAgICgo
VENCICopIGNoaWxkX3RocmVhZC0+IHRjYiktPiB0aHJlYWRfdHlwZSA9IGZpbGVfZXZlbnQ7DQog
ICAgICAgICgoVENCICopIGNoaWxkX3RocmVhZC0+IHRjYiktPiByZXF1ZXN0ICAgICA9IHRjYi0+
IHJlcXVlc3Q7DQogICAgICAgICgoVENCICopIGNoaWxkX3RocmVhZC0+IHRjYiktPiBzZW5kZXJf
cWlkICA9IHRjYi0+IHNlbmRlcl9xaWQ7DQogICAgICAgIHRjYi0+IHJlcXVlc3QgPSBOVUxMOw0K
ICAgICAgfQ0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKiAgIEdFVCBBTEwgU1NJ
IENPTU1BTkQgICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KTU9EVUxFIGdldF9hbGxf
c3NpX2NvbW1hbmQgKFRIUkVBRCAqdGhyZWFkKQ0Kew0KICAgIGNoYXINCiAgICAgICAgKmJlZ2lu
LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgQmVnaW4gb2YgU1NJIGNvbW1hbmQgc3RyaW5n
ICAgICAgKi8NCiAgICAgICAgKmVuZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgRW5k
IG9mIFNTSSBjb21tYW5kIHN0cmluZyAgICAgICAgKi8NCiAgICBTU0lDTUQNCiAgICAgICAgKmNv
bW1hbmQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAgU1NJIGNvbW1hbmQgc3RydWN0dXJlICAg
ICAgICAgICAgKi8NCiAgICBCb29sDQogICAgICAgIGFsbG9jX2Vycm9yID0gRkFMU0U7ICAgICAg
ICAgICAgLyogIEluZGljYXRlIGFsbG9jYXRpb24gZXJyb3IgICAgICAgICovDQoNCiAgICB0Y2Ig
PSB0aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29u
dGV4dCAgICAgICAgKi8NCg0KICAgIHRjYi0+IGNvbW1hbmRfY291bnQgPSAwOw0KDQogICAgYmVn
aW4gPSBzdHJzdHIgKHRjYi0+IGJ1ZmZlciwgQkVHSU5fVE9LRU4pOw0KICAgIHdoaWxlIChiZWdp
bikNCiAgICAgIHsNCiAgICAgICAgZW5kID0gc3Ryc3RyIChiZWdpbiArIEJFR0lOX1NJWkUsIEVO
RF9UT0tFTik7DQogICAgICAgIGlmIChlbmQpDQogICAgICAgICAgew0KICAgICAgICAgICAgICpi
ZWdpbiA9ICdcMCc7DQogICAgICAgICAgICAgKmVuZCAgID0gJ1wwJzsNCiAgICAgICAgICAgICBj
b21tYW5kID0gc3NpX2NvbW1hbmRfYWxsb2MgKGJlZ2luICsgQkVHSU5fU0laRSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJlZ2luIC0gdGNiLT4gYnVmZmVyKSwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGVuZCArIEVORF9TSVpF
IC0gdGNiLT4gYnVmZmVyKSk7ICAgICAgICAgICAgDQogICAgICAgICAgICAgaWYgKGNvbW1hbmQp
DQogICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIHRjYi0+IGNvbW1hbmRfY291bnQr
KzsNCiAgICAgICAgICAgICAgICAgbGlzdF9yZWxpbmtfYWZ0ZXIgKCZ0Y2ItPiBjbWRfbGlzdCwg
Y29tbWFuZCk7DQogICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgZWxzZQ0KICAgICAgICAg
ICAgICAgICBhbGxvY19lcnJvciA9IFRSVUU7DQoNCiAgICAgICAgICAgICBiZWdpbiA9IHN0cnN0
ciAoZW5kICsgRU5EX1NJWkUgKyAxLCBCRUdJTl9UT0tFTik7DQogICAgICAgICAgfQ0KICAgICAg
ICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1pc3NpbmcgZW5kIG9mIGNvbW1h
bmQgICAgICAgICAgICovDQogICAgICAgICAgew0KICAgICAgICAgICAgYmVnaW4gPSBOVUxMOw0K
ICAgICAgICAgICAgc3RyY3B5IChlcnJvciwgIlN5bnRheCBlcnJvcjogTWlzc2luZyBlbmQgb2Yg
U1NJIGNvbW1hbmQiKTsNCiAgICAgICAgICAgIHJhaXNlX2V4Y2VwdGlvbiAoZXJyb3JfZXZlbnQp
Ow0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0KICAgIGlmIChh
bGxvY19lcnJvcikNCiAgICAgIHsNCiAgICAgICAgc3RyY3B5IChlcnJvciwgIk1lbW9yeSBhbGxv
Y2F0dGlvbiBlcnJvciBpbiBjb21tYW5kIGFsbG9jYXRpb24iKTsNCiAgICAgICAgdGhlX25leHRf
ZXZlbnQgPSBlcnJvcl9ldmVudDsNCiAgICAgIH0NCiAgICBlbHNlDQogICAgICAgIHRoZV9uZXh0
X2V2ZW50ID0gdGNiLT4gY29tbWFuZF9jb3VudD8gb2tfZXZlbnQ6IG5vX2NvbW1hbmRfZXZlbnQ7
DQp9DQoNCg0KLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICBGdW5jdGlvbjogc3NpX2NvbW1hbmRf
YWxsb2MgLSBpbnRlcm5hbA0KDQogICAgU3lub3BzaXM6IEFsbG9jYXRlIGEgU1NJIGNvbW1hbmQg
c3RydWN0dXJlIGFuZCBpbml0aWFsaXNlIHZhbHVlcw0KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0K
DQpzdGF0aWMgU1NJQ01EICoNCnNzaV9jb21tYW5kX2FsbG9jIChjaGFyICpjb21tYW5kLCBsb25n
IGJlZ2luLCBsb25nIGVuZCkNCnsNCiAgICBTU0lDTUQNCiAgICAgICAgKmNtZCA9IE5VTEw7ICAg
ICAgICAgICAgICAgICAgICAvKiAgQ29tbWFuZCBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgKi8N
CiAgICBjaGFyDQogICAgICAgICpwYXJhbWV0ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogIFBh
cmFtZXRlciBwb2ludGVyICAgICAgICAgICAgICAgICovDQoNCiAgICBBU1NFUlQgKGNvbW1hbmQp
Ow0KDQogICAgY21kID0gbWVtX2FsbG9jIChzaXplb2YgKFNTSUNNRCkpOw0KICAgIGlmIChjbWQp
DQogICAgICB7DQogICAgICAgIG1lbXNldCAoY21kLCAwLCBzaXplb2YgKFNTSUNNRCkpOw0KICAg
ICAgICBsaXN0X3Jlc2V0IChjbWQpOyAgICAgICAgICAgICAgIC8qICBSZXNldCBwb2ludGVyIHRv
IGxpbmtlZCBsaXN0ICAgICAqLw0KICAgICAgICBjbWQtPiBjb21tYW5kICAgPSBtZW1fc3RyZHVw
IChjb21tYW5kKTsNCiAgICAgICAgY21kLT4gYmVnaW5fcG9zID0gYmVnaW47DQogICAgICAgIGNt
ZC0+IGVuZF9wb3MgICA9IGVuZDsNCg0KICAgICAgICBpZiAoY21kLT4gY29tbWFuZCA9PSBOVUxM
KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIG1lbV9mcmVlIChjbWQpOw0KICAgICAgICAgICAg
Y21kID0gTlVMTDsNCiAgICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgICB7DQogICAg
ICAgICAgICBwYXJhbWV0ZXIgPSBzdHJjaHIgKGNtZC0+IGNvbW1hbmQsICcgJyk7DQogICAgICAg
ICAgICAqcGFyYW1ldGVyKysgPSAnXDAnOw0KICAgICAgICAgICAgY21kLT4gcGFyYW0gPSBwYXJh
bWV0ZXI7DQogICAgICAgICAgfQ0KICAgICAgfQ0KICAgIHJldHVybiAoY21kKTsNCn0NCg0KDQov
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIEdFVCBXU1ggUkVRVUVTVCAgICoqKioqKioq
KioqKioqKioqKioqKioqKioqKiovDQoNCk1PRFVMRSBnZXRfd3N4X3JlcXVlc3QgKFRIUkVBRCAq
dGhyZWFkKQ0Kew0KICAgIHRjYiA9IHRocmVhZC0+IHRjYjsgICAgICAgICAgICAgICAgIC8qICBQ
b2ludCB0byB0aHJlYWQncyBjb250ZXh0ICAgICAgICAqLw0KDQogICAgdGNiLT4gcmVxdWVzdCA9
IE5VTEw7DQogICAgZ2V0X3NtdF93c3hfcmVxdWVzdCAodGhyZWFkLT4gZXZlbnQtPiBib2R5LCAm
dGNiLT4gcmVxdWVzdCk7DQoNCiAgICBpZiAodGNiLT4gcmVxdWVzdCA9PSBOVUxMKQ0KICAgICAg
ew0KICAgICAgICAvKiAgVGhlIHJlcXVlc3QgY2FuIG9ubHkgYmUgbnVsbCBpZiB0aGVyZSBpcyBu
byBtZW1vcnkgbGVmdCAgICAgICAgICAqLw0KICAgICAgICBzZW5kX3dzeF9lcnJvciAoJnRocmVh
ZC0+IGV2ZW50LT4gc2VuZGVyLCBIVFRQX1JFU1BPTlNFX05PVEZPVU5EKTsNCiAgICAgICAgdGhl
X25leHRfZXZlbnQgPSBleGNlcHRpb25fZXZlbnQ7DQogICAgICB9DQoNCiAgICAvKiBHZXQgUUlE
IG9mIEhUVFAgdGhyZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKi8NCiAgICB0Y2ItPiBzZW5kZXJfcWlkID0gdGhyZWFkLT4gZXZlbnQtPiBzZW5kZXI7
DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogICBNQUtFIFJFVFVSTiBGSUxF
ICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQpNT0RVTEUgbWFrZV9yZXR1cm5fZmls
ZSAoVEhSRUFEICp0aHJlYWQpDQp7DQogICAgbG9uZw0KICAgICAgICByZXN1bHRfc2l6ZTsgICAg
ICAgICAgICAgICAgICAgIC8qICBTaXplIG9mIHJlc3VsdCBwYWdlICAgICAgICAgICAgICAqLw0K
ICAgIFNTSUNNRA0KICAgICAgICAqY21kLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBD
dXJyZW50IGNvbW1hbmQgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAqbmV4dDsgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qICBOZXh0IGNvbW1hbmQgICAgICAgICAgICAgICAgICAgICAq
Lw0KICAgIGNoYXINCiAgICAgICAgKm5leHRfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAvKiAg
UG9pbnQgdG8gbmV4dCBibG9jayAgICAgICAgICAgICAgKi8NCiAgICAgICAgKmxhc3Q7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gY3VycmVudCBlbmQgb2YgcmVzdWx0ICAg
Ki8NCg0KICAgIHRjYiA9IHRocmVhZC0+IHRjYjsgICAgICAgICAgICAgICAgIC8qICBQb2ludCB0
byB0aHJlYWQncyBjb250ZXh0ICAgICAgICAqLw0KDQogICAgLyogIENhbGN1bGF0ZSBzaXplIG9m
IHJlc3VsdCBwYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQog
ICAgcmVzdWx0X3NpemUgPSB0Y2ItPiBmaWxlX3NpemU7DQogICAgZm9yIChjbWQgPSB0Y2ItPiBj
bWRfbGlzdC5uZXh0Ow0KICAgICAgICAgY21kICYmIGNtZCAhPSAoU1NJQ01EICopICZ0Y2ItPiBj
bWRfbGlzdDsNCiAgICAgICAgIGNtZCA9IG5leHQpDQogICAgICB7DQogICAgICAgIG5leHQgPSBj
bWQtPiBuZXh0Ow0KICAgICAgICByZXN1bHRfc2l6ZSArPSBjbWQtPiByZXN1bHRfc2l6ZSAtIChj
bWQtPiBlbmRfcG9zIC0gY21kLT4gYmVnaW5fcG9zKTsNCiAgICAgIH0NCg0KICAgIHRjYi0+IHJl
c3VsdF9zaXplID0gcmVzdWx0X3NpemU7DQogICAgdGNiLT4gcmVzdWx0ICAgICAgPSBtZW1fYWxs
b2MgKHJlc3VsdF9zaXplICsgMSk7DQogICAgaWYgKHRjYi0+IHJlc3VsdCA9PSBOVUxMKQ0KICAg
ICAgew0KICAgICAgICBzdHJjcHkgKGVycm9yLCAiSW5zdWZmaWNpZW50IG1lbW9yeSIpOw0KICAg
ICAgICByYWlzZV9leGNlcHRpb24gKGVycm9yX2V2ZW50KTsNCiAgICAgICAgcmV0dXJuOw0KICAg
ICAgfSAgICANCg0KICAgIHN0cmNweSAodGNiLT4gcmVzdWx0LCB0Y2ItPiBidWZmZXIpOw0KICAg
IGxhc3QgPSAmc3RybGFzdCAodGNiLT4gcmVzdWx0KTsNCg0KICAgIGZvciAoY21kID0gdGNiLT4g
Y21kX2xpc3QubmV4dDsNCiAgICAgICAgIGNtZCAmJiBjbWQgIT0gKFNTSUNNRCAqKSZ0Y2ItPiBj
bWRfbGlzdDsNCiAgICAgICAgIGNtZCA9IG5leHQpDQogICAgICB7DQogICAgICAgIG5leHQgPSBj
bWQtPiBuZXh0Ow0KDQogICAgICAgIC8qICBJZiBjb21tYW5kIGhhcyByZXN1bHQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgIGlmIChjbWQtPiBy
ZXN1bHQgDQogICAgICAgICYmICBjbWQtPiByZXN1bHRfc2l6ZSkNCiAgICAgICAgICB7DQogICAg
ICAgICAgICBzdHJjcHkgKGxhc3QsIGNtZC0+IHJlc3VsdCk7DQogICAgICAgICAgICBsYXN0ICs9
IGNtZC0+IHJlc3VsdF9zaXplOw0KICAgICAgICAgIH0NCg0KICAgICAgICAvKiAgSWYgbm90IGVu
ZCBvZiBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
Lw0KICAgICAgICBpZiAoY21kLT4gZW5kX3BvcyA8IHRjYi0+IGZpbGVfc2l6ZSAtIDEpDQogICAg
ICAgICAgew0KICAgICAgICAgICAgbmV4dF9zdHJpbmcgPSB0Y2ItPiBidWZmZXIgKyBjbWQtPiBl
bmRfcG9zOw0KICAgICAgICAgICAgaWYgKCpuZXh0X3N0cmluZyAhPSAnXDAnKSAgIC8qICBJZiB5
b3UgaGF2ZSB0ZXh0IGJldHdlZW4gY29tbWFuZCAqLw0KICAgICAgICAgICAgICB7DQogICAgICAg
ICAgICAgICAgc3RyY3B5IChsYXN0LCBuZXh0X3N0cmluZyk7DQogICAgICAgICAgICAgICAgbGFz
dCArPSBzdHJsZW4gKG5leHRfc3RyaW5nKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgIH0N
CiAgICAgIH0NCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgU0VORCBXU1gg
UkVTUE9OU0UgICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCk1PRFVMRSBzZW5kX3dz
eF9yZXNwb25zZSAoVEhSRUFEICp0aHJlYWQpDQp7DQogICAgdGNiID0gdGhyZWFkLT4gdGNiOyAg
ICAgICAgICAgICAgICAgLyogIFBvaW50IHRvIHRocmVhZCdzIGNvbnRleHQgICAgICAgICovDQoN
CiAgICBzZW5kX3dzeF9vayAoJnRjYi0+IHNlbmRlcl9xaWQsIHRjYi0+IHJlc3VsdCk7DQp9DQoN
Cg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIE1BS0UgQ09ORklHIFRBQkxFICAgKioq
KioqKioqKioqKioqKioqKioqKioqKioqLw0KDQpNT0RVTEUgbWFrZV9jb25maWdfdGFibGUgKFRI
UkVBRCAqdGhyZWFkKQ0Kew0KICAgIERFU0NSDQogICAgICAgIHN5bWJvbHM7ICAgICAgICAgICAg
ICAgICAgICAgICAgLyogIFN5bWJvbCBkZXNjcmlwdG9yICAgICAgICAgICAgICAgICovDQoNCiAg
ICB0Y2IgPSB0aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFk
J3MgY29udGV4dCAgICAgICAgKi8NCg0KICAgIHN5bWJvbHMuc2l6ZSAgPSB0Y2ItPiByZXF1ZXN0
LT4gc3ltYm9sc19zaXplOw0KICAgIHN5bWJvbHMuZGF0YSAgPSB0Y2ItPiByZXF1ZXN0LT4gc3lt
Ym9sc19kYXRhOw0KICAgIHRjYi0+IGVudmlyb24gPSBkZXNjcjJzeW1iICgmc3ltYm9scyk7DQoN
CiAgICBzeW1ib2xzLnNpemUgID0gdGNiLT4gcmVxdWVzdC0+IGNvbmZpZ19zaXplOw0KICAgIHN5
bWJvbHMuZGF0YSAgPSB0Y2ItPiByZXF1ZXN0LT4gY29uZmlnX2RhdGE7DQogICAgdGNiLT4gY29u
ZmlnID0gZGVzY3Iyc3ltYiAoJnN5bWJvbHMpOw0KDQogICAgLyogIFNvcnQgY29uZmlndXJhdGlv
biB0YWJsZSwgaHR0cCBsaWJyYXJ5IG5lZWQgc29ydGVkIHRhYmxlICAgICAgICAgICAgICovDQog
ICAgaWYgKHRjYi0+IGNvbmZpZykNCiAgICAgICAgc3ltX3NvcnRfdGFibGUgKHRjYi0+IGNvbmZp
ZywgTlVMTCk7DQoNCiAgICB0Y2ItPiBmaWxlX25hbWUgPSB0Y2ItPiByZXF1ZXN0LT4gZmlsZW5h
bWU7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgT1BFTiBTU0kgRklM
RSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQpNT0RVTEUgb3Blbl9zc2lfZmls
ZSAoVEhSRUFEICp0aHJlYWQpDQp7DQogICAgdGltZV90DQogICAgICAgIGZpbGVfdGltZTsNCiAg
ICAgICAgDQogICAgdGNiID0gdGhyZWFkLT4gdGNiOyAgICAgICAgICAgICAgICAgLyogIFBvaW50
IHRvIHRocmVhZCdzIGNvbnRleHQgICAgICAgICovDQoNCiAgICBBU1NFUlQgKHRjYi0+IGZpbGVf
bmFtZSk7DQoNCiAgICAvKiBDaGVjayBpZiBmaWxlIGlzIG5vdCBhbHJlYWR5IG9wZW4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICBpZiAoc3ltX2dldF92YWx1ZSAo
dGNiLT4gb3Blbl9maWxlLCB0Y2ItPiBmaWxlX25hbWUsIE5VTEwpICE9IE5VTEwpDQogICAgICB7
DQogICAgICAgIHNwcmludGYgKGVycm9yLCAiJXMgaXMgYWxyZWFkeSBvcGVuIiwgdGNiLT4gZmls
ZV9uYW1lKTsNCiAgICAgICAgcmFpc2VfZXhjZXB0aW9uIChjb21tYW5kX2Vycm9yX2V2ZW50KTsN
CiAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KDQogICAgdGNiLT4gZmlsZSA9IGZvcGVuICh0Y2It
PiBmaWxlX25hbWUsICJyYiIpOw0KICAgIGlmICh0Y2ItPiBmaWxlID09IE5VTEwpDQogICAgICB7
DQogICAgICAgIHNwcmludGYgKGVycm9yLCAiQ2FuJ3Qgb3BlbiBzc2kgZmlsZSAlcyIsIHRjYi0+
IGZpbGVfbmFtZSk7DQogICAgICAgIHJhaXNlX2V4Y2VwdGlvbiAoZXJyb3JfZXZlbnQpOw0KICAg
ICAgfQ0KICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgc3ltX2Fzc3VtZV9zeW1ib2wgKHRjYi0+
IG9wZW5fZmlsZSwgdGNiLT4gZmlsZV9uYW1lLCAiIik7DQoNCiAgICAgICAgZmlsZV90aW1lID0g
Z2V0X2ZpbGVfdGltZSAodGNiLT4gZmlsZV9uYW1lKTsNCiAgICAgICAgdGNiLT4gZmlsZV9kYXRl
ID0gdGltZXJfdG9fZGF0ZSAoZmlsZV90aW1lKTsNCiAgICAgICAgdGNiLT4gZmlsZV90aW1lID0g
dGltZXJfdG9fdGltZSAoZmlsZV90aW1lKTsNCiAgICAgIH0NCn0NCg0KDQovKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiogICBSRUFEIFNTSSBGSUxFICAgKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovDQoNCk1PRFVMRSByZWFkX3NzaV9maWxlIChUSFJFQUQgKnRocmVhZCkNCnsNCiAg
ICB0Y2IgPSB0aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFk
J3MgY29udGV4dCAgICAgICAgKi8NCg0KICAgIC8qICBHZXQgRmlsZSBzaXplICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgIGZzZWVr
ICh0Y2ItPiBmaWxlLCAwLCBTRUVLX0VORCk7DQogICAgdGNiLT4gZmlsZV9zaXplID0gZnRlbGwg
KHRjYi0+IGZpbGUpOw0KICAgIGZzZWVrICh0Y2ItPiBmaWxlLCAwLCBTRUVLX1NFVCk7DQoNCiAg
ICAvKiAgQWxsb2NhdGUgYSBidWZmZXIgdG8gZ2V0IGVudGlyZSBjb250ZW50IG9mIGZpbGUgICAg
ICAgICAgICAgICAgICAgICAgKi8NCiAgICB0Y2ItPiBidWZmZXIgPSBtZW1fYWxsb2MgKHRjYi0+
IGZpbGVfc2l6ZSArIDEpOw0KICAgIGlmICh0Y2ItPiBidWZmZXIgPT0gTlVMTCkNCiAgICAgIHsN
CiAgICAgICAgc3RyY3B5IChlcnJvciwgIkluc3VmZmljaWVudCBtZW1vcnkiKTsNCiAgICAgICAg
cmFpc2VfZXhjZXB0aW9uIChlcnJvcl9ldmVudCk7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0N
Cg0KICAgICp0Y2ItPiBidWZmZXIgPSAnXDAnOw0KICAgIHRjYi0+IGZpbGVfc2l6ZSA9IChsb25n
KWZyZWFkICh0Y2ItPiBidWZmZXIsIDEsIChzaXplX3QpIHRjYi0+IGZpbGVfc2l6ZSwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNiLT4gZmlsZSk7DQogICAgdGNiLT4gYnVm
ZmVyIFt0Y2ItPiBmaWxlX3NpemVdID0gJ1wwJzsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioq
KioqKiogICBTRVQgTk8gQ09NTUFORCBSRVRVUk4gRklMRSAgICoqKioqKioqKioqKioqKioqKioq
KiovDQoNCk1PRFVMRSBzZXRfbm9fY29tbWFuZF9yZXR1cm5fZmlsZSAoVEhSRUFEICp0aHJlYWQp
DQp7DQogICAgdGNiID0gdGhyZWFkLT4gdGNiOyAgICAgICAgICAgICAgICAgLyogIFBvaW50IHRv
IHRocmVhZCdzIGNvbnRleHQgICAgICAgICovDQoNCiAgICAvKiAgSWYgZmlsZSBkb2VzIG5vdCBo
YXZlIGFueSBTU0kgY29tbWFuZHMsIHRoZSByZXN1bHQgaXMgdGhlIGZpbGUgICAgICAgKi8NCiAg
ICB0Y2ItPiByZXN1bHQgPSB0Y2ItPiBidWZmZXI7DQogICAgdGNiLT4gYnVmZmVyID0gTlVMTDsN
Cn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqICAgQ0hFQ0sgSUYgQUxMIENPTU1BTkQgQ09N
UExFVEUgICAqKioqKioqKioqKioqKioqKioqKiovDQoNCk1PRFVMRSBjaGVja19pZl9hbGxfY29t
bWFuZF9jb21wbGV0ZSAoVEhSRUFEICp0aHJlYWQpDQp7DQogICAgdGNiID0gdGhyZWFkLT4gdGNi
OyAgICAgICAgICAgICAgICAgLyogIFBvaW50IHRvIHRocmVhZCdzIGNvbnRleHQgICAgICAgICov
DQoNCiAgICB0aGVfbmV4dF9ldmVudCA9ICh0Y2ItPiBjb21tYW5kX2NvdW50IDw9IDApPyBva19l
dmVudDogbW9yZV9ldmVudDsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAg
IEdFVCBDT01NQU5EIFRZUEUgICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCk1PRFVM
RSBnZXRfY29tbWFuZF90eXBlIChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICB0Y2IgPSB0aHJlYWQt
PiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4dCAgICAg
ICAgKi8NCg0KICAgIGlmIChsZXhjbXAgKHRjYi0+IGNvbW1hbmQtPiBjb21tYW5kLCAiZWNobyIp
ICAgICA9PSAwKQ0KICAgICAgICB0aGVfbmV4dF9ldmVudCA9IGVjaG9fZXZlbnQ7DQogICAgZWxz
ZQ0KICAgIGlmIChsZXhjbXAgKHRjYi0+IGNvbW1hbmQtPiBjb21tYW5kLCAiZXhlYyIpICAgICA9
PSAwKQ0KICAgICAgICB0aGVfbmV4dF9ldmVudCA9IGV4ZWNfZXZlbnQ7DQogICAgZWxzZQ0KICAg
IGlmIChsZXhjbXAgKHRjYi0+IGNvbW1hbmQtPiBjb21tYW5kLCAiZnNpemUiKSAgICA9PSAwKQ0K
ICAgICAgICB0aGVfbmV4dF9ldmVudCA9IGZzaXplX2V2ZW50Ow0KICAgIGVsc2UNCiAgICBpZiAo
bGV4Y21wICh0Y2ItPiBjb21tYW5kLT4gY29tbWFuZCwgImZsYXN0bW9kIikgPT0gMCkNCiAgICAg
ICAgdGhlX25leHRfZXZlbnQgPSBmbGFzdG1vZF9ldmVudDsNCg0KICAgIGVsc2UNCiAgICAgICAg
dGhlX25leHRfZXZlbnQgPSBjb21tYW5kX2Vycm9yX2V2ZW50Ow0KfQ0KDQoNCi8qKioqKioqKioq
KioqKioqKioqKioqICAgSU5DUkVNRU5UIENPTU1BTkQgRU5EIENPVU5UICAgKioqKioqKioqKioq
KioqKioqKioqKi8NCg0KTU9EVUxFIGluY3JlbWVudF9jb21tYW5kX2VuZF9jb3VudCAoVEhSRUFE
ICp0aHJlYWQpDQp7DQogICAgdGNiID0gdGhyZWFkLT4gdGNiOyAgICAgICAgICAgICAgICAgLyog
IFBvaW50IHRvIHRocmVhZCdzIGNvbnRleHQgICAgICAgICovDQoNCiAgICB0Y2ItPiBjb21tYW5k
X2NvdW50LS07DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIEdFVCBWQVJJ
QUJMRSBWQUxVRSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQpNT0RVTEUgZ2V0X3Zh
cmlhYmxlX3ZhbHVlIChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICBjaGFyDQogICAgICAgICp2YXI7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIFZhcmlhYmxlIG9mIGVjaG8gY29tbWFuZCAg
ICAgICAgICovDQoNCiAgICB0Y2IgPSB0aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAg
UG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4dCAgICAgICAgKi8NCg0KICAgIHZhciA9IHRjYi0+IGNv
bW1hbmQtPiBwYXJhbTsNCg0KICAgIGlmICh2YXIpDQogICAgICB7DQogICAgICAgIHZhciA9IHN0
cnN0ciAodmFyLCBFQ0hPX1ZBUklBQkxFX1RPS0VOKTsNCiAgICAgICAgaWYgKHZhcikNCiAgICAg
ICAgICB7DQogICAgICAgICAgICB2YXIgKz0gRUNIT19WQVJfU0laRTsNCiAgICAgICAgICAgIHRj
Yi0+IGNvbW1hbmQtPiBwYXJhbSA9IHZhcjsNCg0KICAgICAgICAgICAgLyogUmVtb3ZlIGNoYXIg
JyInIGF0IGVuZCBvZiB2YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAg
ICAgICAgICAgdmFyID0gc3RyY2hyICh2YXIsICciJyk7DQogICAgICAgICAgICBpZiAodmFyKQ0K
ICAgICAgICAgICAgICAgICp2YXIgPSAnXDAnOw0KDQogICAgICAgICAgICBpZiAobGV4Y21wICh0
Y2ItPiBjb21tYW5kLT4gcGFyYW0sICJET0NVTUVOVF9OQU1FIikgPT0gMCkNCiAgICAgICAgICAg
ICAgICB0aGVfbmV4dF9ldmVudCA9IGRvY19uYW1lX2V2ZW50Ow0KICAgICAgICAgICAgZWxzZQ0K
ICAgICAgICAgICAgaWYgKGxleGNtcCAodGNiLT4gY29tbWFuZC0+IHBhcmFtLCAiRE9DVU1FTlRf
VVJJIikgID09IDApDQogICAgICAgICAgICAgICAgdGhlX25leHRfZXZlbnQgPSBkb2NfdXJpX2V2
ZW50Ow0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgaWYgKGxleGNtcCAodGNiLT4gY29t
bWFuZC0+IHBhcmFtLCAiREFURV9HTVQiKSAgICAgID09IDApDQogICAgICAgICAgICAgICAgdGhl
X25leHRfZXZlbnQgPSBkYXRlX2dtdF9ldmVudDsNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAg
ICAgIGlmIChsZXhjbXAgKHRjYi0+IGNvbW1hbmQtPiBwYXJhbSwgIkRBVEVfTE9DQUwiKSAgICA9
PSAwKQ0KICAgICAgICAgICAgICAgIHRoZV9uZXh0X2V2ZW50ID0gZGF0ZV9sb2NhbF9ldmVudDsN
CiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIGlmIChsZXhjbXAgKHRjYi0+IGNvbW1hbmQt
PiBwYXJhbSwgIkxBU1RfTU9ESUZJRUQiKSA9PSAwKQ0KICAgICAgICAgICAgICAgIHRoZV9uZXh0
X2V2ZW50ID0gbGFzdF9tb2RpZmllZF9ldmVudDsNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAg
ICAgIGlmIChsZXhjbXAgKHRjYi0+IGNvbW1hbmQtPiBwYXJhbSwgIlFVRVJZX1NUUklOR19VTkVT
Q0FQRUQiKSA9PSAwKQ0KICAgICAgICAgICAgICAgIHRoZV9uZXh0X2V2ZW50ID0gcXVlcnlfc3Ry
aW5nX2V2ZW50Ow0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgaWYgKHN5bV9sb29rdXBf
c3ltYm9sICh0Y2ItPiBlbnZpcm9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0Y2ItPiBjb21tYW5kLT4gcGFyYW0pICE9IE5VTEwpDQogICAgICAgICAgICAgICAgdGhlX25l
eHRfZXZlbnQgPSBlbnZpcm9uX2V2ZW50Ow0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAg
ICB7DQogICAgICAgICAgICAgICAgc3ByaW50ZiAoZXJyb3IsICJVbnJlY29nbmlzZWQgI2VjaG8g
dmFyaWFibGUgJXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y2ItPiBjb21t
YW5kLT4gcGFyYW0pOw0KICAgICAgICAgICAgICAgIHRoZV9uZXh0X2V2ZW50ID0gY29tbWFuZF9l
cnJvcl9ldmVudDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgZWxzZQ0K
ICAgICAgICAgIHsNCiAgICAgICAgICAgIHN0cmNweSAoZXJyb3IsICJzeW50YXggZXJyb3IgaW4g
I2VjaG8gdmFyaWFibGUiKTsNCiAgICAgICAgICAgIHRoZV9uZXh0X2V2ZW50ID0gY29tbWFuZF9l
cnJvcl9ldmVudDsNCiAgICAgICAgICB9DQogICAgICB9DQogICAgZWxzZQ0KICAgICAgew0KICAg
ICAgICBzdHJjcHkgKGVycm9yLCAiI2VjaG8gdmFyaWFibGUgbWlzc2luZyIpOw0KICAgICAgICB0
aGVfbmV4dF9ldmVudCA9IGNvbW1hbmRfZXJyb3JfZXZlbnQ7DQogICAgICB9DQp9DQoNCg0KLyoq
KioqKioqKioqKioqKioqKioqKioqKiogICBTSUdOQUwgRU5EIE9GIENPTU1BTkQgICAqKioqKioq
KioqKioqKioqKioqKioqKioqLw0KDQpNT0RVTEUgc2lnbmFsX2VuZF9vZl9jb21tYW5kIChUSFJF
QUQgKnRocmVhZCkNCnsNCiAgICB0Y2IgPSB0aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAv
KiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4dCAgICAgICAgKi8NCg0KICAgIFNFTkQgKCZ0Y2It
PiBzZW5kZXJfcWlkLCAiX0NNRF9FTkQiLCAiIik7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioq
KioqKioqKiAgIFNUT1JFIERBVEUgR01UIElOIFJFU1VMVCAgICoqKioqKioqKioqKioqKioqKioq
KioqLw0KDQpNT0RVTEUgc3RvcmVfZGF0ZV9nbXRfaW5fcmVzdWx0IChUSFJFQUQgKnRocmVhZCkN
CnsNCiAgICB0aW1lX3QNCiAgICAgICAgbHRpbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiAgQ3VycmVudCBkYXRlIGFuZCB0aW1lICAgICAgICAgICAgKi8NCiAgICBjaGFyDQogICAgICAg
ICp0aW1lZm10Ow0KDQogICAgdGNiID0gdGhyZWFkLT4gdGNiOyAgICAgICAgICAgICAgICAgLyog
IFBvaW50IHRvIHRocmVhZCdzIGNvbnRleHQgICAgICAgICovDQoNCiAgICB0aW1lICgmbHRpbWUp
Ow0KDQogICAgdGltZWZtdCA9IFNTSV9DT05GSUcgKCJzc2k6dGltZWZtdCIsIFNTSV9USU1FX0ZP
Uk1BVCk7DQogICAgdGNiLT4gY29tbWFuZC0+IHJlc3VsdF9zaXplID0gc3RyZnRpbWUgKGJ1ZmZl
ciwgQlVGRkVSX1NJWkUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVmbXQsIHNhZmVfZ210aW1lICgmbHRpbWUpKTsNCiAgICBpZiAodGNiLT4gY29tbWFu
ZC0+IHJlc3VsdF9zaXplKQ0KICAgICAgICB0Y2ItPiBjb21tYW5kLT4gcmVzdWx0ID0gbWVtX3N0
cmR1cCAoYnVmZmVyKTsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKiogICBTVE9SRSBE
QVRFIExPQ0FMIElOIFJFU1VMVCAgICoqKioqKioqKioqKioqKioqKioqKiovDQoNCk1PRFVMRSBz
dG9yZV9kYXRlX2xvY2FsX2luX3Jlc3VsdCAoVEhSRUFEICp0aHJlYWQpDQp7DQogICAgdGltZV90
DQogICAgICAgIGx0aW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIEN1cnJlbnQgZGF0
ZSBhbmQgdGltZSAgICAgICAgICAgICovDQogICAgY2hhcg0KICAgICAgICAqdGltZWZtdDsNCg0K
ICAgIHRjYiA9IHRocmVhZC0+IHRjYjsgICAgICAgICAgICAgICAgIC8qICBQb2ludCB0byB0aHJl
YWQncyBjb250ZXh0ICAgICAgICAqLw0KDQogICAgdGltZSAoJmx0aW1lKTsNCg0KICAgIHRpbWVm
bXQgPSBTU0lfQ09ORklHICgic3NpOnRpbWVmbXQiLCBTU0lfVElNRV9GT1JNQVQpOw0KICAgIHRj
Yi0+IGNvbW1hbmQtPiByZXN1bHRfc2l6ZSA9IHN0cmZ0aW1lIChidWZmZXIsIEJVRkZFUl9TSVpF
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lZm10LCBz
YWZlX2xvY2FsdGltZSAoJmx0aW1lKSk7DQogICAgaWYgKHRjYi0+IGNvbW1hbmQtPiByZXN1bHRf
c2l6ZSkNCiAgICAgICAgdGNiLT4gY29tbWFuZC0+IHJlc3VsdCA9IG1lbV9zdHJkdXAgKGJ1ZmZl
cik7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKiAgIFNUT1JFIERPQ1VNRU5UIE5BTUUg
SU4gUkVTVUxUICAgKioqKioqKioqKioqKioqKioqKioqLw0KDQpNT0RVTEUgc3RvcmVfZG9jdW1l
bnRfbmFtZV9pbl9yZXN1bHQgKFRIUkVBRCAqdGhyZWFkKQ0Kew0KICAgIGNoYXINCiAgICAgICAg
KmZpbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgRmlsZSBuYW1lICAgICAgICAgICAg
ICAgICAgICAgICAgKi8NCg0KICAgIHRjYiA9IHRocmVhZC0+IHRjYjsgICAgICAgICAgICAgICAg
IC8qICBQb2ludCB0byB0aHJlYWQncyBjb250ZXh0ICAgICAgICAqLw0KDQogICAgLyogR2V0IHNp
bXBsZSBmaWxlIG5hbWUgKHJlbW92ZSBmdWxsIHBhdGgpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICovDQogICAgZmlsZSA9IHN0cnJjaHIgKHRjYi0+IGZpbGVfbmFtZSwgJy8nKTsNCiAg
ICBpZiAoZmlsZSkNCiAgICAgICAgZmlsZSsrOw0KICAgIGVsc2UNCiAgICAgICAgZmlsZSA9IHRj
Yi0+IGZpbGVfbmFtZTsNCg0KICAgIHRjYi0+IGNvbW1hbmQtPiByZXN1bHQgPSBtZW1fc3RyZHVw
IChmaWxlKTsNCiAgICBpZiAodGNiLT4gY29tbWFuZC0+IHJlc3VsdCkNCiAgICAgICAgdGNiLT4g
Y29tbWFuZC0+IHJlc3VsdF9zaXplID0gc3RybGVuICh0Y2ItPiBjb21tYW5kLT4gcmVzdWx0KTsN
Cn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKiAgIFNUT1JFIERPQ1VNRU5UIFVSSSBJTiBS
RVNVTFQgICAqKioqKioqKioqKioqKioqKioqKiovDQoNCk1PRFVMRSBzdG9yZV9kb2N1bWVudF91
cmlfaW5fcmVzdWx0IChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICB0Y2IgPSB0aHJlYWQtPiB0Y2I7
ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4dCAgICAgICAgKi8N
Cg0KICAgIGlmICh0Y2ItPiByZXF1ZXN0LT4gcmVxdWVzdF91cmwpDQogICAgICAgIHRjYi0+IGNv
bW1hbmQtPiByZXN1bHQgPSBtZW1fc3RyZHVwICh0Y2ItPiByZXF1ZXN0LT4gcmVxdWVzdF91cmwp
Ow0KICAgIGlmICh0Y2ItPiBjb21tYW5kLT4gcmVzdWx0KQ0KICAgICAgICB0Y2ItPiBjb21tYW5k
LT4gcmVzdWx0X3NpemUgPSBzdHJsZW4gKHRjYi0+IGNvbW1hbmQtPiByZXN1bHQpOw0KICANCn0N
Cg0KDQovKioqKioqKioqKioqKioqKioqKioqICAgU1RPUkUgTEFTVCBNT0QgREFURSBJTiBSRVNV
TFQgICAqKioqKioqKioqKioqKioqKioqKiovDQoNCk1PRFVMRSBzdG9yZV9sYXN0X21vZF9kYXRl
X2luX3Jlc3VsdCAoVEhSRUFEICp0aHJlYWQpDQp7DQogICAgdGltZV90DQogICAgICAgIGZpbGVf
dGltZTsgICAgICAgICAgICAgICAgICAgICAgLyogIEN1cnJlbnQgZmlsZSB0aW1lICAgICAgICAg
ICAgICAgICovDQoNCiAgICB0Y2IgPSB0aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAg
UG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4dCAgICAgICAgKi8NCg0KICAgIGZpbGVfdGltZSA9IGdl
dF9maWxlX3RpbWUgKHRjYi0+IGZpbGVfbmFtZSk7DQogICAgdGNiLT4gY29tbWFuZC0+IHJlc3Vs
dF9zaXplID0NCiAgICAgICAgc3RyZnRpbWUgKGJ1ZmZlciwgQlVGRkVSX1NJWkUsIFNTSV9USU1F
X0ZPUk1BVCwNCiAgICAgICAgICAgICAgICAgIHNhZmVfbG9jYWx0aW1lICgmZmlsZV90aW1lKSk7
DQoNCiAgICBpZiAodGNiLT4gY29tbWFuZC0+IHJlc3VsdF9zaXplID4gMCkNCiAgICAgICAgdGNi
LT4gY29tbWFuZC0+IHJlc3VsdCA9IG1lbV9zdHJkdXAgKGJ1ZmZlcik7DQp9DQoNCg0KLyoqKioq
KioqKioqKioqKioqKioqKioqICAgU1RPUkUgU1NJIEVSUk9SIElOIFJFU1VMVCAgICoqKioqKioq
KioqKioqKioqKioqKioqLw0KDQpNT0RVTEUgc3RvcmVfc3NpX2Vycm9yX2luX3Jlc3VsdCAoVEhS
RUFEICp0aHJlYWQpDQp7DQogICAgY2hhcg0KICAgICAgICAqZXJybXNnOw0KDQogICAgdGNiID0g
dGhyZWFkLT4gdGNiOyAgICAgICAgICAgICAgICAgLyogIFBvaW50IHRvIHRocmVhZCdzIGNvbnRl
eHQgICAgICAgICovDQoNCiAgICBlcnJtc2cgPSBTU0lfQ09ORklHICgic3NpOmVycm1zZyIsIFNT
SV9FUlJfRk9STUFUKTsNCiAgICBzcHJpbnRmIChidWZmZXIsIGVycm1zZywgZXJyb3IpOw0KDQog
ICAgdGNiLT4gY29tbWFuZC0+IHJlc3VsdCA9IG1lbV9zdHJkdXAgKGJ1ZmZlcik7DQogICAgaWYg
KHRjYi0+IGNvbW1hbmQtPiByZXN1bHQpDQogICAgICAgIHRjYi0+IGNvbW1hbmQtPiByZXN1bHRf
c2l6ZSA9IHN0cmxlbiAoYnVmZmVyKTsNCg0KICAgIC8qICBTZW5kIGVycm9yIHRvIGNvbnNvbGUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgIHNl
bmRmbXQgKCZvcGVycSwgIkVSUk9SIiwgInhpeHNzaTogJXMiLCBidWZmZXIpOw0KfQ0KDQoNCi8q
KioqKioqKioqKioqKioqKioqKiogICBTVE9SRSBFTlZJUk9OIFZBTFVFIElOIFJFU1VMVCAgICoq
KioqKioqKioqKioqKioqKioqKi8NCg0KTU9EVUxFIHN0b3JlX2Vudmlyb25fdmFsdWVfaW5fcmVz
dWx0IChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICBTWU1CT0wNCiAgICAgICAgKnN5bWJvbDsNCg0K
ICAgIHRjYiA9IHRocmVhZC0+IHRjYjsgICAgICAgICAgICAgICAgIC8qICBQb2ludCB0byB0aHJl
YWQncyBjb250ZXh0ICAgICAgICAqLw0KDQogICAgc3ltYm9sID0gc3ltX2xvb2t1cF9zeW1ib2wg
KHRjYi0+IGVudmlyb24sIHRjYi0+IGNvbW1hbmQgLT4gcGFyYW0pOw0KICAgIGlmIChzeW1ib2wp
DQogICAgICB7DQogICAgICAgIHRjYi0+IGNvbW1hbmQtPiByZXN1bHQgPSBtZW1fc3RyZHVwIChz
eW1ib2wtPiB2YWx1ZSk7DQogICAgICAgIGlmICh0Y2ItPiBjb21tYW5kLT4gcmVzdWx0KQ0KICAg
ICAgICAgICAgdGNiLT4gY29tbWFuZC0+IHJlc3VsdF9zaXplID0gc3RybGVuICh0Y2ItPiBjb21t
YW5kLT4gcmVzdWx0KTsNCiAgICAgIH0NCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKiog
ICBTVE9SRSBGSUxFIFNJWkUgSU4gUkVTVUxUICAgKioqKioqKioqKioqKioqKioqKioqKiovDQoN
Ck1PRFVMRSBzdG9yZV9maWxlX3NpemVfaW5fcmVzdWx0IChUSFJFQUQgKnRocmVhZCkNCnsNCiAg
ICBjaGFyDQogICAgICAgICpzaXplZm10Ow0KICAgIGRvdWJsZQ0KICAgICAgICBzaXplOw0KDQog
ICAgdGNiID0gdGhyZWFkLT4gdGNiOyAgICAgICAgICAgICAgICAgLyogIFBvaW50IHRvIHRocmVh
ZCdzIGNvbnRleHQgICAgICAgICovDQoNCiAgICB0Y2ItPiBmaWxlX3NpemUgPSBnZXRfZmlsZV9z
aXplICh0Y2ItPiBmaWxlX25hbWUpOw0KDQogICAgc2l6ZWZtdCA9IFNTSV9DT05GSUcgKCJzc2k6
c2l6ZWZtdCIsIFNTSV9TSVpFRk1UKTsNCg0KICAgIC8qICBJZiBzaXplIGZvcm1hdCBpcyAnYnl0
ZXMnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgIGlm
IChsZXhjbXAgKHNpemVmbXQsICJieXRlcyIpID09IDApDQogICAgICAgIHNwcmludGYgKGJ1ZmZl
ciwgIiVsZCBieXRlcyIsIHRjYi0+IGZpbGVfc2l6ZSk7DQogICAgLyogIElmIHNpemUgZm9ybWF0
IGlzIGFiYnJldiwgY2FsY3VsYXRlIHNpemUgaW4gS2J5dGUgb3IgTWJ5dGUgICAgICAgICAgICov
IA0KICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgc2l6ZSA9IChkb3VibGUpdGNiLT4gZmlsZV9z
aXplIC8gMTAyNC4wOw0KICAgICAgICBpZiAoc2l6ZSA+IDEwMjQuMCkgICAgICAgICAgICAgIC8q
IElmIHNpemUgPiAxMDI0IEtiIC0+IHNpemUgaW4gTWIgICAqLw0KICAgICAgICAgIHsNCiAgICAg
ICAgICAgIHNpemUgLz0gMTAyNC4wOyANCiAgICAgICAgICAgIHNwcmludGYgKGJ1ZmZlciwgIiUu
MmYgTWJ5dGVzIiwgc2l6ZSk7DQogICAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgICAg
ICBzcHJpbnRmIChidWZmZXIsICIlLjJmIEtieXRlcyIsIHNpemUpOw0KICAgICAgfQ0KDQogICAg
dGNiLT4gY29tbWFuZC0+IHJlc3VsdCA9IG1lbV9zdHJkdXAgKGJ1ZmZlcik7DQogICAgaWYgKHRj
Yi0+IGNvbW1hbmQtPiByZXN1bHQpDQogICAgICAgIHRjYi0+IGNvbW1hbmQtPiByZXN1bHRfc2l6
ZSA9IHN0cmxlbiAodGNiLT4gY29tbWFuZC0+IHJlc3VsdCk7DQp9DQoNCg0KLyoqKioqKioqKioq
KioqKioqKioqKiogICBTVE9SRSBRVUVSWSBTVFJJTkcgSU4gUkVTVUxUICAgKioqKioqKioqKioq
KioqKioqKioqLw0KDQpNT0RVTEUgc3RvcmVfcXVlcnlfc3RyaW5nX2luX3Jlc3VsdCAoVEhSRUFE
ICp0aHJlYWQpDQp7DQogICAgY2hhcg0KICAgICAgICAqdmFsdWU7DQoNCiAgICB0Y2IgPSB0aHJl
YWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4dCAg
ICAgICAgKi8NCiAgICANCiAgICB2YWx1ZSA9IHN5bV9nZXRfdmFsdWUgKHRjYi0+IGVudmlyb24s
ICJRVUVSWV9TVFJJTkciLCBOVUxMKTsNCiAgICBpZiAodmFsdWUpDQogICAgICB7DQogICAgICAg
IHRjYi0+IGNvbW1hbmQtPiByZXN1bHQgPSBtZW1fc3RyZHVwICh2YWx1ZSk7DQogICAgICAgIGlm
ICh0Y2ItPiBjb21tYW5kLT4gcmVzdWx0KQ0KICAgICAgICAgICAgdGNiLT4gY29tbWFuZC0+IHJl
c3VsdF9zaXplID0gc3RybGVuICh0Y2ItPiBjb21tYW5kLT4gcmVzdWx0KTsNCiAgICAgIH0NCn0N
Cg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKiAgIEZSRUUgSU5DTFVERSBSRVNPVVJDRSAg
ICoqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCk1PRFVMRSBmcmVlX2luY2x1ZGVfcmVzb3Vy
Y2UgKFRIUkVBRCAqdGhyZWFkKQ0Kew0KICAgIFNTSUNNRA0KICAgICAgICAqY21kLA0KICAgICAg
ICAqbmV4dDsNCiAgICBTWU1CT0wNCiAgICAgICAgKnN5bWJvbDsNCg0KICAgIHRjYiA9IHRocmVh
ZC0+IHRjYjsgICAgICAgICAgICAgICAgIC8qICBQb2ludCB0byB0aHJlYWQncyBjb250ZXh0ICAg
ICAgICAqLw0KDQogICAgaWYgKHRjYi0+IGZpbGUpDQogICAgICAgIGZjbG9zZSAodGNiLT4gZmls
ZSk7DQoNCiAgICAvKiAgRnJlZSBzeW1ib2wgZm9yIGluY2x1ZGUgb3BlbiBmaWxlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICBzeW1ib2wgPSBzeW1fbG9va3VwX3N5
bWJvbCAodGNiLT4gb3Blbl9maWxlLCB0Y2ItPiBmaWxlX25hbWUpOw0KICAgIGlmIChzeW1ib2wp
DQogICAgICAgIHN5bV9kZWxldGVfc3ltYm9sICh0Y2ItPiBvcGVuX2ZpbGUsIHN5bWJvbCk7DQoN
CiAgICBpZiAodGNiLT4gYnVmZmVyKQ0KICAgICAgICBtZW1fZnJlZSh0Y2ItPiBidWZmZXIpOw0K
ICAgIGlmICh0Y2ItPiByZXN1bHQpDQogICAgICAgIG1lbV9mcmVlKHRjYi0+IHJlc3VsdCk7DQoN
CiAgICAvKiAgRnJlZSBpbmNsdWRlZCBTU0kgY29tbWFuZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICBmb3IgKGNtZCA9IHRjYi0+IGNtZF9saXN0Lm5l
eHQ7DQogICAgICAgICBjbWQgJiYgY21kICE9IChTU0lDTUQgKikmdGNiLT4gY21kX2xpc3Q7DQog
ICAgICAgICBjbWQgPSBuZXh0KQ0KICAgICAgew0KICAgICAgICBuZXh0ID0gY21kLT4gbmV4dDsN
CiAgICAgICAgc3NpX2NvbW1hbmRfZnJlZSAoY21kKTsNCiAgICAgIH0NCn0NCg0KDQovKioqKioq
KioqKioqKioqKiogICBTVE9SRSBDVVJSRU5UIExBU1QgTU9EIERBVEUgSU4gUkVTVUxUICAgKioq
KioqKioqKioqKioqKiovDQoNCk1PRFVMRSBzdG9yZV9jdXJyZW50X2xhc3RfbW9kX2RhdGVfaW5f
cmVzdWx0IChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICB0aW1lX3QNCiAgICAgICAgZmlsZV90aW1l
OyAgICAgICAgICAgICAgICAgICAgICAvKiAgQ3VycmVudCBmaWxlIHRpbWUgICAgICAgICAgICAg
ICAgKi8NCiAgICBjaGFyDQogICAgICAgICp0aW1lZm10Ow0KDQogICAgdGNiID0gdGhyZWFkLT4g
dGNiOyAgICAgICAgICAgICAgICAgLyogIFBvaW50IHRvIHRocmVhZCdzIGNvbnRleHQgICAgICAg
ICovDQoNCiAgICBmaWxlX3RpbWUgPSBnZXRfZmlsZV90aW1lICh0Y2ItPiBmaWxlX25hbWUpOw0K
ICAgIHRpbWVmbXQgPSBTU0lfQ09ORklHICgic3NpOnRpbWVmbXQiLCBTU0lfVElNRV9GT1JNQVQp
Ow0KICAgIHRjYi0+IGNvbW1hbmQtPiByZXN1bHRfc2l6ZSA9IHN0cmZ0aW1lIChidWZmZXIsIEJV
RkZFUl9TSVpFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lZm10LCBzYWZlX2xvY2FsdGltZSAoJmZpbGVfdGltZSkpOw0KICAgIGlmICh0Y2ItPiBjb21t
YW5kLT4gcmVzdWx0X3NpemUgPiAwKQ0KICAgICAgICB0Y2ItPiBjb21tYW5kLT4gcmVzdWx0ID0g
bWVtX3N0cmR1cCAoYnVmZmVyKTsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKiAg
IEdFVCBGSUxFIE5BTUUgRlJPTSBVUkkgICAqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCk1P
RFVMRSBnZXRfZmlsZV9uYW1lX2Zyb21fdXJpIChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICBjaGFy
DQogICAgICAgICpsYXN0LA0KICAgICAgICAqdXJpOw0KICAgIEJvb2wNCiAgICAgICAgdmlydHVh
bCA9IEZBTFNFOw0KDQogICAgdGNiID0gdGhyZWFkLT4gdGNiOyAgICAgICAgICAgICAgICAgLyog
IFBvaW50IHRvIHRocmVhZCdzIGNvbnRleHQgICAgICAgICovDQoNCiAgICB0Y2ItPiBmaWxlX25h
bWUgPSBOVUxMOw0KDQogICAgLyogIFZpcnR1YWwgZmlsZSBuYW1lLCBuZWVkIHRvIHJlc29sdmUg
YWxpYXMgYW5kIHZpcnR1YWwgaG9zdCAgICAgICAgICAgICovDQogICAgdXJpID0gc3Ryc3RyICh0
Y2ItPiBjb21tYW5kLT4gcGFyYW0sICJ2aXJ0dWFsPVwiIik7DQogICAgaWYgKHVyaSkNCiAgICAg
IHsNCiAgICAgICAgdmlydHVhbCA9IFRSVUU7DQogICAgICAgIHVyaSArPSA5Ow0KICAgICAgfQ0K
ICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgLyogIEFic29sdXRlIGZpbGUgbmFtZSByZWxhdGl2
ZSB0byBkb2N1bWVudCByb290ICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgdXJpID0g
c3Ryc3RyICh0Y2ItPiBjb21tYW5kLT4gcGFyYW0sICJmaWxlPVwiIik7DQogICAgICAgIGlmICh1
cmkpDQogICAgICAgICAgICB1cmkgKz0gNjsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHsNCiAg
ICAgICAgICAgIC8qICBDR0kgZmlsZSBuYW1lLCBuZWVkIHRvIHJlc29sdmUgY2dpIGFsaWFzICAg
ICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIHVyaSA9IHN0cnN0ciAodGNiLT4gY29t
bWFuZC0+IHBhcmFtLCAiY2dpPVwiIik7DQogICAgICAgICAgICBpZiAodXJpID09IE5VTEwpDQog
ICAgICAgICAgICAgICAgdXJpID0gc3Ryc3RyICh0Y2ItPiBjb21tYW5kLT4gcGFyYW0sICJjbWQ9
XCIiKTsNCiAgICAgICAgICAgIGlmICh1cmkpDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgICB1cmkgKz0gNTsNCiAgICAgICAgICAgICAgICB2aXJ0dWFsID0gVFJVRTsNCiAgICAgICAg
ICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgIH0gIA0KDQogICAgaWYgKHVyaSkNCiAgICAgIHsN
CiAgICAgICAgLyogIFJlbW92ZSBjYXJhY3RlciAnIicgYXQgZW5kIG9mIGZpbGUgbmFtZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgbGFzdCA9IHN0cmNociAodXJpLCAnIicp
Ow0KICAgICAgICBpZiAobGFzdCkNCiAgICAgICAgICAgICpsYXN0ID0gJ1wwJzsNCg0KICAgICAg
ICB0Y2ItPiBmaWxlX25hbWUgPSBnZXRfcGFyc2VkX2ZpbGVfbmFtZSAodGNiLCB1cmksIHZpcnR1
YWwpOw0KICAgICAgICB0Y2ItPiBmaWxlX25hbWVfdG9fZGVsZXRlID0gVFJVRTsNCiAgICAgIH0N
Cn0NCg0KDQovKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIEZ1bmN0aW9uOiBnZXRfcGFyc2VkX2Zp
bGVfbmFtZSAtIGludGVybmFsDQoNCiAgICBTeW5vcHNpczogbWFrZSB0cnVlIGZpbGUgbmFtZS4g
SWYgaXMgdmlydHVhbCwgcmVzb2x2ZSBhbGlhcyBhbmQgdXNlIHJvb3QNCiAgICBkaXJlY3Rvcnkg
dmFsdWUuIElmIGlzIG5vdCB2aXJ0dWFsIGNoZWNrIGlmIGZpbGUgbmFtZSBkb24ndCBjb250ZW50
ICcuLicNCiAgICBhbmQgZm9yY2UgdG8gYmUgcmVsYXRpdmUgdG8gZG9jdW1lbnQgZGlyZWN0b3J5
Lg0KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQpzdGF0aWMgY2hhciAqDQpnZXRfcGFyc2VkX2Zp
bGVfbmFtZSAoVENCICp0Y2IsIGNoYXIgKmZpbGVfbmFtZSwgQm9vbCB2aXJ0dWFsKQ0Kew0KICAg
IHN0YXRpYyBjaGFyDQogICAgICAgICpmaWxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog
RmlsZSBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgY2hhcg0KICAgICAgICAq
Y2dpX3VybCwgICAgICAgICAgICAgICAgICAgICAgIC8qIENHSSB1cmwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqLyANCiAgICAgICAgKmNnaV9yb290LCAgICAgICAgICAgICAgICAgICAgICAv
KiBDR0kgcm9vdCBkaXJlY3RvcnkgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgKmRvY3VtZW50
X3Jvb3Q7ICAgICAgICAgICAgICAgICAvKiBEb2N1bWVudCByb290IGRpcmVjdG9yeSAgICAgICAg
ICAgKi8NCg0KICAgIEFTU0VSVCAoZmlsZV9uYW1lKTsNCiAgICBBU1NFUlQgKHRjYik7DQoNCiAg
ICBmaWxlID0gTlVMTDsNCiANCiAgICBkb2N1bWVudF9yb290ID0gc3ltX2dldF92YWx1ZSAodGNi
LT4gZW52aXJvbiwgIkRPQ1VNRU5UX1JPT1QiLCAgIi4vIik7DQogICAgaWYgKHZpcnR1YWwpDQog
ICAgICB7DQogICAgICAgIGNnaV91cmwgICA9IHN5bV9nZXRfdmFsdWUgKHRjYi0+IGNvbmZpZywg
ICJzZXJ2ZXI6Y2dpLXVybCIsIE5VTEwpOw0KICAgICAgICBjZ2lfcm9vdCAgPSBzeW1fZ2V0X3Zh
bHVlICh0Y2ItPiBlbnZpcm9uLCAiQ0dJX1JPT1QiLCAgICAgICBOVUxMKTsNCiAgICAgICAgZmls
ZSA9IGh0dHBfbWFwX3VyaSAodGNiLT4gY29uZmlnLCBkb2N1bWVudF9yb290LCBjZ2lfcm9vdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lLCBjZ2lfdXJsLCAwKTsNCiAg
ICAgIH0NCiAgICBlbHNlDQogICAgICB7DQogICAgICAgIC8qIElmIGZpbGUgbmFtZSBpcyBub3Qg
dmlydHVhbCwgaXMgcmVsYXRpdmUgdG8gZG9jdW1lbnQgcm9vdCAgICAgICAgICovDQogICAgICAg
IGlmIChzdHJzdHIgKGZpbGVfbmFtZSwgIi4uIikgIT0gTlVMTCkNCiAgICAgICAgICAgIHJldHVy
biAoTlVMTCk7DQogICAgICAgIHhzdHJjcHkgKGJ1ZmZlciwgZG9jdW1lbnRfcm9vdCwgIi8iLCBm
aWxlX25hbWUsIE5VTEwpOw0KICAgICAgICBmaWxlID0gbWVtX3N0cmR1cCAoYnVmZmVyKTsNCiAg
ICAgIH0NCiAgICByZXR1cm4gKGZpbGUpOw0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioq
KiogICBNQUtFIElOQ0xVREUgUkVUVVJOIEZJTEUgICAqKioqKioqKioqKioqKioqKioqKioqKi8N
Cg0KTU9EVUxFIG1ha2VfaW5jbHVkZV9yZXR1cm5fZmlsZSAoVEhSRUFEICp0aHJlYWQpDQp7DQog
ICAgdGNiID0gdGhyZWFkLT4gdGNiOyAgICAgICAgICAgICAgICAgLyogIFBvaW50IHRvIHRocmVh
ZCdzIGNvbnRleHQgICAgICAgICovDQoNCiAgICAvKiAgTW92ZSByZXN1bHQgb2YgaW5jbHVkZSBp
bnRvIGNvbW1hbmQgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICB0Y2It
PiBjb21tYW5kLT4gcmVzdWx0ICAgICAgPSB0Y2ItPiByZXN1bHQ7DQogICAgdGNiLT4gY29tbWFu
ZC0+IHJlc3VsdF9zaXplID0gdGNiLT4gcmVzdWx0X3NpemU7DQogICAgdGNiLT4gcmVzdWx0ID0g
TlVMTDsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKiAgIFNFVCBOTyBDT01NQU5EIElO
Q0xVREUgRklMRSAgICoqKioqKioqKioqKioqKioqKioqKiovDQoNCk1PRFVMRSBzZXRfbm9fY29t
bWFuZF9pbmNsdWRlX2ZpbGUgKFRIUkVBRCAqdGhyZWFkKQ0Kew0KICAgIHRjYiA9IHRocmVhZC0+
IHRjYjsgICAgICAgICAgICAgICAgIC8qICBQb2ludCB0byB0aHJlYWQncyBjb250ZXh0ICAgICAg
ICAqLw0KDQogICAgLyogIE1vdmUgaW5jbHVkZSBmaWxlIGludG8gY29tbWFuZCBzdHJ1Y3R1cmUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgdGNiLT4gY29tbWFuZC0+IHJlc3Vs
dCAgICAgID0gdGNiLT4gYnVmZmVyOw0KICAgIHRjYi0+IGNvbW1hbmQtPiByZXN1bHRfc2l6ZSA9
IHRjYi0+IGZpbGVfc2l6ZTsNCiAgICB0Y2ItPiBidWZmZXIgPSBOVUxMOw0KfQ0KDQoNCi8qKioq
KioqKioqKioqKioqKioqKioqKiogICBDSEVDSyBGSUxFIE9SIERJUkVDVE9SWSAgICoqKioqKioq
KioqKioqKioqKioqKioqKi8NCg0KTU9EVUxFIGNoZWNrX2ZpbGVfb3JfZGlyZWN0b3J5IChUSFJF
QUQgKnRocmVhZCkNCnsNCiAgICBjaGFyDQogICAgICAgICpwYXJhbTsNCg0KICAgIHRjYiA9IHRo
cmVhZC0+IHRjYjsgICAgICAgICAgICAgICAgIC8qICBQb2ludCB0byB0aHJlYWQncyBjb250ZXh0
ICAgICAgICAqLw0KDQogICAgLyogIFJlbW92ZSBVUkwgcGFyYW1ldGVyIGZyb20gZmlsZSBuYW1l
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgcGFyYW0gPSBzdHJjaHIg
KHRjYi0+IGZpbGVfbmFtZSwgJz8nKTsNCiAgICBpZiAocGFyYW0pDQogICAgICAgICpwYXJhbSA9
ICdcMCc7DQoNCiAgICBpZiAoZmlsZV9pc19leGVjdXRhYmxlICh0Y2ItPiBmaWxlX25hbWUpKQ0K
ICAgICAgICB0aGVfbmV4dF9ldmVudCA9IGV4ZWN1dGFibGVfZXZlbnQ7DQogICAgZWxzZQ0KICAg
ICAgICB0aGVfbmV4dF9ldmVudCA9IGNvbW1hbmRfZXJyb3JfZXZlbnQ7DQoNCiAgICBpZiAocGFy
YW0pDQogICAgICAgICpwYXJhbSA9ICc/JzsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioq
KioqKiogICBDTE9TRSBDSElMRCBQUk9DRVNTICAgKioqKioqKioqKioqKioqKioqKioqKioqKiov
DQoNCk1PRFVMRSBjbG9zZV9jaGlsZF9wcm9jZXNzIChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICB0
Y2IgPSB0aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3Mg
Y29udGV4dCAgICAgICAgKi8NCg0KICAgIGlmICh0Y2ItPiBjZ2lfcHJvY2Vzc19pZCAhPSBOVUxM
X1BST0NFU1MpDQogICAgICB7DQogICAgICAgIGlmIChwcm9jZXNzX3N0YXR1cyAodGNiLT4gY2dp
X3Byb2Nlc3NfaWQpID09IFBST0NFU1NfUlVOTklORykNCiAgICAgICAgICAgIHByb2Nlc3Nfa2ls
bCAgKHRjYi0+IGNnaV9wcm9jZXNzX2lkKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgcHJv
Y2Vzc19jbG9zZSAodGNiLT4gY2dpX3Byb2Nlc3NfaWQpOw0KDQogICAgICAgIHRjYi0+IGNnaV9w
cm9jZXNzX2lkID0gTlVMTF9QUk9DRVNTOw0KICAgICAgfQ0KfQ0KDQoNCi8qKioqKioqKioqKioq
KioqKioqKioqKioqKiogICBDUkVBVEUgQ0dJIFBST0NFU1MgICAqKioqKioqKioqKioqKioqKioq
KioqKioqKi8NCg0KTU9EVUxFIGNyZWF0ZV9jZ2lfcHJvY2VzcyAoVEhSRUFEICp0aHJlYWQpDQp7
DQogICAgc3RhdGljIEhUVFBfQ09OVEVYVA0KICAgICAgICBodHRwOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qICBUZW1wb3JhcnkgSFRUUCBjb250ZXh0ICAgICAgICAgICAqLw0KICAgIGNo
YXINCiAgICAgICAgKnBhcmFtLA0KICAgICAgICAqZXNjYXBlZCwgICAgICAgICAgICAgICAgICAg
ICAgIC8qICBDR0kgZmlsZW5hbWUsIGVzY2FwZWQgICAgICAgICAgICAqLw0KICAgICAgICAqY29t
bWFuZCwgICAgICAgICAgICAgICAgICAgICAgIC8qICBDR0kgY29tbWFuZCB0byBleGVjdXRlICAg
ICAgICAgICAqLw0KICAgICAgICAqd29ya2RpcjsgICAgICAgICAgICAgICAgICAgICAgIC8qICBD
R0kgd29ya2luZyBkaXJlY3RvcnkgICAgICAgICAgICAqLw0KDQogICAgdGNiID0gdGhyZWFkLT4g
dGNiOyAgICAgICAgICAgICAgICAgLyogIFBvaW50IHRvIHRocmVhZCdzIGNvbnRleHQgICAgICAg
ICovDQoNCiAgICBtZW1zZXQgKCZodHRwLCAwLCBzaXplb2YgKEhUVFBfQ09OVEVYVCkpOw0KDQog
ICAgLyogIEV4dHJhY3QgVVJMIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICovDQogICAgcGFyYW0gPSBzdHJjaHIgKHRjYi0+IGZpbGVfbmFt
ZSwgJz8nKTsNCiAgICBpZiAocGFyYW0pDQogICAgICB7DQogICAgICAgICpwYXJhbSsrID0gJ1ww
JzsNCiAgICAgICAgaHR0cC51cmxfcGFyYW0gPSBtZW1fc3RyZHVwIChwYXJhbSk7DQogICAgICB9
DQogICAgaHR0cC5jb25maWcgICAgPSB0Y2ItPiBjb25maWc7DQogICAgaHR0cC5maWxlX25hbWUg
PSBtZW1fc3RyZHVwICh0Y2ItPiBmaWxlX25hbWUpOw0KDQogICAgdGNiLT4gY2dpX3N0ZG91dCA9
IGh0dHBfcGlwZSAoJmh0dHAsICJjZ28iKTsNCiAgICAvKiAgUmVtb3ZlIG9sZCBzdGRvdXQgZmls
ZSBpZiBhbnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICBp
ZiAoZmlsZV9leGlzdHMgKHRjYi0+IGNnaV9zdGRvdXQpKQ0KICAgICAgICBmaWxlX2RlbGV0ZSAo
dGNiLT4gY2dpX3N0ZG91dCk7DQoNCiAgICAvKiAgU2V0IENHSSBpbnB1dC9vdXRwdXQgZmlsZW5h
bWUgc3ltYm9scyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICBzdHJjcHkg
KGJ1ZmZlciwgdGNiLT4gY2dpX3N0ZG91dCk7DQogICAgaWYgKCpTU0lfQ09ORklHICgiY2dpOm1z
ZG9zLXN0eWxlIiwgIjAiKSA9PSAnMScpDQogICAgICAgIHN0cmNvbnZjaCAoYnVmZmVyLCAnLycs
ICdcXCcpOw0KICAgIHN5bV9hc3N1bWVfc3ltYm9sICh0Y2ItPiBlbnZpcm9uLCAiQ2dpLVN0ZG91
dCIsIGJ1ZmZlcik7DQogICAgc3ltX2Fzc3VtZV9zeW1ib2wgKHRjYi0+IGVudmlyb24sICJDZ2kt
U3RkZXJyIiwgU1NJX0NPTkZJRyAoImNnaTplcnJsb2ciLCAiIikpOw0KDQogICAgdGNiLT4gY2dp
X2Vudmlyb24gPSBzeW1iMmVudiAodGNiLT4gZW52aXJvbik7DQogICAgaWYgKHRjYi0+IGNnaV9l
bnZpcm9uID09IE5VTEwpDQogICAgICB7DQogICAgICAgIG1lbV9zdHJmcmVlICgmdGNiLT4gY2dp
X3N0ZG91dCk7DQogICAgICAgIGlmIChodHRwLnVybF9wYXJhbSkNCiAgICAgICAgICAgIG1lbV9m
cmVlIChodHRwLnVybF9wYXJhbSk7DQogICAgICAgIGlmIChodHRwLmZpbGVfbmFtZSkNCiAgICAg
ICAgICAgIG1lbV9mcmVlIChodHRwLmZpbGVfbmFtZSk7DQogICAgICAgIHN0cmNweSAoZXJyb3Is
ICJJbnN1ZmZpY2llbnQgbWVtb3J5Iik7DQogICAgICAgIHJhaXNlX2V4Y2VwdGlvbiAoY29tbWFu
ZF9lcnJvcl9ldmVudCk7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCg0KICAgIC8qICBHZXQg
dGhlIHdvcmtpbmcgZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqLw0KICAgIHdvcmtkaXIgPSBTU0lfQ09ORklHICgiY2dpOndvcmtkaXIiLCAiLSIp
Ow0KICAgIGlmIChzdHJlcSAod29ya2RpciwgIi0iKSkgICAgICAgICAgIC8qICAnLScgbWVhbnMg
dXNlIHNjcmlwdCBkaXJlY3RvcnkgICAqLw0KICAgICAgew0KICAgICAgICBpZiAoc3RycmNociAo
aHR0cC5maWxlX25hbWUsICcvJykpDQogICAgICAgICAgew0KICAgICAgICAgICAgaHR0cC5zY3Jp
cHRfcGF0aCA9IG1lbV9zdHJkdXAgKGh0dHAuZmlsZV9uYW1lKTsNCiAgICAgICAgICAgICpzdHJy
Y2hyIChodHRwLnNjcmlwdF9wYXRoLCAnLycpID0gJ1wwJzsNCiAgICAgICAgICB9DQogICAgICAg
IHdvcmtkaXIgPSBodHRwLnNjcmlwdF9wYXRoOw0KICAgICAgfQ0KICAgIC8qICBDcmVhdGUgdGhl
IHByb2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqLw0KICAgIGVzY2FwZWQgPSBwcm9jZXNzX2VzYyAoTlVMTCwgaHR0cC5maWxlX25hbWUpOw0K
DQogICAgLyogIElmIFVSTCBhcmd1bWVudHMgY29udGFpbiAnPScgd2UgcGFzcyB0aGVtIGluIHRo
ZSBRVUVSWV9TVFJJTkcgb25seTsNCiAgICAgKiAgaWYgdGhleSBkbyBub3QgY29udGFpbiAnPScg
dGhlbiB3ZSBzcGxpdCBvbiAnKycgYW5kIHBhc3MgYXMgYXJncyB0bw0KICAgICAqICB0aGUgQ0dJ
IHByb2Nlc3MuDQogICAgICovDQogICAgaWYgKGh0dHAudXJsX3BhcmFtICYmIHN0cmNociAoaHR0
cC51cmxfcGFyYW0sICc9JykpDQogICAgICAgIGNvbW1hbmQgPSBtZW1fc3RyZHVwIChlc2NhcGVk
KTsNCiAgICBlbHNlDQogICAgICB7DQogICAgICAgIHhzdHJjcHlfZGVidWcgKCk7DQogICAgICAg
IGNvbW1hbmQgPSB4c3RyY3B5IChOVUxMLCBlc2NhcGVkLCAiICIsIGh0dHAudXJsX3BhcmFtLCBO
VUxMKTsNCiAgICAgICAgc3RyY29udmNoIChjb21tYW5kLCAnKycsICcgJyk7DQogICAgICB9DQog
ICAgLyogIFNldCBzZmxwcm9jIGZsYWcgZm9yIHNlcGFyYXRlIHZpcnR1YWwgbWFjaGluZXMgICAg
ICAgICAgICAgICAgICAgICAgICovDQogICAgLyogIFRoaXMgb25seSBhZmZlY3RzIDMyLWJpdCBX
aW5kb3dzIHN5c3RlbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgcHJvY2Vz
c19jb21wYXRpYmxlID0gKlNTSV9DT05GSUcgKCJ3aW4zMjoxNmJpdC1jZ2kiLCAiMCIpID09ICcx
JzsNCg0KICAgIGlmICgqU1NJX0NPTkZJRyAoImNnaTpzdGRpbyIsICIxIikgPT0gJzEnKQ0KICAg
ICAgICB0Y2ItPiBjZ2lfcHJvY2Vzc19pZCA9IHByb2Nlc3NfY3JlYXRlICgNCiAgICAgICAgICAg
IGNvbW1hbmQsICAgICAgICAgICAgICAgICAgICAvKiAgQ29tbWFuZCB0byBydW4gICAgICAgICAg
ICAgICAgICAgKi8NCiAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiAg
QXJndW1lbnRzIGZvciBjb21tYW5kICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIHdvcmtkaXIs
ICAgICAgICAgICAgICAgICAgICAvKiAgV29ya2luZyBkaXJlY3RvcnkgICAgICAgICAgICAgICAg
Ki8NCiAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiAgUmVkaXJlY3Qg
c3RkaW4gZnJvbSBoZXJlICAgICAgICAgKi8NCiAgICAgICAgICAgIHRjYi0+IGNnaV9zdGRvdXQs
ICAgICAgICAgICAvKiAgUmVkaXJlY3Qgc3Rkb3V0IHRvIGhlcmUgICAgICAgICAgKi8NCiAgICAg
ICAgICAgIFNTSV9DT05GSUcgKCJjZ2k6ZXJybG9nIiwgTlVMTCksLyogIFJlZGlyZWN0IHN0ZGVy
ciB0byBoZXJlICAgICAgKi8NCiAgICAgICAgICAgIHRjYi0+IGNnaV9lbnZpcm9uLCAgICAgICAg
ICAvKiAgRW52aXJvbm1lbnQgdGFibGUgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIEZB
TFNFKTsgICAgICAgICAgICAgICAgICAgICAvKiAgV2FpdCB1bnRpbCBmaW5pc2hlZD8gICAgICAg
ICAgICAgKi8NCiAgICBlbHNlDQogICAgICAgIHRjYi0+IGNnaV9wcm9jZXNzX2lkID0gcHJvY2Vz
c19jcmVhdGUgKA0KICAgICAgICAgICAgY29tbWFuZCwgICAgICAgICAgICAgICAgICAgIC8qICBD
b21tYW5kIHRvIHJ1biAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgTlVMTCwgICAg
ICAgICAgICAgICAgICAgICAgIC8qICBBcmd1bWVudHMgZm9yIGNvbW1hbmQgICAgICAgICAgICAq
Lw0KICAgICAgICAgICAgd29ya2RpciwgICAgICAgICAgICAgICAgICAgIC8qICBXb3JraW5nIGRp
cmVjdG9yeSAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAg
ICAgICAgICAgIC8qICBSZWRpcmVjdCBzdGRpbiBmcm9tIGhlcmUgICAgICAgICAqLw0KICAgICAg
ICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qICBSZWRpcmVjdCBzdGRvdXQgdG8g
aGVyZSAgICAgICAgICAqLw0KICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAg
IC8qICBSZWRpcmVjdCBzdGRlcnIgdG8gaGVyZSAgICAgICAgICAqLw0KICAgICAgICAgICAgdGNi
LT4gY2dpX2Vudmlyb24sICAgICAgICAgIC8qICBFbnZpcm9ubWVudCB0YWJsZSAgICAgICAgICAg
ICAgICAqLw0KICAgICAgICAgICAgRkFMU0UpOyAgICAgICAgICAgICAgICAgICAgIC8qICBXYWl0
IHVudGlsIGZpbmlzaGVkPyAgICAgICAgICAgICAqLw0KDQogICAgbWVtX2ZyZWUgKGNvbW1hbmQp
Ow0KICAgIG1lbV9mcmVlIChlc2NhcGVkKTsNCg0KICAgIGlmIChodHRwLnVybF9wYXJhbSkNCiAg
ICAgICAgbWVtX2ZyZWUgKGh0dHAudXJsX3BhcmFtKTsNCiAgICBpZiAoaHR0cC5maWxlX25hbWUp
DQogICAgICAgIG1lbV9mcmVlIChodHRwLmZpbGVfbmFtZSk7DQogICAgaWYgKGh0dHAuc2NyaXB0
X3BhdGgpDQogICAgICAgIG1lbV9mcmVlIChodHRwLnNjcmlwdF9wYXRoKTsNCg0KICAgIGlmICh0
Y2ItPiBjZ2lfcHJvY2Vzc19pZCA9PSBOVUxMX1BST0NFU1MpDQogICAgICB7DQogICAgICAgIHN0
cmNweSAoZXJyb3IsICJFcnJvciBpbiBDR0kgZXhlY3V0aW9uIik7DQogICAgICAgIHJhaXNlX2V4
Y2VwdGlvbiAoY29tbWFuZF9lcnJvcl9ldmVudCk7DQogICAgICB9DQp9DQoNCg0KLyoqKioqKioq
KioqKioqKioqKioqKioqICAgU1RPUkUgQ0dJIE9VVFBVVCBJTiBSRVNVTFQgICAqKioqKioqKioq
KioqKioqKioqKioqLw0KDQpNT0RVTEUgc3RvcmVfY2dpX291dHB1dF9pbl9yZXN1bHQgKFRIUkVB
RCAqdGhyZWFkKQ0Kew0KICAgIEZJTEUNCiAgICAgICAgKm91dDsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiAgT3V0cHV0IGZpbGUgb2YgQ0dJICAgICAgICAgICAgICAgKi8NCiAgICBjaGFy
DQogICAgICAgICpib2R5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIFBvaW50ZXIgdG8g
ZW5kIG9mIGhlYWRlciAgICAgICAgICovDQoNCiAgICB0Y2IgPSB0aHJlYWQtPiB0Y2I7ICAgICAg
ICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4dCAgICAgICAgKi8NCg0KICAg
IHRjYi0+IGNvbW1hbmQtPiByZXN1bHRfc2l6ZSA9IGdldF9maWxlX3NpemUgKHRjYi0+IGNnaV9z
dGRvdXQpOw0KICAgIGlmICh0Y2ItPiBjb21tYW5kLT4gcmVzdWx0X3NpemUgPiAwKQ0KICAgICAg
ew0KICAgICAgICBvdXQgPSBmb3BlbiAodGNiLT4gY2dpX3N0ZG91dCwgInJiIik7DQogICAgICAg
IGlmIChvdXQpDQogICAgICAgICAgew0KICAgICAgICAgICAgdGNiLT4gY29tbWFuZC0+IHJlc3Vs
dCA9IG1lbV9hbGxvYyAodGNiLT4gY29tbWFuZC0+IHJlc3VsdF9zaXplKTsNCiAgICAgICAgICAg
IGlmICh0Y2ItPiBjb21tYW5kLT4gcmVzdWx0KQ0KICAgICAgICAgICAgICAgIGZyZWFkICh0Y2It
PiBjb21tYW5kLT4gcmVzdWx0LCAxLA0KICAgICAgICAgICAgICAgICAgICAgICB0Y2ItPiBjb21t
YW5kLT4gcmVzdWx0X3NpemUsIG91dCk7DQoNCiAgICAgICAgICAgIC8qICBSZW1vdmUgQ0dJIGhl
YWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAg
ICAgICAgIGJvZHkgPSBzdHJzdHIgKHRjYi0+IGNvbW1hbmQtPiByZXN1bHQsICI8aHRtbD4iKTsN
CiAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpDQogICAgICAgICAgICAgICAgYm9keSA9IHN0
cnN0ciAodGNiLT4gY29tbWFuZC0+IHJlc3VsdCwgIjxIVE1MPiIpOw0KICAgICAgICAgICAgaWYg
KGJvZHkpDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoYm9keSAhPSB0Y2It
PiBjb21tYW5kLT4gcmVzdWx0KQ0KICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAg
ICAgICB0Y2ItPiBjb21tYW5kLT4gcmVzdWx0X3NpemUgLT0NCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAobG9uZykoYm9keSAtIHRjYi0+IGNvbW1hbmQtPiByZXN1bHQp
Ow0KICAgICAgICAgICAgICAgICAgICBtZW1tb3ZlICh0Y2ItPiBjb21tYW5kLT4gcmVzdWx0LCBi
b2R5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRj
Yi0+IGNvbW1hbmQtPiByZXN1bHRfc2l6ZSk7DQogICAgICAgICAgICAgICAgICAgIHRjYi0+IGNv
bW1hbmQtPiByZXN1bHQgW3RjYi0+IGNvbW1hbmQtPiByZXN1bHRfc2l6ZV0gPSAnXDAnOw0KICAg
ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICBmY2xvc2UgKG91
dCk7DQogICAgICAgICAgfQ0KICAgICAgfQ0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqICAgV0FJVCBQUk9DRVNTIEVORCAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8N
Cg0KTU9EVUxFIHdhaXRfcHJvY2Vzc19lbmQgKFRIUkVBRCAqdGhyZWFkKQ0Kew0KICAgIGludA0K
ICAgICAgIHN0YXRlOw0KICAgIEhUVFBfQ09OVEVYVA0KICAgICAgIGh0dHA7DQoNCiAgICB0Y2Ig
PSB0aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29u
dGV4dCAgICAgICAgKi8NCg0KICAgIGh0dHAuY2dpX3Byb2Nlc3NfaWQgPSB0Y2ItPiBjZ2lfcHJv
Y2Vzc19pZDsNCg0KICAgIHN0YXRlID0gaHR0cF9wcm9jZXNzX3N0YXRlICgmaHR0cCk7DQogICAg
aWYgKHN0YXRlID09IENHSV9TVEFURV9FTkQpICAgICAgICAgLyogIENHSSBmaW5pc2hlZCBva2F5
ICAgICAgICAgICAgICAgICovDQogICAgICAgIHRoZV9uZXh0X2V2ZW50ID0gZmluaXNoZWRfZXZl
bnQ7DQogICAgZWxzZQ0KICAgIGlmIChzdGF0ZSA9PSBDR0lfU1RBVEVfRVJST1IpICAgICAgIC8q
ICBDR0kgYWJvcnRlZCAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgew0KICAgICAgICBz
dHJjcHkgKGVycm9yLCAiQ0dJIGFib3J0ZWQiKTsNCiAgICAgICAgcmFpc2VfZXhjZXB0aW9uIChj
b21tYW5kX2Vycm9yX2V2ZW50KTsNCiAgICAgIH0NCiAgICBlbHNlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKiAgQ0dJIHJhbiBvdXQgb2YgdGltZSAgICAgICAgICAgICAgKi8NCiAg
ICAgICAgLyogIEFzayB0aW1lciB0byBzZW5kIHVzIGFuIGV2ZW50IGFmdGVyIHRoZSBtb25pdG9y
IHRpbWVvdXQgICAgICAgICAgKi8NCiAgICAgICAgc2VuZF9hbGFybSAoJnRpbWVxLCAwLA0KICAg
ICAgICAgICAgIGF0b2wgKFNTSV9DT05GSUcgKCJjZ2k6bW9uaXRvciIsIFNTSV9DR0lfTU9OSVRP
UikpIC8gMTAsIDAsIE5VTEwpOw0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKiAgIEVY
RUNVVEUgQUxMIENPTkZJRyBDT01NQU5EICAgKioqKioqKioqKioqKioqKioqKioqKi8NCg0KTU9E
VUxFIGV4ZWN1dGVfYWxsX2NvbmZpZ19jb21tYW5kIChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICBT
U0lDTUQNCiAgICAgICAgKmNtZCwNCiAgICAgICAgKm5leHQ7DQogICAgY2hhcg0KICAgICAgICAq
ZW5kLA0KICAgICAgICAqdmFsdWUsDQogICAgICAgICpmb3JtYXQ7DQoNCiAgICB0Y2IgPSB0aHJl
YWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4dCAg
ICAgICAgKi8NCg0KICAgIGZvciAoY21kID0gdGNiLT4gY21kX2xpc3QubmV4dDsNCiAgICAgICAg
IGNtZCAmJiBjbWQgIT0gKFNTSUNNRCAqKSZ0Y2ItPiBjbWRfbGlzdDsNCiAgICAgICAgIGNtZCA9
IG5leHQpDQogICAgICB7DQogICAgICAgIG5leHQgPSBjbWQtPiBuZXh0Ow0KDQogICAgICAgIC8q
ICBJZiBpcyBhIGNvbmZpZyBjb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICovDQogICAgICAgIGlmIChsZXhjbXAgKGNtZC0+IGNvbW1hbmQsICJjb25maWci
KSA9PSAwKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGZvcm1hdCA9IE5VTEw7DQogICAgICAg
ICAgICAvKiAgRXJyb3IgTWVzc2FnZSBmb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICovDQogICAgICAgICAgICBpZiAobGV4bmNtcCAoY21kLT4gcGFyYW0sICJl
cnJtc2c9IiwgNykgPT0gMCkNCiAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGZvcm1h
dCA9ICJzc2k6ZXJybXNnIjsNCiAgICAgICAgICAgICAgICB2YWx1ZSA9IGNtZC0+IHBhcmFtICsg
NzsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgLyogIFRp
bWUgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqLw0KICAgICAgICAgICAgaWYgKGxleG5jbXAgKGNtZC0+IHBhcmFtLCAidGltZWZtdD0iLCA4
KSA9PSAwKQ0KICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgZm9ybWF0ID0gInNzaTp0
aW1lZm10IjsNCiAgICAgICAgICAgICAgICB2YWx1ZSA9IGNtZC0+IHBhcmFtICsgODsNCiAgICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgLyogIFNpemUgZm9ybWF0
IChieXRlcyBvciBhYmJyZXYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAg
ICAgICAgICAgaWYgKGxleG5jbXAgKGNtZC0+IHBhcmFtLCAic2l6ZWZtdD0iLCA4KSA9PSAwKQ0K
ICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgZm9ybWF0ID0gInNzaTpzaXplZm10IjsN
CiAgICAgICAgICAgICAgICB2YWx1ZSA9IGNtZC0+IHBhcmFtICsgODsNCiAgICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgZWxzZSAgDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBz
cHJpbnRmIChlcnJvciwgIkludmFsaWQgY29uZmlnIHZhbHVlICVzIiwgY21kLT4gcGFyYW0pOw0K
ICAgICAgICAgICAgICAgIHN0b3JlX3NzaV9lcnJvcl9pbl9yZXN1bHQgKHRocmVhZCk7DQogICAg
ICAgICAgICAgICAgdmFsdWUgPSAiIjsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYg
KGZvcm1hdCkNCiAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGVuZCA9IHN0cnJjaHIg
KHZhbHVlLCAnIicpOw0KICAgICAgICAgICAgICAgIGlmIChlbmQpDQogICAgICAgICAgICAgICAg
ICAgICooKytlbmQpID0gJ1wwJzsNCiAgICAgICAgICAgICAgICBzeW1fYXNzdW1lX3N5bWJvbCAo
dGNiLT4gY29uZmlnLCBmb3JtYXQsIHZhbHVlKTsgICANCiAgICAgICAgICAgICAgfQ0KICAgICAg
ICAgICAgdGNiLT4gY29tbWFuZF9jb3VudC0tOw0KICAgICAgICAgIH0NCiAgICAgIH0NCn0NCg0K
DQovKioqKioqKioqKioqKioqKioqKioqKioqKiAgIENIRUNLIElGIENHSSBQUk9URUNURUQgICAq
KioqKioqKioqKioqKioqKioqKioqKiovDQoNCk1PRFVMRSBjaGVja19pZl9jZ2lfcHJvdGVjdGVk
IChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICB0Y2IgPSB0aHJlYWQtPiB0Y2I7ICAgICAgICAgICAg
ICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4dCAgICAgICAgKi8NCg0KICAgIGlmICgq
U1NJX0NPTkZJRyAoInNzaTpleGVjIiwgU1NJX0VYRUMpID09ICcwJykNCiAgICAgIHsgICAgICAN
CiAgICAgICAgc3RyY3B5IChlcnJvciwgU1NJX01TR19FWEVDX1BST1RFQ1QpOw0KICAgICAgICB0
aGVfbmV4dF9ldmVudCA9IGNvbW1hbmRfZXJyb3JfZXZlbnQ7DQogICAgICB9DQogICAgZWxzZQ0K
ICAgICAgICB0aGVfbmV4dF9ldmVudCA9IG9rX2V2ZW50Ow0KfQ0KDQoNCi8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiAgIEZMVVNIIFRJTUUgT1VUICAgKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8NCg0KTU9EVUxFIGZsdXNoX3RpbWVfb3V0IChUSFJFQUQgKnRocmVhZCkNCnsNCiAg
ICB0Y2IgPSB0aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFk
J3MgY29udGV4dCAgICAgICAgKi8NCg0KICAgIGlmICh0Y2ItPiB0aW1lb3V0ID4gMCkNCiAgICAg
ICAgZXZlbnRfc2VuZCAoDQogICAgICAgICAgICAmdGltZXEsICAgICAgICAgICAgICAgICAgICAg
LyogIFNlbmQgdG8gc3BlY2lmaWVkIHF1ZXVlICAgICAgICAgICovDQogICAgICAgICAgICAmdGhy
ZWFkLT4gcXVldWUtPiBxaWQsICAgICAgLyogIFF1ZXVlIGZvciByZXBseSAgICAgICAgICAgICAg
ICAgICovDQogICAgICAgICAgICAiRkxVU0giLCAgICAgICAgICAgICAgICAgICAgLyogIE5hbWUg
b2YgZXZlbnQgdG8gc2VuZCAgICAgICAgICAgICovDQogICAgICAgICAgICBOVUxMLCAwLCAgICAg
ICAgICAgICAgICAgICAgLyogIE5vIGV2ZW50IGJvZHkgICAgICAgICAgICAgICAgICAgICovDQog
ICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCAgICAgICAgICAgLyogIE5vIHJlc3BvbnNlIGV2
ZW50cyAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogIE5vIHRpbWVvdXQgICAgICAgICAgICAgICAgICAgICAgICovDQp9DQoNCg0KLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIFNFVCBUSU1FIE9VVCAgICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLw0KDQpNT0RVTEUgc2V0X3RpbWVfb3V0IChUSFJFQUQgKnRocmVh
ZCkNCnsNCiAgICB0Y2IgPSB0aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQg
dG8gdGhyZWFkJ3MgY29udGV4dCAgICAgICAgKi8NCg0KICAgIHRjYi0+IHRpbWVvdXQgPSBhdG9s
IChTU0lfQ09ORklHICgic3NpOnRpbWVvdXQiLCBTU0lfVElNRU9VVCkpOw0KICAgIGlmICh0Y2It
PiB0aW1lb3V0ID4gMCkNCiAgICAgICAgc2VuZF9hbGFybSAoJnRpbWVxLCAwLCB0Y2ItPiB0aW1l
b3V0ICogMTAwLCAwLCBOVUxMKTsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiogICBTSUdOQUwgVElNRU9VVCAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCk1P
RFVMRSBzaWduYWxfdGltZW91dCAoVEhSRUFEICp0aHJlYWQpDQp7DQogICAgdGNiID0gdGhyZWFk
LT4gdGNiOyAgICAgICAgICAgICAgICAgLyogIFBvaW50IHRvIHRocmVhZCdzIGNvbnRleHQgICAg
ICAgICovDQoNCiAgICBzZW5kZm10ICgmb3BlcnEsICJFUlJPUiIsICJ4aXhzc2k6IHRpbWVvdXQg
Zm9yIGZpbGUgJXMiLCB0Y2ItPiBmaWxlX25hbWUpOw0KfQ0KDQoNCi8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqICAgU0lHTkFMIFNTSSBFUlJPUiAgICoqKioqKioqKioqKioqKioqKioqKioq
KioqKi8NCg0KTU9EVUxFIHNpZ25hbF9zc2lfZXJyb3IgKFRIUkVBRCAqdGhyZWFkKQ0Kew0KICAg
IHRjYiA9IHRocmVhZC0+IHRjYjsgICAgICAgICAgICAgICAgIC8qICBQb2ludCB0byB0aHJlYWQn
cyBjb250ZXh0ICAgICAgICAqLw0KDQogICAgc2VuZGZtdCAoJm9wZXJxLCAiRVJST1IiLCAieGl4
c3NpOiAlcyIsIGVycm9yKTsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAg
IFJFVFVSTiBXU1ggRVJST1IgICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCk1PRFVM
RSByZXR1cm5fd3N4X2Vycm9yIChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICB0Y2IgPSB0aHJlYWQt
PiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4dCAgICAg
ICAgKi8NCg0KICAgIGlmICh0Y2ItPiB0aHJlYWRfdHlwZSA9PSBmaWxlX2V2ZW50KQ0KICAgICAg
ICBzZW5kX3dzeF9lcnJvciAoJnRjYi0+IHNlbmRlcl9xaWQsIEhUVFBfUkVTUE9OU0VfTk9URk9V
TkQpOw0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKiogICBGUkVFIEFMTCBSRVNP
VVJDRVMgICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KTU9EVUxFIGZyZWVfYWxsX3Jl
c291cmNlcyAoVEhSRUFEICp0aHJlYWQpDQp7DQogICAgU1NJQ01EDQogICAgICAgICpjbWQsDQog
ICAgICAgICpuZXh0Ow0KDQogICAgdGNiID0gdGhyZWFkLT4gdGNiOyAgICAgICAgICAgICAgICAg
LyogIFBvaW50IHRvIHRocmVhZCdzIGNvbnRleHQgICAgICAgICovDQoNCiAgICBpZiAodGNiLT4g
cmVxdWVzdCkNCiAgICAgICAgZnJlZV9zbXRfd3N4X3JlcXVlc3QgKCZ0Y2ItPiByZXF1ZXN0KTsN
CiAgICBpZiAodGNiLT4gZW52aXJvbikNCiAgICAgICAgc3ltX2RlbGV0ZV90YWJsZSAodGNiLT4g
ZW52aXJvbik7DQogICAgaWYgKHRjYi0+IGNvbmZpZykNCiAgICAgICAgc3ltX2RlbGV0ZV90YWJs
ZSAodGNiLT4gY29uZmlnKTsNCiAgICBpZiAodGNiLT4gb3Blbl9maWxlKQ0KICAgICAgICBzeW1f
ZGVsZXRlX3RhYmxlICh0Y2ItPiBvcGVuX2ZpbGUpOw0KICAgIGlmICh0Y2ItPiBmaWxlKQ0KICAg
ICAgICBmY2xvc2UgKHRjYi0+IGZpbGUpOw0KICAgIGlmICh0Y2ItPiBidWZmZXIpDQogICAgICAg
IG1lbV9mcmVlKHRjYi0+IGJ1ZmZlcik7DQogICAgaWYgKHRjYi0+IHJlc3VsdCkNCiAgICAgICAg
bWVtX2ZyZWUodGNiLT4gcmVzdWx0KTsNCg0KICAgIC8qIEZyZWUgYWxsIGNvbW1hbmQgc3RydWN0
dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgIGZv
ciAoY21kID0gdGNiLT4gY21kX2xpc3QubmV4dDsNCiAgICAgICAgIGNtZCAmJiBjbWQgIT0gKFNT
SUNNRCAqKSZ0Y2ItPiBjbWRfbGlzdDsNCiAgICAgICAgIGNtZCA9IG5leHQpDQogICAgICB7DQog
ICAgICAgIG5leHQgPSBjbWQtPiBuZXh0Ow0KICAgICAgICBzc2lfY29tbWFuZF9mcmVlIChjbWQp
Ow0KICAgICAgfQ0KfQ0KDQovKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgIEZ1bmN0aW9uOiBzc2lf
Y29tbWFuZF9mcmVlIC0gaW50ZXJuYWwNCg0KICAgIFN5bm9wc2lzOiBGcmVlIGEgU1NJIGNvbW1h
bmQgc3RydWN0dXJlDQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCnN0YXRpYyB2b2lkDQpzc2lf
Y29tbWFuZF9mcmVlICAoU1NJQ01EICpjbWQpDQp7DQogICAgQVNTRVJUIChjbWQpOw0KDQogICAg
aWYgKGNtZC0+IGNvbW1hbmQpDQogICAgICAgIG1lbV9mcmVlIChjbWQtPiBjb21tYW5kKTsNCiAg
ICBpZiAoY21kLT4gcmVzdWx0KQ0KICAgICAgICBtZW1fZnJlZSAoY21kLT4gcmVzdWx0KTsNCg0K
ICAgIG1lbV9mcmVlIChjbWQpOw0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqICAg
VEVSTUlOQVRFIFRIRSBUSFJFQUQgICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KTU9E
VUxFIHRlcm1pbmF0ZV90aGVfdGhyZWFkIChUSFJFQUQgKnRocmVhZCkNCnsNCiAgICB0Y2IgPSB0
aHJlYWQtPiB0Y2I7ICAgICAgICAgICAgICAgICAvKiAgUG9pbnQgdG8gdGhyZWFkJ3MgY29udGV4
dCAgICAgICAgKi8NCg0KICAgIGlmICh0Y2ItPiBmaWxlX25hbWVfdG9fZGVsZXRlDQogICAgJiYg
IHRjYi0+IGZpbGVfbmFtZSkNCiAgICAgICAgbWVtX3N0cmZyZWUgKCZ0Y2ItPiBmaWxlX25hbWUp
Ow0KDQogICAgaWYgKHRjYi0+IGNnaV9wcm9jZXNzX2lkICE9IE5VTExfUFJPQ0VTUykNCiAgICAg
ICAgY2xvc2VfY2hpbGRfcHJvY2VzcyAodGhyZWFkKTsNCiAgICBpZiAodGNiLT4gY2dpX3N0ZG91
dCkNCiAgICAgICAgbWVtX3N0cmZyZWUgKCZ0Y2ItPiBjZ2lfc3Rkb3V0KTsNCiAgICBpZiAodGNi
LT4gY2dpX2Vudmlyb24pDQogICAgICB7DQogICAgICAgIHN0cnRmcmVlICh0Y2ItPiBjZ2lfZW52
aXJvbik7DQogICAgICAgIHRjYi0+IGNnaV9lbnZpcm9uID0gTlVMTDsNCiAgICAgIH0NCiAgICB0
aGVfbmV4dF9ldmVudCA9IHRlcm1pbmF0ZV9ldmVudDsNCn0NCg0K
------=_Part_1778_25286245.1099164971055--