Re: pop up windows

Steven J Abner <[email protected]> Sun, 16 Feb 2025 18:57:30 -0500
Newsgroups gmane.comp.freedesktop.xcb
Message-ID <[email protected]>
--=-3hZ/YvcT6wA2NL7ABgWE
Content-Type: text/plain; charset=us-ascii; format=flowed

Ready to have your minds blown!
 I've created another demo. Had to prove to myself that once and for 
all my conclusions. You're not going to believe me, but on my system 
XGrabPointer() works but XUngrabPointer() doesn't. You must use 
xcb_ungrab_pointer() to ungrab. However I do use XUngrabPointer() in 
another code along with focus stuff and have released grab.
 This demo was only a window that just grabs pointer and ungrabs it. On 
button press, grab pointer, on next button press ungrab.
 Be warned, had to reboot when using XUngrabPointer(). It is commented 
out in favor of working xcb_ungrab_pointer().

KaBoooom
Steve

gcc -ansi -pedantic -Wall -Wno-unknown-pragmas -g -o xgrab xgrab.c 
-lxcb -lX11 -lX11-xcb



--=-3hZ/YvcT6wA2NL7ABgWE
Content-Type: text/x-csrc
Content-Disposition: attachment; filename=xgrab.c
Content-Transfer-Encoding: base64

I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5o
PgojaW5jbHVkZSA8c3RkYm9vbC5oPgojaW5jbHVkZSA8aW50dHlwZXMuaD4KI2luY2x1ZGUgPGxp
bWl0cy5oPgojaW5jbHVkZSA8cG9sbC5oPgoKI2RlZmluZSBVU0VfWExJQiAxCiNpZiBVU0VfWExJ
QgojaW5jbHVkZSA8WDExL1hsaWIteGNiLmg+IC8qIEEgbXVzdCBmb3IgWEdyYWJQb2ludGVyICov
CkRpc3BsYXkgKmRpc3BsYXk7CmJvb2wgZ3JhYmJlZCA9IGZhbHNlOwpib29sIG9uY2UgPSB0cnVl
OwovKiBnY2MgLWFuc2kgLXBlZGFudGljIC1XYWxsIC1Xbm8tdW5rbm93bi1wcmFnbWFzIC1nCiAt
byB4Z3JhYiB4Z3JhYi5jIC1seGNiIC1sWDExIC1sWDExLXhjYiAqLwojZWxzZQojaW5jbHVkZSA8
eGNiL3hjYi5oPiAgICAgIC8qIGhhcyBjb3JyZWN0IHN5cy90eXBlcyAqLwovKiBnY2MgLWFuc2kg
LXBlZGFudGljIC1XYWxsIC1Xbm8tdW5rbm93bi1wcmFnbWFzIC1nIC1vIHhncmFiIHhncmFiLmMg
LWx4Y2IgKi8KI2VuZGlmCgoKdHlwZWRlZiBzdHJ1Y3QgX1BoeEludGVyZmFjZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGh4SW50ZXJmYWNlOwp0eXBlZGVmIHN0cnVjdCBfUGh4UmVjdGFu
Z2xlIHsgaW50MTZfdCB4LCB5LCB3LCBoOyB9ICAgICBQaHhSZWN0YW5nbGU7Cgp4Y2JfY29ubmVj
dGlvbl90ICAgICAqY29ubmVjdGlvbiA9IE5VTEw7CnhjYl9hdG9tX3QgV01fUFJPVE9DT0xTOwp4
Y2JfYXRvbV90IFdNX0RFTEVURV9XSU5ET1c7CgpzdHJ1Y3QgX1BoeEludGVyZmFjZSB7CiBQaHhS
ZWN0YW5nbGUgIG1ldGVfYm94OwogeGNiX3dpbmRvd190ICB3aW5kb3c7Cn0gaWZhY2UwID0geyB7
MH0sIDAgfTsKCiNkZWZpbmUgREVCVUcoYSxiKSBcCiAgcHJpbnRmKCIlZCAlc1xuIiwgYSwgYik7
CgovKiBzZXQgYWxsIGV2ZW50cyBvbiAqLwp1aW50NjRfdCBkZWJ1Z19mbGFncyA9ICh1aW50NjRf
dCkweEZGRkZGRkZGRkZGRkZGRkY7CnN0YXRpYyB2b2lkCl9kZWJ1Z19ldmVudCh4Y2JfZ2VuZXJp
Y19ldmVudF90ICpudnQpIHsKCiAgdWludDhfdCByZXNwb25zZSA9IG52dC0+cmVzcG9uc2VfdHlw
ZSAmICh1aW50OF90KX4weDA4MDsKICB1aW50NjRfdCBvbl9iaXQgPSAodWludDY0X3QpMSA8PCBy
ZXNwb25zZTsKICBpZiAoKGRlYnVnX2ZsYWdzICYgb25fYml0KSA9PSAwKSAgcmV0dXJuOwoKICBz
d2l0Y2ggKHJlc3BvbnNlKSB7CiAgICBjYXNlIFhDQl9LRVlfUFJFU1M6IHsgICAgICAgICAvKiBy
ZXNwb25zZV90eXBlIDIgKi8KICAgICAgeGNiX2tleV9wcmVzc19ldmVudF90ICprcCA9ICh4Y2Jf
a2V5X3ByZXNzX2V2ZW50X3QqKW52dDsKICAgICAgREVCVUcoa3AtPmV2ZW50LCAiS0VZX1BSRVNT
Iik7CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfS0VZX1JFTEVBU0U6IHsgICAgICAg
LyogcmVzcG9uc2VfdHlwZSAzICovCiAgICAgIHhjYl9rZXlfcHJlc3NfZXZlbnRfdCAqa3AgPSAo
eGNiX2tleV9wcmVzc19ldmVudF90KiludnQ7CiAgICAgIERFQlVHKGtwLT5ldmVudCwgIktFWV9S
RUxFQVNFIik7CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfQlVUVE9OX1BSRVNTOiB7
ICAgICAgLyogcmVzcG9uc2VfdHlwZSA0ICovCiAgICAgIHhjYl9idXR0b25fcHJlc3NfZXZlbnRf
dCAqYnA7CiAgICAgIGJwID0gKHhjYl9idXR0b25fcHJlc3NfZXZlbnRfdCopbnZ0OwogICAgICBE
RUJVRyhicC0+ZXZlbnQsICJCVVRUT05fUFJFU1MiKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBj
YXNlIFhDQl9CVVRUT05fUkVMRUFTRTogeyAgICAvKiByZXNwb25zZV90eXBlIDUgKi8KICAgICAg
eGNiX2J1dHRvbl9wcmVzc19ldmVudF90ICpicDsKICAgICAgYnAgPSAoeGNiX2J1dHRvbl9wcmVz
c19ldmVudF90KiludnQ7CiAgICAgIERFQlVHKGJwLT5ldmVudCwgIkJVVFRPTl9SRUxFQVNFIik7
CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfTU9USU9OX05PVElGWTogeyAgICAgLyog
cmVzcG9uc2VfdHlwZSA2ICovCiAgICAgIHhjYl9tb3Rpb25fbm90aWZ5X2V2ZW50X3QgKm1vdGlv
bgogICAgICAgID0gKHhjYl9tb3Rpb25fbm90aWZ5X2V2ZW50X3QqKW52dDsKICAgICAgREVCVUco
bW90aW9uLT5ldmVudCwgIk1PVElPTl9OT1RJRlkiKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBj
YXNlIFhDQl9FTlRFUl9OT1RJRlk6IHsgICAgICAvKiByZXNwb25zZV90eXBlIDcgKi8KICAgICAg
eGNiX2VudGVyX25vdGlmeV9ldmVudF90ICp4aW5nCiAgICAgICAgPSAoeGNiX2VudGVyX25vdGlm
eV9ldmVudF90KiludnQ7CiAgICAgIERFQlVHKHhpbmctPmV2ZW50LCAiRU5URVJfTk9USUZZIik7
CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfTEVBVkVfTk9USUZZOiB7ICAgICAgLyog
cmVzcG9uc2VfdHlwZSA4ICovCiAgICAgIHhjYl9lbnRlcl9ub3RpZnlfZXZlbnRfdCAqeGluZwog
ICAgICAgID0gKHhjYl9lbnRlcl9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJVRyh4aW5n
LT5ldmVudCwgIkxFQVZFX05PVElGWSIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENC
X0ZPQ1VTX0lOOiB7ICAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgOSAqLwogICAgICB4Y2JfZm9j
dXNfaW5fZXZlbnRfdCAqZm9jdXMgPSAoeGNiX2ZvY3VzX2luX2V2ZW50X3QqKW52dDsKICAgICAg
REVCVUcoZm9jdXMtPmV2ZW50LCAiRk9DVVNfSU4iKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBj
YXNlIFhDQl9GT0NVU19PVVQ6IHsgICAgICAgICAvKiByZXNwb25zZV90eXBlIDEwICovCiAgICAg
IHhjYl9mb2N1c19pbl9ldmVudF90ICpmb2N1cyA9ICh4Y2JfZm9jdXNfaW5fZXZlbnRfdCopbnZ0
OwogICAgICBERUJVRyhmb2N1cy0+ZXZlbnQsICJGT0NVU19PVVQiKTsKICAgICAgYnJlYWs7CiAg
ICB9CiAgICBjYXNlIFhDQl9FWFBPU0U6IHsgICAgICAgICAgICAvKiByZXNwb25zZV90eXBlIDEy
ICovCiAgICAgIHhjYl9leHBvc2VfZXZlbnRfdCAqZXhwb3NlID0gKHhjYl9leHBvc2VfZXZlbnRf
dCopbnZ0OwogICAgICBERUJVRyhleHBvc2UtPndpbmRvdywgIkVYUE9TRSIpOwogICAgICBicmVh
azsKICAgIH0KICAgIGNhc2UgWENCX1ZJU0lCSUxJVFlfTk9USUZZOiB7IC8qIHJlc3BvbnNlX3R5
cGUgMTUgKi8KICAgICAgeGNiX3Zpc2liaWxpdHlfbm90aWZ5X2V2ZW50X3QgKnNlZW4KICAgICAg
ICA9ICh4Y2JfdmlzaWJpbGl0eV9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJVRyhzZWVu
LT53aW5kb3csICJWSVNJQklMSVRZX05PVElGWSIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNh
c2UgWENCX0RFU1RST1lfTk9USUZZOiB7ICAgIC8qIHJlc3BvbnNlX3R5cGUgIDE3ICovCiAgICAg
ICAgLyogYXNzdW1lIGEga2lsbCwgZGVsZXRlIGFsbCB3aW5kb3dzIChkbyB0aGVpciB0aGluZykK
ICAgICAgICAgICBzZW5kIGZhbHNlIHRvIGV4aXQgbG9vcCAqLwogICAgICB4Y2JfZGVzdHJveV9u
b3RpZnlfZXZlbnRfdCAqZGVzdHJveQogICAgICAgID0gKHhjYl9kZXN0cm95X25vdGlmeV9ldmVu
dF90KiludnQ7CiAgICAgIERFQlVHKGRlc3Ryb3ktPndpbmRvdywgIlhDQl9ERVNUUk9ZX05PVElG
WSIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX1VOTUFQX05PVElGWTogeyAgICAg
IC8qIHJlc3BvbnNlX3R5cGUgMTggKi8KICAgICAgeGNiX3VubWFwX25vdGlmeV9ldmVudF90ICp1
bm1hcAogICAgICAgID0gKHhjYl91bm1hcF9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJV
Ryh1bm1hcC0+d2luZG93LCAiWENCX1VOTUFQX05PVElGWSIpOwogICAgICBicmVhazsKICAgIH0K
ICAgIGNhc2UgWENCX01BUF9OT1RJRlk6IHsgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMTkgKi8K
ICAgICAgeGNiX21hcF9ub3RpZnlfZXZlbnRfdCAqbWFwCiAgICAgICAgPSAoeGNiX21hcF9ub3Rp
ZnlfZXZlbnRfdCopbnZ0OwogICAgICAgREVCVUcobWFwLT53aW5kb3csICJYQ0JfTUFQX05PVElG
WSIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX1JFUEFSRU5UX05PVElGWTogeyAg
IC8qIHJlc3BvbnNlX3R5cGUgMjEgKi8KICAgICAgeGNiX3JlcGFyZW50X25vdGlmeV9ldmVudF90
ICpycAogICAgICAgID0gKHhjYl9yZXBhcmVudF9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBE
RUJVRyhycC0+d2luZG93LCAiWENCX1JFUEFSRU5UX05PVElGWSIpOwogICAgICBicmVhazsKICAg
IH0KICAgIGNhc2UgWENCX0NPTkZJR1VSRV9OT1RJRlk6IHsgIC8qIHJlc3BvbnNlX3R5cGUgMjIg
Ki8KICAgICAgeGNiX2NvbmZpZ3VyZV9ub3RpZnlfZXZlbnRfdCAqY29uZmlndXJlCiAgICAgICAg
PSAoeGNiX2NvbmZpZ3VyZV9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJVRyhjb25maWd1
cmUtPmV2ZW50LCAiQ09ORklHVVJFX05PVElGWSIpOwogICAgICBicmVhazsKICAgIH0KICAgIGNh
c2UgWENCX1BST1BFUlRZX05PVElGWTogeyAgIC8qIHJlc3BvbnNlX3R5cGUgMjggKi8KICAgICAg
eGNiX3Byb3BlcnR5X25vdGlmeV9ldmVudF90ICpwcm9wCiAgICAgICAgPSAoeGNiX3Byb3BlcnR5
X25vdGlmeV9ldmVudF90KiludnQ7CiAgICAgIERFQlVHKHByb3AtPndpbmRvdywgIlhDQl9QUk9Q
RVJUWV9OT1RJRlkiKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIFhDQl9TRUxFQ1RJT05f
Q0xFQVI6IHsgICAvKiByZXNwb25zZV90eXBlIDI5ICovCiAgICAgIHhjYl9zZWxlY3Rpb25fY2xl
YXJfZXZlbnRfdCAqY2xlYXIKICAgICAgICA9ICh4Y2Jfc2VsZWN0aW9uX2NsZWFyX2V2ZW50X3Qq
KW52dDsKICAgICAgREVCVUcoY2xlYXItPm93bmVyLCAiWENCX1NFTEVDVElPTl9DTEVBUiIpOwog
ICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX1NFTEVDVElPTl9SRVFVRVNUOiB7IC8qIHJl
c3BvbnNlX3R5cGUgMzAgKi8KICAgICAgeGNiX3NlbGVjdGlvbl9yZXF1ZXN0X2V2ZW50X3QgKnJl
cXVlc3QKICAgICAgICA9ICh4Y2Jfc2VsZWN0aW9uX3JlcXVlc3RfZXZlbnRfdCopbnZ0OwogICAg
ICBERUJVRyhyZXF1ZXN0LT5vd25lciwgIlhDQl9TRUxFQ1RJT05fUkVRVUVTVCIpOwogICAgICBi
cmVhazsKICAgIH0KICAgIGNhc2UgWENCX1NFTEVDVElPTl9OT1RJRlk6IHsgIC8qIHJlc3BvbnNl
X3R5cGUgMzEgKi8KICAgICAgeGNiX3NlbGVjdGlvbl9ub3RpZnlfZXZlbnRfdCAqc2VsZWN0aW9u
CiAgICAgICAgPSAoeGNiX3NlbGVjdGlvbl9ub3RpZnlfZXZlbnRfdCopbnZ0OwogICAgICBERUJV
RyhzZWxlY3Rpb24tPnJlcXVlc3RvciwgIlhDQl9TRUxFQ1RJT05fTk9USUZZIik7CiAgICAgIGJy
ZWFrOwogICAgfQogICAgY2FzZSBYQ0JfQ0xJRU5UX01FU1NBR0U6IHsgICAgLyogcmVzcG9uc2Vf
dHlwZSAzMyAqLwogICAgICB4Y2JfY2xpZW50X21lc3NhZ2VfZXZlbnRfdCAqbWVzc2FnZQogICAg
ICAgID0gKHhjYl9jbGllbnRfbWVzc2FnZV9ldmVudF90KiludnQ7CiAgICAgIERFQlVHKG1lc3Nh
Z2UtPndpbmRvdywgIlhDQl9DTElFTlRfTUVTU0FHRSIpOwogICAgICBicmVhazsKICAgIH0KICAg
IGRlZmF1bHQ6CiAgICAgIGlmIChudnQtPnJlc3BvbnNlX3R5cGUgPT0gMCkgewogICAgICAgIHhj
Yl9nZW5lcmljX2Vycm9yX3QgKmVyciA9ICh4Y2JfZ2VuZXJpY19lcnJvcl90KiludnQ7CiAgICAg
ICAgaWYgKGVyci0+ZXJyb3JfY29kZSA9PSAodWludDhfdCkxNDMpCiAgICAgICAgICBwdXRzKCJT
SUdURVJNIHJlY2VpdmVkIik7CiAgICAgICAgZWxzZQogICAgICAgICAgcHJpbnRmKCJlcnJvcjog
JSJQUkl1OCJcbiIsIGVyci0+ZXJyb3JfY29kZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAg
ICAgICAvKiBVbmtub3duIGV2ZW50IHR5cGUsIHVzZSB0byB0cmFjayBjb2RpbmcgcHJvYmxlbXMg
Ki8KICAgICAgcHJpbnRmKCJVbmtub3duIGV2ZW50OiAlIlBSSXU4IlxuIiwgbnZ0LT5yZXNwb25z
ZV90eXBlKTsKICAgICAgYnJlYWs7CiAgfQp9CgoKUGh4SW50ZXJmYWNlICoKX2ludGVyZmFjZV9m
b3IoeGNiX3dpbmRvd190IHdpbmRvdykgewogIHJldHVybiAmaWZhY2UwOwp9CgpzdGF0aWMgYm9v
bApfZXZlbnRfbW91c2UoeGNiX2dlbmVyaWNfZXZlbnRfdCAqbnZ0KSB7CgogIGJvb2wgbG9jdXMg
PSAoKG52dC0+cmVzcG9uc2VfdHlwZSAmICh1aW50OF90KX4weDgwKSA9PSBYQ0JfQlVUVE9OX1BS
RVNTKTsKICB4Y2JfYnV0dG9uX3ByZXNzX2V2ZW50X3QgKm1vdXNlID0gKHhjYl9idXR0b25fcHJl
c3NfZXZlbnRfdCopbnZ0OwoKICBpZiAoIWxvY3VzKSB7CiNpZiBVU0VfWExJQgogICAgaWYgKCFn
cmFiYmVkKSB7CiAgICAgIGdyYWJiZWQgPSB0cnVlOwogICAgICBwdXRzKCJncmFiIHBvaW50ZXIi
KTsKICAgICAgaWYgKEdyYWJTdWNjZXNzICE9IFhHcmFiUG9pbnRlcihkaXNwbGF5LCBtb3VzZS0+
ZXZlbnQsIHRydWUsCiAgICAgICAgICAgICBCdXR0b25QcmVzc01hc2t8QnV0dG9uUmVsZWFzZU1h
c2t8UG9pbnRlck1vdGlvbk1hc2ssCiAgICAgICAgICAgICBHcmFiTW9kZUFzeW5jLCBHcmFiTW9k
ZUFzeW5jLCBOb25lLCBOb25lLCBDdXJyZW50VGltZSkpIHsKICAgICAgICBwdXRzKCJncmFiIGZh
aWxlZCIpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG9uY2UpIHsKICAgICAgcHV0cygidW5ncmFi
IHBvaW50ZXIiKTsKICAgICAgeGNiX3VuZ3JhYl9wb2ludGVyKGNvbm5lY3Rpb24sIFhDQl9DVVJS
RU5UX1RJTUUpOwogICAgICAvKlhVbmdyYWJQb2ludGVyKGRpc3BsYXksIEN1cnJlbnRUaW1lKTsq
LwogICAgICBvbmNlID0gZmFsc2U7CiAgICB9CiNlbHNlCiAgICBQaHhJbnRlcmZhY2UgKmlmYWNl
ID0gX2ludGVyZmFjZV9mb3IobW91c2UtPmV2ZW50KTsKICAgIHhjYl9ncmFiX3BvaW50ZXJfY29v
a2llX3QgZ3JhYl9jb29raWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICB4Y2JfZ3JhYl9wb2ludGVyX3JlcGx5X3QgKmdyYWJfcmVwbHk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICB4Y2JfZ2VuZXJpY19lcnJvcl90ICpn
cmFiX2Vycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgcHV0cygiZ3JhYiBwb2ludGVyIik7CiAgICBncmFiX2Nvb2tpZSA9IHhjYl9ncmFiX3Bv
aW50ZXIoY29ubmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmYWNlLT53aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAg
WENCX0JVVFRPTl9QUkVTU3xYQ0JfQlVUVE9OX1JFTEVBU0V8WENCX01PVElPTl9OT1RJRlksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgWENCX0dSQUJfTU9ERV9BU1lOQywKICAgICAgICAgICAg
ICAgICAgICAgICAgICBYQ0JfR1JBQl9NT0RFX0FTWU5DLCBYQ0JfTk9ORSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBYQ0JfTk9ORSwgWENCX0NVUlJFTlRfVElNRSk7CiAgICBncmFiX3JlcGx5
ID0geGNiX2dyYWJfcG9pbnRlcl9yZXBseShjb25uZWN0aW9uLCBncmFiX2Nvb2tpZSwgJmdyYWJf
ZXJyb3IpOyAgICAKICAgIGlmICghZ3JhYl9yZXBseSB8fCBncmFiX3JlcGx5LT5zdGF0dXMgIT0g
WENCX0dSQUJfU1RBVFVTX1NVQ0NFU1MpIHsgICAgICAgICAgCiAgICAgIHB1dHMoImdyYWIgZmFp
bGVkIik7CiAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgfQojZW5kaWYKICB9IGVsc2Ugewoj
aWYgIVVTRV9YTElCCiAgIC8qeGNiX3VuZ3JhYl9wb2ludGVyKGNvbm5lY3Rpb24sIFhDQl9DVVJS
RU5UX1RJTUUpOyovCiNlbmRpZgogIH0KICByZXR1cm4gdHJ1ZTsKfQoKc3RhdGljIGJvb2wKX2V2
ZW50X2NvbmZpZ3VyZSh4Y2JfZ2VuZXJpY19ldmVudF90ICpudnQpIHsKCiAgeGNiX2NvbmZpZ3Vy
ZV9ub3RpZnlfZXZlbnRfdCAqY29uZmlndXJlCiAgICA9ICh4Y2JfY29uZmlndXJlX25vdGlmeV9l
dmVudF90KiludnQ7CiAgeGNiX3dpbmRvd190IHdpbmRvdyA9IGNvbmZpZ3VyZS0+ZXZlbnQ7CiAg
UGh4SW50ZXJmYWNlICppZmFjZSA9IF9pbnRlcmZhY2VfZm9yKHdpbmRvdyk7CgogIGlmICgqKHVp
bnQ2NF90KikmaWZhY2UtPm1ldGVfYm94LnggPT0gKih1aW50NjRfdCopJmNvbmZpZ3VyZS0+eCkK
ICAgIHJldHVybiB0cnVlOwoKICAgIC8qIERvIGludGVybmFsIGNvbmZpZ3VyYXRpb24gKi8KCiAg
ICAvKiBTZXQgbWV0ZV9ib3ggaWYgbW92ZSBvY2N1cnJlZCAqLwogIGlmICgoY29uZmlndXJlLT54
IHwgY29uZmlndXJlLT55KSAhPSAwKSB7CiAgICBpZiAoIChpZmFjZS0+bWV0ZV9ib3gueCAhPSBj
b25maWd1cmUtPngpCiAgICAgICAgfHwgKGlmYWNlLT5tZXRlX2JveC55ICE9IGNvbmZpZ3VyZS0+
eSkgKSB7CiAgICAgICAgLyogTmVlZGVkLCBpZiB3YW50IGFjY3VyYXRlIHBvc2l0aW9uaW5nLiBX
TSBpcyB1bnJlbGlhYmxlICovCiAgICAgIHhjYl9zY3JlZW5fdCAqc2NyZWVuCiAgICAgICAgPSB4
Y2Jfc2V0dXBfcm9vdHNfaXRlcmF0b3IoeGNiX2dldF9zZXR1cChjb25uZWN0aW9uKSkuZGF0YTsK
ICAgICAgeGNiX3RyYW5zbGF0ZV9jb29yZGluYXRlc19yZXBseV90ICpjZmcKICAgICAgICA9IHhj
Yl90cmFuc2xhdGVfY29vcmRpbmF0ZXNfcmVwbHkoY29ubmVjdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICB4Y2JfdHJhbnNsYXRlX2Nvb3JkaW5hdGVzKGNvbm5lY3Rpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LCBzY3JlZW4tPnJvb3QsIDAsIDAp
LCBOVUxMKTsKICAgICAgaWZhY2UtPm1ldGVfYm94LnggPSBjZmctPmRzdF94OwogICAgICBpZmFj
ZS0+bWV0ZV9ib3gueSA9IGNmZy0+ZHN0X3k7CiAgICAgIGZyZWUoY2ZnKTsKICAgIH0KICB9CiAg
cmV0dXJuIHRydWU7Cn0KCnN0YXRpYyBpbnQzMl90Cl9wcm9jZXNzX3RpbWVycyh2b2lkKSB7CiAg
cmV0dXJuIElOVF9NQVg7Cn0KCnN0YXRpYyBib29sCl9wcm9jZXNzX2V2ZW50KHhjYl9nZW5lcmlj
X2V2ZW50X3QgKm52dCkgewoKICBfZGVidWdfZXZlbnQobnZ0KTsKCiAgc3dpdGNoIChudnQtPnJl
c3BvbnNlX3R5cGUgJiAodWludDhfdCl+MHg4MCkgewoKICAgIGNhc2UgWENCX0tFWV9QUkVTUzog
ICAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMiAqLwogICAgY2FzZSBYQ0JfS0VZX1JFTEVBU0U6
IHsgICAgICAgLyogcmVzcG9uc2VfdHlwZSAzICovCiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNh
c2UgWENCX0JVVFRPTl9QUkVTUzogICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgNCAqLwogICAgY2Fz
ZSBYQ0JfQlVUVE9OX1JFTEVBU0U6IHsgICAgLyogcmVzcG9uc2VfdHlwZSA1ICovCiAgICAgIF9l
dmVudF9tb3VzZShudnQpOwogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlIFhDQl9NT1RJT05f
Tk9USUZZOiB7ICAgICAvKiByZXNwb25zZV90eXBlIDYgKi8KICAgIGNhc2UgWENCX0VOVEVSX05P
VElGWTogICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgNyAqLwogICAgICBicmVhazsKICAgIH0KCiAg
ICBjYXNlIFhDQl9MRUFWRV9OT1RJRlk6IHsgICAgICAvKiByZXNwb25zZV90eXBlIDggKi8KICAg
ICAgZGVidWdfZmxhZ3MgfD0gKCh1aW50NjRfdCkxIDw8IFhDQl9NT1RJT05fTk9USUZZKTsKICAg
ICAgYnJlYWs7CiAgICB9CgogICAgY2FzZSBYQ0JfRk9DVVNfSU46IHsgICAgICAgICAgLyogcmVz
cG9uc2VfdHlwZSA5ICovCiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0ZPQ1VTX09V
VDogeyAgICAgICAgIC8qIHJlc3BvbnNlX3R5cGUgMTAgKi8KI2lmIFVTRV9YTElCCiAgICAgIGlm
IChncmFiYmVkICYmIG9uY2UpIHsKICAgICAgICBwdXRzKCJ1bmdyYWIgcG9pbnRlciIpOwogICAg
ICAgIFhVbmdyYWJQb2ludGVyKGRpc3BsYXksIEN1cnJlbnRUaW1lKTsKICAgICAgICBvbmNlID0g
ZmFsc2U7CiAgICAgIH0KI2VuZGlmCiAgICAgIGJyZWFrOwogICAgfQoKCiAgICBjYXNlIFhDQl9F
WFBPU0U6IHsgICAgICAgICAgICAvKiByZXNwb25zZV90eXBlIDEyICovCiAgICBjYXNlIFhDQl9W
SVNJQklMSVRZX05PVElGWTogICAvKiByZXNwb25zZV90eXBlIDE1ICovCiAgICAgIGJyZWFrOwog
ICAgfQoKICAgIGNhc2UgWENCX0RFU1RST1lfTk9USUZZOiB7ICAgIC8qIHJlc3BvbnNlX3R5cGUg
MTcgKi8KICAgICAgZnJlZShudnQpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAgIC8q
IHRoZXNlIDQgYmVjYXVzZSBvZiBYQ0JfRVZFTlRfTUFTS19TVFJVQ1RVUkVfTk9USUZZICovCiAg
ICBjYXNlIFhDQl9VTk1BUF9OT1RJRlk6IHsgICAgICAvKiByZXNwb25zZV90eXBlIDE4ICovCiAg
ICBjYXNlIFhDQl9NQVBfTk9USUZZOiAgICAgICAgICAvKiByZXNwb25zZV90eXBlIDE5ICovCiAg
ICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBYQ0JfUkVQQVJFTlRfTk9USUZZOiB7ICAgLyogcmVz
cG9uc2VfdHlwZSAyMSAqLwogICAgICAgIC8qIHBvc2l0aW9uIGFmdGVyIG1hcCwgdG8gZGVzaWdu
IHVzZXIgcmVxdWVzdGVkIG9mIHdpbmRvdwogICAgICAgICAqIHNldCBvbmNlIGFuZCB3aGVuIHdp
bmRvdyBtYW5hZ2VyIGFza3MgdG8gcmVwYXJlbnQKICAgICAgICAgKiBkb250IG5lZWQgZHVyaW5n
IGljb24vZGVpY29uaWZ5CiAgICAgICAgICogZG9lc250IHN0b3AgV00gY29uZmlndXJlcywgYnV0
IHdpbGwgYmUgc2VudCBhZnRlciBtYXAgbm90aWZ5ICovCiAgICAgIHhjYl9yZXBhcmVudF9ub3Rp
ZnlfZXZlbnRfdCAqcnAKICAgICAgICA9ICh4Y2JfcmVwYXJlbnRfbm90aWZ5X2V2ZW50X3QqKW52
dDsKICAgICAgUGh4SW50ZXJmYWNlICppZmFjZSA9IF9pbnRlcmZhY2VfZm9yKHJwLT53aW5kb3cp
OwogICAgICB1aW50MzJfdCB2YWx1ZXNbMl07CiAgICAgIHZhbHVlc1swXSA9IGlmYWNlLT5tZXRl
X2JveC54OwogICAgICB2YWx1ZXNbMV0gPSBpZmFjZS0+bWV0ZV9ib3gueTsKICAgICAgeGNiX2Nv
bmZpZ3VyZV93aW5kb3coY29ubmVjdGlvbiwgaWZhY2UtPndpbmRvdywKICAgICAgICAgICAgICAg
ICAgIFhDQl9DT05GSUdfV0lORE9XX1ggfCBYQ0JfQ09ORklHX1dJTkRPV19ZLCB2YWx1ZXMpOwog
ICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgWENCX0NPTkZJR1VSRV9OT1RJRlk6IHsgIC8qIHJl
c3BvbnNlX3R5cGUgMjIgKi8KICAgICAgX2V2ZW50X2NvbmZpZ3VyZShudnQpOwogICAgICBicmVh
azsKICAgIH0KCiAgICBjYXNlIFhDQl9QUk9QRVJUWV9OT1RJRlk6IHsgICAvKiByZXNwb25zZV90
eXBlIDI4ICovCiAgICBjYXNlIFhDQl9TRUxFQ1RJT05fQ0xFQVI6ICAgICAvKiByZXNwb25zZV90
eXBlIDI5ICovCiAgICBjYXNlIFhDQl9TRUxFQ1RJT05fUkVRVUVTVDogICAvKiByZXNwb25zZV90
eXBlIDMwICovCiAgICBjYXNlIFhDQl9TRUxFQ1RJT05fTk9USUZZOiAgICAvKiByZXNwb25zZV90
eXBlIDMxICovCiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgWENCX0NMSUVOVF9NRVNTQUdF
OiB7ICAgIC8qIHJlc3BvbnNlX3R5cGUgMzMgKi8KICAgICAgeGNiX2NsaWVudF9tZXNzYWdlX2V2
ZW50X3QgKmNtCiAgICAgICAgPSAoeGNiX2NsaWVudF9tZXNzYWdlX2V2ZW50X3QqKW52dDsKICAg
ICAgaWYgKGNtLT50eXBlICE9IFdNX1BST1RPQ09MUykgIGdvdG8gcmVwb3J0OwogICAgICB4Y2Jf
dW5tYXBfd2luZG93KGNvbm5lY3Rpb24sIGlmYWNlMC53aW5kb3cpOwogICAgICB4Y2JfZGVzdHJv
eV93aW5kb3coY29ubmVjdGlvbiwgaWZhY2UwLndpbmRvdyk7CiAgICAgIGJyZWFrOwogICAgfQoK
ICAgIGRlZmF1bHQ6CiAgICAgIGlmIChudnQtPnJlc3BvbnNlX3R5cGUgPT0gMCkgewogICAgICAg
IHhjYl9nZW5lcmljX2Vycm9yX3QgKmVyciA9ICh4Y2JfZ2VuZXJpY19lcnJvcl90KiludnQ7CiAg
ICAgICAgcHJpbnRmKCJlcnJvcjogJSJQUkl1OCJcbiIsIGVyci0+ZXJyb3JfY29kZSk7CiAgICAg
ICAgYnJlYWs7CiAgICAgIH0KcmVwb3J0OgogICAgICAgIC8qIFVua25vd24gZXZlbnQgdHlwZSwg
dXNlIHRvIHRyYWNrIGNvZGluZyBwcm9ibGVtcyAqLwogICAgICBwcmludGYoIlVua25vd24gZXZl
bnQ6ICUiUFJJdTgiXG4iLCBudnQtPnJlc3BvbnNlX3R5cGUpOwogICAgICBicmVhazsKCiAgfSAv
KiBlbmQgc3dpdGNoKHJlc3BvbnNlX3R5cGUpICovCiAgICAvKiBudnQgbm8gbG9uZ2VyIG5lZWRl
ZCAqLwogIGZyZWUobnZ0KTsKICAgIC8qIGNyaXRpY2FsISBvdGhlcndpc2Ugd29udCBwcm9jZXNz
IGFueXRoaW5nIGRvbmUgKi8KICB4Y2JfZmx1c2goY29ubmVjdGlvbik7CiAgcmV0dXJuIHRydWU7
Cn0KCnN0YXRpYyB2b2lkCnhjYl9tYWluKHZvaWQpIHsKCiAgICAvKiBzZXQgYWxsIGJlZm9yZSB0
aHJvdWdoIHRvIFhzZXJ2ZXIgKi8KICB4Y2JfZmx1c2goY29ubmVjdGlvbik7CgogIGRvIHsKICAg
IGludCB0aW1lb3V0OwogICAgeGNiX2dlbmVyaWNfZXZlbnRfdCAqZXZlbnQ7CiAgICB3aGlsZSAo
KGV2ZW50ID0geGNiX3BvbGxfZm9yX2V2ZW50KGNvbm5lY3Rpb24pKSAhPSBOVUxMKQogICAgICAg
IC8qIF9wcm9jZXNzX2V2ZW50KCkgcmV0dXJucyAncnVubmluZycgZm9yIG1haW4gbG9vcC4gKi8K
ICAgICAgaWYgKF9wcm9jZXNzX2V2ZW50KGV2ZW50KSA9PSBmYWxzZSkgIGdvdG8gY2xlYW51cDsK
ICAgIGRvIHsKICAgICAgICAvKiBfcHJvY2Vzc190aW1lcnMoKSBydW5zIGFueSB0aW1lcnMgdGhh
dCBhcmUgaW1tZWRpYXRlbHkgcGVuZGluZywKICAgICAgICAgICBhbmQgcmV0dXJucyB0aGUgbnVt
YmVyIG9mIG1pbGxpc2Vjb25kcyB1bnRpbCB0aGUgbmV4dCB0aW1lcgogICAgICAgICAgIGluIHRo
ZSBxdWV1ZSBpcyByZWFkeS4KICAgICAgICAgICBfcHJvY2Vzc190aW1lcnMoKSByZXR1cm5zIElO
VF9NQVggaWYgdGhlcmUgYXJlIG5vIHRpbWVycy4gKi8KICAgICAgICAvKiBfcHJvY2Vzc190aW1l
cnMoKSBhbHNvIHJlbW92ZXMgZnJvbSB0aW1lb3V0IGl0cyBydW4gdGltZS4gKi8KICAgICAgdGlt
ZW91dCA9IF9wcm9jZXNzX3RpbWVycygpOwogICAgICBpZiAoKGV2ZW50ID0geGNiX3BvbGxfZm9y
X3F1ZXVlZF9ldmVudChjb25uZWN0aW9uKSkgPT0gTlVMTCkgIGJyZWFrOwogICAgICAgIGlmIChf
cHJvY2Vzc19ldmVudChldmVudCkgPT0gZmFsc2UpICBnb3RvIGNsZWFudXA7CiAgICB9IHdoaWxl
ICgxKTsKICAgIGlmICh0aW1lb3V0ID4gNikgewogICAgICBzdHJ1Y3QgcG9sbGZkIHBmZFsxXTsK
ICAgICAgcGZkLT5mZCA9IHhjYl9nZXRfZmlsZV9kZXNjcmlwdG9yKGNvbm5lY3Rpb24pOwogICAg
ICBwZmQtPmV2ZW50cyA9IFBPTExJTjsKICAgICAgcGZkLT5yZXZlbnRzID0gUE9MTE9VVDsKICAg
ICAgcG9sbChwZmQsIDEsIHRpbWVvdXQpOwogICAgfQogIH0gd2hpbGUgKDEpOwogICAgLyogcmVj
ZWl2ZWQgWENCX0RFU1RST1lfTk9USUZZICovCmNsZWFudXA6CiAgcmV0dXJuOwp9Cgp2b2lkCnVp
X3dpbmRvd19uYW1lKHhjYl93aW5kb3dfdCB3aW5kb3cpIHsKCiAgeGNiX2ludGVybl9hdG9tX2Nv
b2tpZV90IGNvb2tpZQogICAgPSB4Y2JfaW50ZXJuX2F0b20oY29ubmVjdGlvbiwgMSwgNywgIldN
X05BTUUiKTsKICB4Y2JfaW50ZXJuX2F0b21fcmVwbHlfdCAqcmVwbHkKICAgID0geGNiX2ludGVy
bl9hdG9tX3JlcGx5KGNvbm5lY3Rpb24sIGNvb2tpZSwgTlVMTCk7CiAgeGNiX2ludGVybl9hdG9t
X2Nvb2tpZV90IGNvb2tpZTIKICAgID0geGNiX2ludGVybl9hdG9tKGNvbm5lY3Rpb24sIDAsIDYs
ICJTVFJJTkciKTsKICB4Y2JfaW50ZXJuX2F0b21fcmVwbHlfdCAqcmVwbHkyCiAgICA9IHhjYl9p
bnRlcm5fYXRvbV9yZXBseShjb25uZWN0aW9uLCBjb29raWUyLCBOVUxMKTsKCiAgY2hhciB0aXRs
ZVsxNl07CiAgc3ByaW50Zih0aXRsZSwgIiVkIiwgd2luZG93KTsKICB4Y2JfY2hhbmdlX3Byb3Bl
cnR5KGNvbm5lY3Rpb24sIFhDQl9QUk9QX01PREVfUkVQTEFDRSwgd2luZG93LAogICAgICAgICAg
ICAgICAgICAgICAgIHJlcGx5LT5hdG9tLCByZXBseTItPmF0b20sIDgsCiAgICAgICAgICAgICAg
ICAgICAgICAgc3RybGVuKHRpdGxlKSwgdGl0bGUpOwogIGZyZWUocmVwbHkpOwogIGZyZWUocmVw
bHkyKTsKfQoKc3RhdGljIHZvaWQKX3dpbmRvd19ldmVudF9kZWxldGUoeGNiX2Nvbm5lY3Rpb25f
dCAqY29ubmVjdGlvbiwgeGNiX3dpbmRvd190IHdpbmRvdykgewoKICAgIC8qIGFsbG93IGRlbGV0
ZSB3aW5kb3cgc28gY2FuIHF1aXQgYXBwbGljYXRpb24uIEF2b2lkIF5DLiAqLwogIHhjYl9jaGFu
Z2VfcHJvcGVydHkoY29ubmVjdGlvbiwgWENCX1BST1BfTU9ERV9SRVBMQUNFLCB3aW5kb3csCiAg
ICAgICAgICAgICAgICAgICAgICBXTV9QUk9UT0NPTFMsIFhDQl9BVE9NX0FUT00sIDMyLCAxLAog
ICAgICAgICAgICAgICAgICAgICAgJldNX0RFTEVURV9XSU5ET1cpOwp9CgpzdGF0aWMgeGNiX3dp
bmRvd190CnVpX3dpbmRvd19jcmVhdGUoUGh4UmVjdGFuZ2xlIGNvbmZpZ3VyZSkgewoKICB4Y2Jf
c2NyZWVuX3QgKnNjcmVlbjsKICB4Y2Jfd2luZG93X3Qgd2luZG93OwogIHVpbnQzMl90IG1hc2s7
CiAgdWludDMyX3QgdmFsdWVzWzJdOwoKICBpZiAoY29ubmVjdGlvbiA9PSBOVUxMKSB7CiAgICB4
Y2JfaW50ZXJuX2F0b21fY29va2llX3QgYzAsIGMxOwogICAgeGNiX2ludGVybl9hdG9tX3JlcGx5
X3QgKnIwLCAqcjE7CiNpZiBVU0VfWExJQgogICAgZGlzcGxheSA9IFhPcGVuRGlzcGxheShOVUxM
KTsKICAgIGNvbm5lY3Rpb24gPSBYR2V0WENCQ29ubmVjdGlvbihkaXNwbGF5KTsKI2Vsc2UKICAg
IGNvbm5lY3Rpb24gPSB4Y2JfY29ubmVjdChOVUxMLCBOVUxMKTsKI2VuZGlmCiAgICBjMCA9IHhj
Yl9pbnRlcm5fYXRvbShjb25uZWN0aW9uLCAwLCAxMiwgIldNX1BST1RPQ09MUyIpOwogICAgYzEg
PSB4Y2JfaW50ZXJuX2F0b20oY29ubmVjdGlvbiwgMCwgMTYsICJXTV9ERUxFVEVfV0lORE9XIik7
CiAgICByMCA9IHhjYl9pbnRlcm5fYXRvbV9yZXBseShjb25uZWN0aW9uLCBjMCwgTlVMTCk7CiAg
ICByMSA9IHhjYl9pbnRlcm5fYXRvbV9yZXBseShjb25uZWN0aW9uLCBjMSwgTlVMTCk7CiAgICBX
TV9QUk9UT0NPTFMgICAgID0gcjAtPmF0b207ICBmcmVlKCh2b2lkKilyMCk7CiAgICBXTV9ERUxF
VEVfV0lORE9XID0gcjEtPmF0b207ICBmcmVlKCh2b2lkKilyMSk7CiAgfQoKICBzY3JlZW4gPSB4
Y2Jfc2V0dXBfcm9vdHNfaXRlcmF0b3IoeGNiX2dldF9zZXR1cChjb25uZWN0aW9uKSkuZGF0YTsK
ICAgIC8qIENyZWF0ZSB0aGUgd2luZG93ICovCiAgd2luZG93ID0geGNiX2dlbmVyYXRlX2lkKGNv
bm5lY3Rpb24pOwoKICBtYXNrICAgICAgPSBYQ0JfQ1dfQkFDS19QSVhFTCB8IFhDQl9DV19FVkVO
VF9NQVNLOwogIHZhbHVlc1swXSA9IHNjcmVlbi0+d2hpdGVfcGl4ZWw7CiAgdmFsdWVzWzFdID0g
WENCX0VWRU5UX01BU0tfRVhQT1NVUkUgICAgICAgfCBYQ0JfRVZFTlRfTUFTS19CVVRUT05fUFJF
U1MgICB8CiAgICAgICAgICAgICAgWENCX0VWRU5UX01BU0tfQlVUVE9OX1JFTEVBU0UgfCBYQ0Jf
RVZFTlRfTUFTS19QT0lOVEVSX01PVElPTiB8CiAgICAgICAgICAgICAgWENCX0VWRU5UX01BU0tf
RU5URVJfV0lORE9XICAgfCBYQ0JfRVZFTlRfTUFTS19MRUFWRV9XSU5ET1cgICB8CiAgICAgICAg
ICAgICAgWENCX0VWRU5UX01BU0tfS0VZX1BSRVNTICAgICAgfCBYQ0JfRVZFTlRfTUFTS19LRVlf
UkVMRUFTRSAgICB8CiAgICAgICAgICAgICAgWENCX0VWRU5UX01BU0tfRk9DVVNfQ0hBTkdFICAg
fCBYQ0JfRVZFTlRfTUFTS19TVFJVQ1RVUkVfTk9USUZZIHwKICAgICAgICAgICAgICBYQ0JfRVZF
TlRfTUFTS19WSVNJQklMSVRZX0NIQU5HRTsKCiAgICAvKiBpZ25vcmVzIHgsIHksIGJvcmRlcl93
aWR0aCAodmlydXMpICovCiAgeGNiX2NyZWF0ZV93aW5kb3coY29ubmVjdGlvbiwKICAgICAgICAg
ICAgICAgICAgICBzY3JlZW4tPnJvb3RfZGVwdGgsICAgICAgICAgICAgLyogZGVwdGggICAgICAg
ICAgKi8KICAgICAgICAgICAgICAgICAgICB3aW5kb3csICAgICAgICAgICAgICAgICAgICAgICAg
LyogZ2VuZXJhdGVkIGlkICAgKi8KICAgICAgICAgICAgICAgICAgICBzY3JlZW4tPnJvb3QsICAg
ICAgICAgICAgICAgICAgLyogcGFyZW50IHdpbmRvdyAgKi8KICAgICAgICAgICAgICAgICAgICBj
b25maWd1cmUueCwgICAgICAgICAgICAgICAgICAgLyogeCwgeSAgICAgICAgICAgKi8KICAgICAg
ICAgICAgICAgICAgICBjb25maWd1cmUueSwKICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUu
dywgICAgICAgICAgICAgICAgICAgLyogd2lkdGgsIGhlaWdodCAgKi8KICAgICAgICAgICAgICAg
ICAgICBjb25maWd1cmUuaCwKICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLyogYm9yZGVyX3dpZHRoICAgKi8KICAgICAgICAgICAgICAgICAgICBYQ0Jf
V0lORE9XX0NMQVNTX0lOUFVUX09VVFBVVCwgLyogY2xhc3MgICAgICAgICAgKi8KICAgICAgICAg
ICAgICAgICAgICBzY3JlZW4tPnJvb3RfdmlzdWFsLCAgICAgICAgICAgLyogdmlzdWFsICAgICAg
ICAgKi8KICAgICAgICAgICAgICAgICAgICBtYXNrLCB2YWx1ZXMpOyAgICAgICAgICAgICAgICAg
LyogbWFza3MgKi8KICBfd2luZG93X2V2ZW50X2RlbGV0ZShjb25uZWN0aW9uLCB3aW5kb3cpOwog
IGlmYWNlMC5tZXRlX2JveCA9IGNvbmZpZ3VyZTsKICBpZmFjZTAud2luZG93ID0gd2luZG93Owog
IHJldHVybiB3aW5kb3c7Cn0KCmludAptYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKCiAg
eGNiX3dpbmRvd190IHdpbmRvdzsKCiAgICAvKiB3aW5kb3cgc2l6ZSBhbmQgcG9zaXRpb24gKi8K
ICBQaHhSZWN0YW5nbGUgY29uZmlndXJlID0geyA4MDAsIDIwMCwgMzAwLCAyMDAgfTsKCiAgICAv
KiB0dXJuIG9ubHkgbGVhdmUgb24sIHdpbGwgdHVybiBvbiBhZnRlciBsZWF2ZSAqLwogIGRlYnVn
X2ZsYWdzID0gKCh1aW50NjRfdCkxIDw8IFhDQl9MRUFWRV9OT1RJRlkpOwogIGRlYnVnX2ZsYWdz
IHw9ICgodWludDY0X3QpMSA8PCBYQ0JfQlVUVE9OX1BSRVNTKTsKICBkZWJ1Z19mbGFncyB8PSAo
KHVpbnQ2NF90KTEgPDwgWENCX0JVVFRPTl9SRUxFQVNFKTsKCiAgICAvKiBBICd0b3Btb3N0JyBk
ZWNvcmF0ZWQgd2luZG93ICovCiAgd2luZG93ID0gdWlfd2luZG93X2NyZWF0ZShjb25maWd1cmUp
OwogIGlmICh3aW5kb3cgPT0gMCkgIGV4aXQoRVhJVF9GQUlMVVJFKTsKCiAgdWlfd2luZG93X25h
bWUod2luZG93KTsKCiAgICAvKiBNYXAgdGhlIHdpbmRvdyBvbiB0aGUgc2NyZWVuICovCiAgeGNi
X21hcF93aW5kb3coY29ubmVjdGlvbiwgd2luZG93KTsKCiAgICAvKiBSdW4gZXZlbnQgbG9vcCAq
LwogIHhjYl9tYWluKCk7CgogIHJldHVybiBFWElUX1NVQ0NFU1M7Cn0K

--=-3hZ/YvcT6wA2NL7ABgWE--