Discussion:
unknown
1970-01-01 00:00:00 UTC
Permalink
- inline VOID
- InsertTailList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY Entry
- )
-{
-// #define InsertTailList(ListHead,Entry) {
- PLIST_ENTRY _EX_Blink;
- PLIST_ENTRY _EX_ListHead;
- _EX_ListHead =3D (ListHead);
- _EX_Blink =3D _EX_ListHead->Blink;
- Entry->Flink =3D _EX_ListHead;
- Entry->Blink =3D _EX_Blink;
- _EX_Blink->Flink =3D (Entry);
- _EX_ListHead->Blink =3D (Entry);
- }
-/*++
-
-Routine Description:
-
- Inserts a new item as the "tail" (last) item of a linked list.
-
-Arguments:
-
- ListHead - Supplies a reference to the head of the linked list =
to be
- operated upon.
-
- Entry - Supplies a reference to the linkage structure embedded i=
n the
- linked list item to be added to the linked list.
-
-Return Value:
-
- None
---*/
-
-
-
-

- inline VOID
- InsertHeadList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY Entry
- )
-{
-// #define InsertHeadList(ListHead,Entry) {
- PLIST_ENTRY _EX_Flink;
- PLIST_ENTRY _EX_ListHead;
- _EX_ListHead =3D (ListHead);
- _EX_Flink =3D _EX_ListHead->Flink;
- (Entry)->Flink =3D _EX_Flink;
- (Entry)->Blink =3D _EX_ListHead;
- _EX_Flink->Blink =3D (Entry);
- _EX_ListHead->Flink =3D (Entry);
-}
-/*++
-
-Routine Description:
-
- Inserts a new item as the "head" (first) item of a linked list.
-
-Arguments:
-
- ListHead - Supplies a reference to the head of the linked list =
to be
- operated upon.
-
- Entry - Supplies a reference to the linkage structure embedded i=
n the
- linked list item to be added to the linked list.
-
-Return Value:
-
- None
---*/
-
-
-
-//
-//
-// PSINGLE_LIST_ENTRY
-// PopEntryList(
-// PSINGLE_LIST_ENTRY ListHead
-// );
-//
-
-#define PopEntryList(ListHead) \
- (ListHead)->Next;\
- {\
- PSINGLE_LIST_ENTRY FirstEntry;\
- FirstEntry =3D (ListHead)->Next;\
- if (FirstEntry !=3D NULL) { \
- (ListHead)->Next =3D FirstEntry->Next;\
- } \
- }
-
-
-//
-// VOID
-// PushEntryList(
-// PSINGLE_LIST_ENTRY ListHead,
-// PSINGLE_LIST_ENTRY Entry
-// );
-//
-
-#define PushEntryList(ListHead,Entry) \
- (Entry)->Next =3D (ListHead)->Next; \
- (ListHead)->Next =3D (Entry)
-
-
-// Samples:
-//
-// //
-// // Define a list head.
-// //
-//
-// LIST_ENTRY FooList;
-//
-// //
-// // Define a structure that will be on the list.
-// //
-// // NOTE: For debugging purposes, it usually makes life simpler to mak=
e the
-// // LIST_ENTRY the first field of the structure, but this is =
not a
-// // requirement.
-// //
-//
-// typedef struct _FOO
-// {
-// LIST_ENTRY FooListEntry;
-// .
-// .
-// .
-//
-// } FOO, * PFOO;
-//
-// //
-// // Initialize an empty list.
-// //
-//
-// InitializeListHead( &FooList );
-//
-// //
-// // Create an object, append it to the end of the list.
-// //
-//
-// PFOO foo;
-//
-// foo =3D ALLOC( sizeof(FOO) );
-// {check for errors, initialize FOO structure}
-//
-// InsertTailList( &FooList, &foo->FooListEntry );
-//
-// //
-// // Scan list and delete selected items.
-// //
-//
-// PFOO foo;
-// PLIST_ENTRY listEntry;
-//
-// listEntry =3D FooList.Flink;
-//
-// while( listEntry !=3D &FooList )
-// {
-// foo =3D CONTAINING_RECORD( listEntry,
-// FOO,
-// FooListEntry );
-// listEntry =3D listEntry->Flink;
-//
-// if( SomeFunction( foo ) )
-// {
-// RemoveEntryList( &foo->FooListEntry );
-// FREE( foo );
-// }
-// }
-//
-// //
-// // Purge all items from a list.
-// //
-//
-// PFOO foo;
-// PLIST_ENTRY listEntry;
-//
-// while( !IsListEmpty( &FooList ) )
-// {
-// listEntry =3D RemoveHeadList( &FooList );
-// foo =3D CONTAINING_RECORD( listEntry,
-// FOO,
-// FooListEntry );
-//
-// FREE( foo );
-// }
-
-
-#endif // _LLIST_
-

--_002_62d640303571471cb1282381042b247bDFMCO1MBX1502exchangeco_
Content-Type: application/octet-stream; name="ndv2.16.patch"
Content-Description: ndv2.16.patch
Content-Disposition: attachment; filename="ndv2.16.patch"; size=21286;
creation-date="Wed, 20 Feb 2013 20:56:55 GMT";
modification-date="Wed, 13 Feb 2013 19:24:57 GMT"
Content-Transfer-Encoding: base64

ZGlmZiAtZHd1cDMgLXggKnN2biogLXggbWFrZWZpbGUgLXggc291cmNlcyAtciBjOlxkZXZcb3Bl
bmliXG9md1xnZW4xXGJyYW5jaGVzXG1seDRfMzBcdHJ1bmtcY29yZVxhbFxhbF9jb21tb24uaCAu
XGNvcmVcYWxcYWxfY29tbW9uLmgNCi0tLSBjOlxkZXZcb3BlbmliXG9md1xnZW4xXGJyYW5jaGVz
XG1seDRfMzBcdHJ1bmtcY29yZVxhbFxhbF9jb21tb24uaAlXZWQgQXVnIDAxIDE3OjE2OjUxIDIw
MTINCisrKyAuXGNvcmVcYWxcYWxfY29tbW9uLmgJVGh1IEp1bCAyNiAxNTozMToxMyAyMDEyDQpA
QCAtMjY5LDcgKzI2OSw3IEBAIHR5cGVkZWYgc3RydWN0IF9hbF9vYmoNCiAJY2xfc3BpbmxvY2tf
dAkJCQlsb2NrOw0KIAljbF9xbGlzdF90CQkJCQlvYmpfbGlzdDsNCiAJYXRvbWljMzJfdAkJCQkJ
cmVmX2NudDsNCi0jaWYgREJHDQorI2lmIGRlZmluZWQoQ0xfS0VSTkVMKSAmJiBEQkcNCiAJb2Jq
X3JlZl90cmFjZV90CQkJCXJlZl90cmFjZTsNCiAjZW5kaWYNCiAJY2xfbGlzdF9pdGVtX3QJCQkJ
bGlzdF9pdGVtOw0KZGlmZiAtZHd1cDMgLXggKnN2biogLXggbWFrZWZpbGUgLXggc291cmNlcyAt
ciBjOlxkZXZcb3BlbmliXG9md1xnZW4xXGJyYW5jaGVzXG1seDRfMzBcdHJ1bmtcY29yZVxhbFxh
bF9yZWZfdHJhY2UuYyAuXGNvcmVcYWxcYWxfcmVmX3RyYWNlLmMNCi0tLSBjOlxkZXZcb3Blbmli
XG9md1xnZW4xXGJyYW5jaGVzXG1seDRfMzBcdHJ1bmtcY29yZVxhbFxhbF9yZWZfdHJhY2UuYwlX
ZWQgQXVnIDAxIDE3OjE2OjUxIDIwMTINCisrKyAuXGNvcmVcYWxcYWxfcmVmX3RyYWNlLmMJVGh1
IE1heSAzMSAxMjo1NDoxMiAyMDEyDQpAQCAtMzgsOSArMzgsNjYgQEANCiANCiAjaWZkZWYgQ0xf
S0VSTkVMDQogI2luY2x1ZGUgPHdkbS5oPg0KLSNlbHNlDQotI2luY2x1ZGUgIkxsaXN0LmgiDQot
I2VuZGlmDQorDQordHlwZWRlZiBlbnVtIHsNCisJQUxfREFUQV9OT0RFLA0KKwlBTF9ESVJUWV9D
SEFJTl9OT0RFIA0KK30gYWxfbm9kZV90eXBlX3Q7DQorDQorDQorI2RlZmluZSBSRUZfVFJBQ0Vf
TUFYX0VOVFJJRVMJCQkweDIwMDANCisjZGVmaW5lIFJFRl9UUkFDRV9EQl9FTlRSSUVTCQkJMHhG
MDAwMA0KKw0KK3R5cGVkZWYgc3RydWN0IF9yZWZfY250X2RhdGENCit7DQorCWNoYXIqCQkJCQlm
aWxlX25hbWU7DQorCUxPTkcJCQkJCXByZXZfcmVmX3ZhbDsNCisJdWludDMyX3QJCQkJbGluZV9u
dW07DQorCXVpbnQ4X3QJCQkJCXB1cmdlX3R5cGU7DQorCXVpbnQxNl90CQkJCXJlcGVhdF9jbnQ7
DQorCXVpbnQ4X3QJCQkJCXJlZl9jaGFuZ2U7IAkvL2FsX3JlZl9jaGFuZ2VfdHlwZV90DQorCXVp
bnQ4X3QJCQkJCXJlZl9jdHg7IAkJLy9lbnVtIGVfcmVmX3R5cGUNCisNCit9IHJlZl9jbnRfZGF0
YV90Ow0KKw0KK3R5cGVkZWYgc3RydWN0IF9yZWZfY250X2RpcnR5X2xpc3QNCit7DQorCXZvaWQq
CQkJCQlwX2FsX29iajsNCisJdWludDMyX3QJCQkJdHlwZTsNCisJbG9uZwkJCQkJb2JqX2xpc3Rf
c2l6ZTsNCisJTElTVF9FTlRSWQkJCQlkaXJ0eV9saXN0Ow0KK30gcmVmX2NudF9kaXJ0eV9saXN0
X3Q7DQorDQorDQordHlwZWRlZiB1bmlvbiBfcmVmX2RiX2VudHJ5DQorew0KKwlyZWZfY250X2Rh
dGFfdCAJCQlyZWZfY250X2RhdGE7DQorCXJlZl9jbnRfZGlydHlfbGlzdF90CXJlZl9kaXJ0eV9s
aXN0Ow0KKw0KK30gcmVmX2RiX2VudHJ5X3Q7DQorDQordHlwZWRlZiBzdHJ1Y3QgX3JlZl9kYl9u
b2RlDQorew0KKwl1aW50OF90CQkJCQl0eXBlOwkJLy9hbF9ub2RlX3R5cGVfdA0KKwlyZWZfZGJf
ZW50cnlfdCAJCQllbnRyeTsNCisJTElTVF9FTlRSWQkJCQlsaXN0X2VudHJ5Ow0KK30gcmVmX2Ri
X25vZGVfdDsNCisNCit0eXBlZGVmIHN0cnVjdCBfcmVmX2NudF9kYmdfZGINCit7DQorCUxJU1Rf
RU5UUlkgCQkJCQlmcmVlX2NoYWluOw0KKwljbF9zcGlubG9ja190CQkJCWZyZWVfY2hhaW5fbG9j
azsNCisJDQorCUxJU1RfRU5UUlkgCQkJCQlkaXJ0eV9jaGFpbjsNCisJY2xfc3BpbmxvY2tfdAkJ
CQlkaXJ0eV9jaGFpbl9sb2NrOw0KKw0KKwlVTE9ORwkJCQkJCXBvbGljeTsNCisJTE9ORyAJCQkJ
CQltYXhfY2hhaW5fc2l6ZTsNCisJdWludDMyX3QJCQkJCW1heF9jaGFpbl9vYmpfdHlwZTsNCisJ
aW50MzJfdAkJCQkJCW5lZWRlZF9zaXplOw0KKwl2b2xhdGlsZSBsb25nCQkJCW9iamVjdHNfbnVt
Ow0KKwlyZWZfZGJfbm9kZV90CQkJCXJlZl9jbnRfZGJbUkVGX1RSQUNFX0RCX0VOVFJJRVNdOw0K
K30gcmVmX2NudF9kYmdfZGJfdDsNCiANCiByZWZfY250X2RiZ19kYl90IGdfcmVmX2NudF9kYmdf
ZGI7DQogDQpAQCAtNDksOSArMTA2LDEyIEBAIHJlZl9jbnRfZGJnX2RiX3QgZ19yZWZfY250X2Ri
Z19kYjsNCiAgICAgICgoVUxPTkdfUFRSKWFkZHJlc3MgPCAoVUxPTkdfUFRSKShnX3JlZl9jbnRf
ZGJnX2RiLnJlZl9jbnRfZGIpK1JFRl9UUkFDRV9EQl9FTlRSSUVTKnNpemVvZihyZWZfZGJfbm9k
ZV90KSkpDQogDQogDQorI2VuZGlmICAvLyBDTF9LRVJORUwNCisNCiB2b2lkDQogcmVmX3RyYWNl
X2RiX2luaXQoVUxPTkcgcG9saWN5KQ0KIHsJDQorI2lmZGVmIENMX0tFUk5FTA0KIAlpbnQgaSA9
IDA7DQogDQogCWNsX21lbWNscigmZ19yZWZfY250X2RiZ19kYiwgc2l6ZW9mKGdfcmVmX2NudF9k
YmdfZGIpKTsNCkBAIC03MiwxMyArMTMyLDE2IEBAIHJlZl90cmFjZV9kYl9pbml0KFVMT05HIHBv
bGljeSkNCiANCiAJZ19yZWZfY250X2RiZ19kYi5wb2xpY3kgPSBwb2xpY3k7DQogCWdfcmVmX2Nu
dF9kYmdfZGIubmVlZGVkX3NpemUgPSBSRUZfVFJBQ0VfREJfRU5UUklFUzsNCi0NCisjZWxzZSAg
IC8vIENMX0tFUk5FTA0KKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBvbGljeSk7DQorI2Vu
ZGlmICAvLyBDTF9LRVJORUwNCiB9DQogDQogdm9pZA0KIHJlZl90cmFjZV9pbml0KA0KIAlJTgkJ
CQl2b2lkICogY29uc3QJCQlwX29iaikNCiB7DQorI2lmZGVmIENMX0tFUk5FTA0KIAlhbF9vYmpf
dCogcF9hbF9vYmogPSAoYWxfb2JqX3QqKXBfb2JqOw0KIAkJDQogCUluaXRpYWxpemVMaXN0SGVh
ZCgmcF9hbF9vYmotPnJlZl90cmFjZS5yZWZfY2hhaW4pOw0KQEAgLTg3LDYgKzE1MCw5IEBAIHJl
Zl90cmFjZV9pbml0KA0KIAljbF9zcGlubG9ja19pbml0KCAmcF9hbF9vYmotPnJlZl90cmFjZS5s
b2NrICk7DQogDQogCXBfYWxfb2JqLT5yZWZfdHJhY2UubGlzdF9zaXplID0gMDsNCisjZWxzZSAg
IC8vIENMX0tFUk5FTA0KKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBfb2JqKTsNCisjZW5k
aWYgIC8vIENMX0tFUk5FTA0KIH0NCiANCiAvLyBJbnNlcnRzIHRoZSBkZXN0X2xpc3QgaW50byB0
aGUgYmVnaW5uaW5nIG9mIHRoZSBzcmNfbGlzdA0KQEAgLTk2LDcgKzE2Miw3IEBAIHJlZl90cmFj
ZV9pbnNlcnRfaGVhZF9saXN0KA0KIAlQTElTVF9FTlRSWSBzcmNfbGlzdCwNCiAJUExJU1RfRU5U
UlkgZGVzdF9saXN0KQ0KIHsNCi0JDQorI2lmZGVmIENMX0tFUk5FTA0KIAlQTElTVF9FTlRSWSAg
c3JjX2ZpcnN0ID0gc3JjX2xpc3QtPkZsaW5rOw0KIAlQTElTVF9FTlRSWSAgc3JjX2xhc3QgPSBz
cmNfbGlzdC0+Qmxpbms7DQogCVBMSVNUX0VOVFJZICBkZXN0X2ZpcnN0ID0gZGVzdF9saXN0LT5G
bGluazsNCkBAIC0xMDYsMTAgKzE3MiwxNSBAQCByZWZfdHJhY2VfaW5zZXJ0X2hlYWRfbGlzdCgN
CiAJDQogCXNyY19sYXN0LT5GbGluayA9IGRlc3RfZmlyc3Q7DQogCWRlc3RfZmlyc3QtPkJsaW5r
ID0gc3JjX2xhc3Q7DQorI2Vsc2UgICAvLyBDTF9LRVJORUwNCisgICAgVU5SRUZFUkVOQ0VEX1BB
UkFNRVRFUihzcmNfbGlzdCk7DQorICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIoZGVzdF9saXN0
KTsNCisjZW5kaWYgIC8vIENMX0tFUk5FTA0KIH0NCiANCiANCi1QTElTVF9FTlRSWQ0KKyNpZmRl
ZiBDTF9LRVJORUwNCitzdGF0aWMgUExJU1RfRU5UUlkNCiByZWZfdHJhY2VfYWxsb2NfZW50cnko
KQ0KIHsNCiAJUExJU1RfRU5UUlkgCQkJZnJlZV9lbnRyeTsNCkBAIC0xNTIsNyArMjIzLDcgQEAg
cmVmX3RyYWNlX2FsbG9jX2VudHJ5KCkNCiB9DQogDQogDQotUExJU1RfRU5UUlkNCitzdGF0aWMg
UExJU1RfRU5UUlkNCiByZWZfdHJhY2VfYWxsb2NfZGlydHlfbGlzdCgNCiAJSU4JCQkJYWxfb2Jq
X3QgKiBjb25zdAkJcF9vYmosDQogCU9VVCAJCQlyZWZfZGJfbm9kZV90KiogCQlyZWZfbm9kZSkN
CkBAIC0xNzgsMTkgKzI0OSwyMSBAQCByZWZfdHJhY2VfYWxsb2NfZGlydHlfbGlzdCgNCiAJcmV0
dXJuICZyZWZfZW50cnktPmRpcnR5X2xpc3Q7DQogfQ0KIA0KLWJvb2xlYW5fdA0KKw0KK3N0YXRp
YyBib29sZWFuX3QNCiByZWZfdHJhY2VfaXNfbG9nZ2VkX29iaigNCiAJSU4JCQkJYWxfb2JqX3Qg
KiBjb25zdAkJCXBfb2JqICkNCiB7DQogCXJldHVybiAocF9vYmotPnR5cGUgPT0gQUxfT0JKX1RZ
UEVfSF9BTCk7DQogfQ0KLQ0KKyNlbmRpZiAgLy8gQ0xfS0VSTkVMDQogDQogLy8gRGVzdHJveXMg
dGhlIG9iamVjdCdzIHJlZiB0cmFjZSBjaGFpbg0KIHZvaWQNCiByZWZfdHJhY2VfZGVzdHJveSgN
CiAJSU4JCQkJdm9pZCAqIGNvbnN0CQkJcF9vYmogKQ0KIHsNCisjaWZkZWYgQ0xfS0VSTkVMDQog
CWFsX29ial90KiBwX2FsX29iaiA9IChhbF9vYmpfdCopcF9vYmo7DQogCQ0KIAljbF9zcGlubG9j
a19hY3F1aXJlKCZwX2FsX29iai0+cmVmX3RyYWNlLmxvY2spOw0KQEAgLTIzMSw5ICszMDQsMTQg
QEAgcmVmX3RyYWNlX2Rlc3Ryb3koDQogCWNsX3NwaW5sb2NrX2Rlc3Ryb3koJnBfYWxfb2JqLT5y
ZWZfdHJhY2UubG9jayk7DQogDQogCUludGVybG9ja2VkRGVjcmVtZW50KCZnX3JlZl9jbnRfZGJn
X2RiLm9iamVjdHNfbnVtKTsNCisjZWxzZSAgIC8vIENMX0tFUk5FTA0KKyAgICBVTlJFRkVSRU5D
RURfUEFSQU1FVEVSKHBfb2JqKTsNCisjZW5kaWYgIC8vIENMX0tFUk5FTA0KIH0NCiANCi1yZWZf
Y250X2RhdGFfdCoNCisNCisjaWZkZWYgQ0xfS0VSTkVMDQorc3RhdGljIHJlZl9jbnRfZGF0YV90
Kg0KIHJlZl90cmFjZV9nZXRfdHJhY2VfZGF0YSgNCiAJSU4gUExJU1RfRU5UUlkgCQkJbGlzdF9l
bnRyeSkNCiB7DQpAQCAtMjQ3LDcgKzMyNSw4IEBAIHJlZl90cmFjZV9nZXRfdHJhY2VfZGF0YSgN
CiAJcmV0dXJuICZyZWZfbm9kZS0+ZW50cnkucmVmX2NudF9kYXRhOw0KIH0NCiANCi1ib29sZWFu
X3QNCisNCitzdGF0aWMgYm9vbGVhbl90DQogcmVmX3RyYWNlX2lzX2VxdWFsX2VudHJ5KA0KIAlJ
TiBQTElTVF9FTlRSWSAJCQlmaXJzdF9lbnRyeSwNCiAJSU4gUExJU1RfRU5UUlkgCQkJc2Vjb25k
X2VudHJ5ICkNCkBAIC0yNjEsNyArMzQwLDggQEAgcmVmX3RyYWNlX2lzX2VxdWFsX2VudHJ5KA0K
IAkJCWZpcnN0X3JlZl9kYXRhLT5maWxlX25hbWUgPT0gc2Vjb25kX3JlZl9kYXRhLT5maWxlX25h
bWUpOw0KIH0NCiANCi1ib29sZWFuX3QNCisNCitzdGF0aWMgYm9vbGVhbl90DQogcmVmX3RyYWNl
X2lzX3NhbWVfYWN0aW9uX2VudHJ5KA0KIAlJTiBQTElTVF9FTlRSWSAJCQlmaXJzdF9lbnRyeSwN
CiAJSU4gUExJU1RfRU5UUlkgCQkJc2Vjb25kX2VudHJ5ICkNCkBAIC0yNzYsNyArMzU2LDcgQEAg
cmVmX3RyYWNlX2lzX3NhbWVfYWN0aW9uX2VudHJ5KA0KIA0KIA0KIC8vIFNob3VsZCBiZSBjYWxs
ZWQgd2l0aCBhIGxvY2sgb24gdGhlIHB1cmdlZCBsaXN0DQotYm9vbGVhbl90DQorc3RhdGljIGJv
b2xlYW5fdA0KIHJlZl90cmFjZV9wdXJnZV9yZWZfZGVyZWZfcGFpcnMoDQogCUlOIFBMSVNUX0VO
VFJZIAkJCWxhc3RfZGVyZWZfZW50cnksDQogCUlOIFBMSVNUX0VOVFJZIAkJCWxpc3RfaGVhZCkN
CkBAIC0zMjAsOCArNDAwLDkgQEAgcmVmX3RyYWNlX3B1cmdlX3JlZl9kZXJlZl9wYWlycygNCiAJ
cmV0dXJuIEZBTFNFOw0KIH0NCiANCisNCiAvLyBTaG91bGQgYmUgY2FsbGVkIHdpdGggYSBsb2Nr
IG9uIHRoZSBwdXJnZWQgbGlzdA0KLWJvb2xlYW5fdA0KK3N0YXRpYyBib29sZWFuX3QNCiByZWZf
dHJhY2VfcHVyZ2Vfc2FtZV9lbnRyeSgNCiAJSU4gUExJU1RfRU5UUlkgCQkJbGFzdF9lbnRyeSwN
CiAJSU4gUExJU1RfRU5UUlkgCQkJbGlzdF9oZWFkKQ0KQEAgLTM1NSw3ICs0MzYsNyBAQCByZWZf
dHJhY2VfcHVyZ2Vfc2FtZV9lbnRyeSgNCiB9DQogDQogDQotdm9pZA0KK3N0YXRpYyB2b2lkDQog
cmVmX3RyYWNlX3B1cmdlKA0KIAlJTiBQTElTVF9FTlRSWSAJCQlsYXN0X2VudHJ5LA0KIAlJTiBh
bF9vYmpfdCAqCQkJcF9vYmopDQpAQCAtMzgwLDYgKzQ2MSw4IEBAIHJlZl90cmFjZV9wdXJnZSgN
CiAJCQ0KIAljbF9zcGlubG9ja19yZWxlYXNlKCZwX29iai0+cmVmX3RyYWNlLmxvY2spOw0KIH0N
CisjZW5kaWYgIC8vIENMX0tFUk5FTA0KKw0KIA0KIGludDMyX3QNCiByZWZfdHJhY2VfaW5zZXJ0
KA0KQEAgLTM5MCw2ICs0NzMsNyBAQCByZWZfdHJhY2VfaW5zZXJ0KA0KICAgICBJTiB1aW50OF90
IAkJCSAJIHJlZl9jdHgNCiAgICAgKQ0KICB7DQorI2lmZGVmIENMX0tFUk5FTA0KIAlhbF9vYmpf
dCogcF9hbF9vYmogPSAoYWxfb2JqX3QqKXBfb2JqOyANCiAJUExJU1RfRU5UUlkgCQlmcmVlX2Vu
dHJ5Ow0KIAlyZWZfY250X2RhdGFfdCogCXJlZl9lbnRyeTsNCkBAIC00NDYsNiArNTMwLDE0IEBA
IHJlZl90cmFjZV9pbnNlcnQoDQogCX0NCiANCiAJcmV0dXJuICgoY2hhbmdlX3R5cGUgPT0gQUxf
UkVGKSA/IHJlZl9hbF9vYmpfaW5uZXIocF9hbF9vYmopIDogZGVyZWZfYWxfb2JqX2lubmVyKHBf
YWxfb2JqKSk7DQorI2Vsc2UgICAvLyBDTF9LRVJORUwNCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFN
RVRFUihmaWxlKTsNCisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihsaW5lKTsNCisgICAgVU5S
RUZFUkVOQ0VEX1BBUkFNRVRFUihwX29iaik7DQorICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIo
Y2hhbmdlX3R5cGUpOw0KKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKHJlZl9jdHgpOw0KKyAg
ICByZXR1cm4gMDsNCisjZW5kaWYgIC8vIENMX0tFUk5FTA0KIH0NCiANCiB2b2lkIA0KQEAgLTQ1
Myw2ICs1NDUsNyBAQCByZWZfdHJhY2VfcHJpbnQoDQogCUlOIHZvaWQgKiBjb25zdCAJIHBfb2Jq
DQogKQ0KIHsNCisjaWZkZWYgQ0xfS0VSTkVMDQogCWFsX29ial90KiBwX2FsX29iaiA9IChhbF9v
YmpfdCopcF9vYmo7DQogCXJlZl9jbnRfZGF0YV90KiAJcmVmX2VudHJ5Ow0KIAlQTElTVF9FTlRS
WSAJCXBfZW50cnk7DQpAQCAtNDgwLDYgKzU3Myw5IEBAIHJlZl90cmFjZV9wcmludCgNCiAJfQ0K
IAkNCiAJY2xfc3BpbmxvY2tfcmVsZWFzZSgmcF9hbF9vYmotPnJlZl90cmFjZS5sb2NrKTsNCisj
ZWxzZSAgIC8vIENMX0tFUk5FTA0KKyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBfb2JqKTsN
CisjZW5kaWYgIC8vIENMX0tFUk5FTA0KIH0NCiANCiB2b2lkIA0KQEAgLTQ4Nyw2ICs1ODMsNyBA
QCByZWZfdHJhY2VfZGlydHlfcHJpbnQoDQogCUlOIHZvaWQgKiBjb25zdCAJIHBfb2JqDQogKQ0K
IHsNCisjaWZkZWYgQ0xfS0VSTkVMDQogCWFsX29ial90KiBwX2FsX29iaiA9IChhbF9vYmpfdCop
cF9vYmo7DQogCXJlZl9kYl9ub2RlX3QqIAkJCXJlZl9ub2RlOw0KIAlyZWZfY250X2RpcnR5X2xp
c3RfdCogCXJlZl9kaXJ0eTsNCkBAIC01MjksNiArNjI2LDkgQEAgcmVmX3RyYWNlX2RpcnR5X3By
aW50KA0KIAl9DQogCQ0KIAljbF9zcGlubG9ja19yZWxlYXNlKCAmZ19yZWZfY250X2RiZ19kYi5k
aXJ0eV9jaGFpbl9sb2NrICk7DQorI2Vsc2UgICAvLyBDTF9LRVJORUwNCisgICAgVU5SRUZFUkVO
Q0VEX1BBUkFNRVRFUihwX29iaik7DQorI2VuZGlmICAvLyBDTF9LRVJORUwNCiB9DQogDQogI2Vu
ZGlmDQpkaWZmIC1kd3VwMyAteCAqc3ZuKiAteCBtYWtlZmlsZSAteCBzb3VyY2VzIC1yIGM6XGRl
dlxvcGVuaWJcb2Z3XGdlbjFcYnJhbmNoZXNcbWx4NF8zMFx0cnVua1xjb3JlXGFsXGFsX3JlZl90
cmFjZS5oIC5cY29yZVxhbFxhbF9yZWZfdHJhY2UuaA0KLS0tIGM6XGRldlxvcGVuaWJcb2Z3XGdl
bjFcYnJhbmNoZXNcbWx4NF8zMFx0cnVua1xjb3JlXGFsXGFsX3JlZl90cmFjZS5oCVRodSBNYXkg
MzEgMTE6MjI6MTYgMjAxMg0KKysrIC5cY29yZVxhbFxhbF9yZWZfdHJhY2UuaAlUaHUgTWF5IDMx
IDEyOjU3OjEwIDIwMTINCkBAIC00Nyw2ICs0Nyw3IEBAIHR5cGVkZWYgZW51bSB7DQogCUFMX0RF
UkVGIA0KIH0gYWxfcmVmX2NoYW5nZV90eXBlX3Q7DQogDQorDQogZW51bSBlX3JlZl9vcmlnaW4g
ew0KIAlFX1JFRl9JTklUID0gMSwNCiAJRV9SRUZfQ0FfQUREX1JFTU9WRSwNCkBAIC01NiwxMCAr
NTcsNiBAQCBlbnVtIGVfcmVmX29yaWdpbiB7DQogCUVfUkVGX0NPTlNUUlVDVF9DSElMRA0KIH07
DQogDQotdHlwZWRlZiBlbnVtIHsNCi0JQUxfREFUQV9OT0RFLA0KLQlBTF9ESVJUWV9DSEFJTl9O
T0RFIA0KLX0gYWxfbm9kZV90eXBlX3Q7DQogDQogdHlwZWRlZiBlbnVtIHsNCiAJRVFVQUxfUkVG
X0RFUkVGX1BBSVJTID0gMSA8PCAwLA0KQEAgLTY3LDY4ICs2NCwxNCBAQCB0eXBlZGVmIGVudW0g
ew0KIH0gcHVyZ2VfcG9saWN5X2ZsYWdzX3Q7DQogDQogDQotI2RlZmluZSBSRUZfVFJBQ0VfTUFY
X0VOVFJJRVMJCQkweDIwMDANCi0jZGVmaW5lIFJFRl9UUkFDRV9EQl9FTlRSSUVTCQkJMHhGMDAw
MA0KLQ0KLXR5cGVkZWYgc3RydWN0IF9yZWZfY250X2RhdGENCi17DQotCUxPTkcJCQkJCXByZXZf
cmVmX3ZhbDsNCi0JdWludDMyX3QJCQkJbGluZV9udW07DQotCXVpbnQ4X3QJCQkJCXB1cmdlX3R5
cGU7DQotCXVpbnQxNl90CQkJCXJlcGVhdF9jbnQ7DQotCXVpbnQ4X3QJCQkJCXJlZl9jaGFuZ2U7
IAkvL2FsX3JlZl9jaGFuZ2VfdHlwZV90DQotCXVpbnQ4X3QJCQkJCXJlZl9jdHg7IAkJLy9lbnVt
IGVfcmVmX3R5cGUNCi0JY2hhcioJCQkJCWZpbGVfbmFtZTsNCi0NCi19IHJlZl9jbnRfZGF0YV90
Ow0KLQ0KLXR5cGVkZWYgc3RydWN0IF9yZWZfY250X2RpcnR5X2xpc3QNCi17DQotCXZvaWQqCQkJ
CQlwX2FsX29iajsNCi0JdWludDMyX3QJCQkJdHlwZTsNCi0JbG9uZwkJCQkJb2JqX2xpc3Rfc2l6
ZTsNCi0JTElTVF9FTlRSWQkJCQlkaXJ0eV9saXN0Ow0KLX0gcmVmX2NudF9kaXJ0eV9saXN0X3Q7
DQotDQotDQotdHlwZWRlZiB1bmlvbiBfcmVmX2RiX2VudHJ5DQotew0KLQlyZWZfY250X2RhdGFf
dCAJCQlyZWZfY250X2RhdGE7DQotCXJlZl9jbnRfZGlydHlfbGlzdF90CXJlZl9kaXJ0eV9saXN0
Ow0KLQ0KLX0gcmVmX2RiX2VudHJ5X3Q7DQotDQotdHlwZWRlZiBzdHJ1Y3QgX3JlZl9kYl9ub2Rl
DQotew0KLQl1aW50OF90CQkJCQl0eXBlOwkJLy9hbF9ub2RlX3R5cGVfdA0KLQlyZWZfZGJfZW50
cnlfdCAJCQllbnRyeTsNCi0JTElTVF9FTlRSWQkJCQlsaXN0X2VudHJ5Ow0KLX0gcmVmX2RiX25v
ZGVfdDsNCi0NCi10eXBlZGVmIHN0cnVjdCBfcmVmX2NudF9kYmdfZGINCi17DQotCUxJU1RfRU5U
UlkgCQkJCQlmcmVlX2NoYWluOw0KLQljbF9zcGlubG9ja190CQkJCWZyZWVfY2hhaW5fbG9jazsN
Ci0JDQotCUxJU1RfRU5UUlkgCQkJCQlkaXJ0eV9jaGFpbjsNCi0JY2xfc3BpbmxvY2tfdAkJCQlk
aXJ0eV9jaGFpbl9sb2NrOw0KLQ0KLQlVTE9ORwkJCQkJCXBvbGljeTsNCi0JTE9ORyAJCQkJCQlt
YXhfY2hhaW5fc2l6ZTsNCi0JdWludDMyX3QJCQkJCW1heF9jaGFpbl9vYmpfdHlwZTsNCi0JaW50
MzJfdAkJCQkJCW5lZWRlZF9zaXplOw0KLQl2b2xhdGlsZSBsb25nCQkJCW9iamVjdHNfbnVtOw0K
LQlyZWZfZGJfbm9kZV90CQkJCXJlZl9jbnRfZGJbUkVGX1RSQUNFX0RCX0VOVFJJRVNdOw0KLX0g
cmVmX2NudF9kYmdfZGJfdDsNCi0NCi0NCisjaWZkZWYgQ0xfS0VSTkVMDQogdHlwZWRlZiBzdHJ1
Y3QgX29ial9yZWZfdHJhY2UNCiB7DQogCUxJU1RfRU5UUlkJCQkJCXJlZl9jaGFpbjsNCiAJY2xf
c3BpbmxvY2tfdAkJCQlsb2NrOyANCiAJdm9sYXRpbGUgbG9uZwkJCQlsaXN0X3NpemU7DQogfSBv
YmpfcmVmX3RyYWNlX3Q7DQotDQorI2VuZGlmDQogDQogdm9pZA0KIHJlZl90cmFjZV9kYl9pbml0
KFVMT05HIHBvbGljeSk7DQpJbmRleDogaW5jL3VzZXIvTExJU1QuSA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IGluYy91c2VyL0xMSVNULkgJKHJldmlzaW9uIDM0MjcpDQorKysgaW5jL3VzZXIvTExJU1QuSAko
d29ya2luZyBjb3B5KQ0KQEAgLTEsNDc0ICswLDAgQEANCi0vKisrDQotDQotICAgICBUaGlzIHNv
dXJjZSBjb2RlIG1heSBpbmNvcnBvcmF0ZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb3duZWQgYnkN
Ci0gICAgIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gT3VyIHByb3Zpc2lvbiBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGRvZXMgbm90DQotICAgICBpbmNsdWRlIGFueSBsaWNlbnNlcyBvciBhbnkgb3RoZXIg
cmlnaHRzIHRvIHlvdSB1bmRlciBhbnkgTWljcm9zb2Z0DQotICAgICBpbnRlbGxlY3R1YWwgcHJv
cGVydHkuIElmIHlvdSB3b3VsZCBsaWtlIGEgbGljZW5zZSBmcm9tIE1pY3Jvc29mdA0KLSAgICAg
KGUuZy4sIHRvIHJlYnJhbmQsIHJlZGlzdHJpYnV0ZSksIHlvdSBuZWVkIHRvIGNvbnRhY3QgTWlj
cm9zb2Z0DQotICAgICBkaXJlY3RseS4NCi0NCi1Nb2R1bGUgTmFtZToNCi0NCi0gICAgbGxpc3Qu
aA0KLQ0KLUFic3RyYWN0Og0KLQ0KLSAgICBUaGlzICBtb2R1bGUgIGlzICBhICBzdGFuZGFsb25l
ICBjb2xsZWN0aW9uICBvZiAgbGlua2VkLWxpc3QgZGVmaW5pdGlvbiBhbmQNCi0gICAgbWFuaXB1
bGF0aW9uICBtYWNyb3MgIG9yaWdpbmFsbHkgIGRlZmluZWQgIHdpdGhpbiAgdGhlICBXaW5kb3dz
IE5UDQotICAgIGRldmVsb3BtZW50Lg0KLQ0KLS0tKi8NCi0NCi0jaWZuZGVmIF9MTElTVF8NCi0j
ZGVmaW5lIF9MTElTVF8NCi0jaW5jbHVkZSA8d2luc29jazIuaD4NCi0NCi0NCi0NCi0jaWYgIWRl
ZmluZWQoIF9XSU5OVF8gKQ0KLS8vDQotLy8gIEZyb20gTlRERUYuSC4NCi0vLw0KLQ0KLS8vICBE
b3VibHkgIGxpbmtlZCAgbGlzdCAgc3RydWN0dXJlLiAgIENhbiBiZSB1c2VkIGFzIGVpdGhlciBh
IGxpc3QgaGVhZCwgb3IgYXMNCi0vLyAgbGluayBzdG9yYWdlIHdpdGhpbiBhIGxpbmtlZC1saXN0
IGl0ZW0uDQotDQotdHlwZWRlZiBzdHJ1Y3QgX0xJU1RfRU5UUlkgew0KLSAgIHN0cnVjdCBfTElT
VF9FTlRSWSAqRmxpbms7DQotICAgc3RydWN0IF9MSVNUX0VOVFJZICpCbGluazsNCi19IExJU1Rf
RU5UUlksICpQTElTVF9FTlRSWSwgKlJFU1RSSUNURURfUE9JTlRFUiBQUkxJU1RfRU5UUlk7DQot
DQotDQotDQotDA0KLS8vIExPTkcNCi0vLyBGSUVMRF9PRkZTRVQoDQotLy8gICAgIElOIDx0eXBl
bmFtZT4gICB0eXBlLA0KLS8vICAgICBJTiA8ZmllbGRuYW1lPiAgZmllbGQNCi0vLyAgICAgKTsN
Ci0jZGVmaW5lIEZJRUxEX09GRlNFVCh0eXBlLCBmaWVsZCkgICAgKChMT05HKSYoKCh0eXBlICop
MCktPmZpZWxkKSkNCi0vKisrDQotDQotUm91dGluZSBEZXNjcmlwdGlvbjoNCi0NCi0gICAgQ2Fs
Y3VsYXRlcyAgdGhlICBieXRlIG9mZnNldCBvZiBhIGZpZWxkIGluIGEgc3RydWN0dXJlIG9mIHR5
cGUgInR5cGUiLiAgVGhlDQotICAgIG9mZnNldCBpcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhl
IGNvbnRhaW5pbmcgc3RydWN0dXJlLg0KLQ0KLSAgICBOb3RlICB0aGF0ICBzaW5jZSAgdGhpcyBt
YWNybyB1c2VzIGNvbXBpbGUtdGltZSB0eXBlIGtub3dsZWRnZSwgdGhlcmUgaXMgbm8NCi0gICAg
ZXF1aXZhbGVudCBDIHByb2NlZHVyZSBmb3IgdGhpcyBtYWNyby4NCi0NCi1Bcmd1bWVudHM6DQot
DQotICAgIHR5cGUgIC0gU3VwcGxpZXMgdGhlIHR5cGUgbmFtZSBvZiB0aGUgY29udGFpbmluZyBz
dHJ1Y3R1cmUuDQotDQotICAgIGZpZWxkIC0gU3VwcGxpZXMgIHRoZSAgZmllbGQgIG5hbWUgIG9m
ICB0aGUgIGZpZWxkICB3aG9zZSAgb2Zmc2V0ICBpcyB0byBiZQ0KLSAgICAgICAgICAgIGNvbXB1
dGVkLg0KLQ0KLVJldHVybiBWYWx1ZToNCi0NCi0gICAgUmV0dXJucyAgdGhlIGJ5dGUgb2Zmc2V0
IG9mIHRoZSBuYW1lZCBmaWVsZCB3aXRoaW4gYSBzdHJ1Y3R1cmUgb2YgdGhlIG5hbWVkDQotICAg
IHR5cGUuDQotLS0qLw0KLQ0KLQ0KLQ0KLQwNCi0vLyA8dHlwZW5hbWU+IEZBUiAqDQotLy8gQ09O
VEFJTklOR19SRUNPUkQoDQotLy8gICAgIElOIFBWT0lEICAgICAgIGFkZHJlc3MsDQotLy8gICAg
IElOIDx0eXBlbmFtZT4gIHR5cGUsDQotLy8gICAgIElOIDxmaWVsZG5hbWU+IGZpZWxkDQotLy8g
ICAgICk7DQotI2RlZmluZSBDT05UQUlOSU5HX1JFQ09SRChhZGRyZXNzLCB0eXBlLCBmaWVsZCkg
KCh0eXBlIEZBUiAqKSggXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChQQ0hBUikoYWRkcmVzcykgLSBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKFBDSEFSKSgmKCh0eXBlICopMCktPmZpZWxkKSkpDQotLyorKw0KLQ0KLVJv
dXRpbmUgRGVzY3JpcHRpb246DQotDQotICAgIFJldHJpZXZlcyAgYSAgdHlwZWQgIHBvaW50ZXIg
dG8gYSBsaW5rZWQgbGlzdCBpdGVtIGdpdmVuIHRoZSBhZGRyZXNzIG9mIHRoZQ0KLSAgICBsaW5r
ICBzdG9yYWdlICBzdHJ1Y3R1cmUgIGVtYmVkZGVkIGluIHRoZSBsaW5rZWQgbGlzdCBpdGVtLCB0
aGUgdHlwZSBvZiB0aGUNCi0gICAgbGlua2VkICBsaXN0ICBpdGVtLCAgYW5kICB0aGUgIGZpZWxk
ICBuYW1lICBvZiAgdGhlICBlbWJlZGRlZCAgbGluayBzdG9yYWdlDQotICAgIHN0cnVjdHVyZS4N
Ci0NCi0gICAgTm90ZSAgdGhhdCAgc2luY2UgIHRoaXMgbWFjcm8gdXNlcyBjb21waWxlLXRpbWUg
dHlwZSBrbm93bGVkZ2UsIHRoZXJlIGlzIG5vDQotICAgIGVxdWl2YWxlbnQgQyBwcm9jZWR1cmUg
Zm9yIHRoaXMgbWFjcm8uDQotDQotQXJndW1lbnRzOg0KLQ0KLSAgICBhZGRyZXNzIC0gU3VwcGxp
ZXMgIHRoZSAgYWRkcmVzcyBvZiBhIExJU1RfRU5UUlkgc3RydWN0dXJlIGVtYmVkZGVkIGluIGFu
IGENCi0gICAgICAgICAgICAgIGxpbmtlZCBsaXN0IGl0ZW0uDQotDQotICAgIHR5cGUgICAgLSBT
dXBwbGllcyAgdGhlICB0eXBlICBuYW1lICBvZiAgdGhlICBjb250YWluaW5nICBsaW5rZWQgIGxp
c3QgaXRlbQ0KLSAgICAgICAgICAgICAgc3RydWN0dXJlLg0KLQ0KLSAgICBmaWVsZCAgIC0gU3Vw
cGxpZXMgIHRoZSAgZmllbGQgIG5hbWUgIGlmICB0aGUgTElTVF9FTlRSWSBzdHJ1Y3R1cmUgZW1i
ZWRkZWQNCi0gICAgICAgICAgICAgIHdpdGhpbiB0aGUgbGlua2VkIGxpc3QgaXRlbSBzdHJ1Y3R1
cmUuDQotDQotUmV0dXJuIFZhbHVlOg0KLQ0KLSAgICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUg
bGlua2VkIGxpc3QgaXRlbS4NCi0tLSovDQotDQotDQotI2VuZGlmICAvLyAhZGVmaW5lZCggX1dJ
Tk5UXyApDQotDQotDQotLy8NCi0vLyAgRnJvbSBOVFJUTC5ILg0KLS8vDQotDQotLy8gIERvdWJs
eS1saW5rZWQgbGlzdCBtYW5pcHVsYXRpb24gcm91dGluZXMuICBJbXBsZW1lbnRlZCBhcyBtYWNy
b3MNCi0vLyAgYnV0IGxvZ2ljYWxseSB0aGVzZSBhcmUgcHJvY2VkdXJlcy4NCi0NCi0NCi0NCi0N
Ci0gaW5saW5lIFZPSUQNCi0gSW5pdGlhbGl6ZUxpc3RIZWFkKA0KLSAgICAgSU4gUExJU1RfRU5U
UlkgTGlzdEhlYWQNCi0gICAgICkNCi17DQotDQotICAgIExpc3RIZWFkLT5GbGluayA9IExpc3RI
ZWFkLT5CbGluayA9IExpc3RIZWFkOw0KLX0NCi0vKisrDQotDQotUm91dGluZSBEZXNjcmlwdGlv
bjoNCi0NCi0gICAgSW5pdGlhbGl6ZXMgIGEgIFBMSVNUX0VOVFJZICBzdHJ1Y3R1cmUgdG8gYmUg
dGhlIGhlYWQgb2YgYW4gaW5pdGlhbGx5IGVtcHR5DQotICAgIGxpbmtlZCBsaXN0Lg0KLQ0KLUFy
Z3VtZW50czoNCi0NCi0gICAgTGlzdEhlYWQgLSBTdXBwbGllcyBhIHJlZmVyZW5jZSB0byB0aGUg
c3RydWN0dXJlIHRvIGJlIGluaXRpYWxpemVkLg0KLQ0KLVJldHVybiBWYWx1ZToNCi0NCi0gICAg
Tm9uZQ0KLS0tKi8NCi0NCi0gaW5saW5lIFZPSUQNCi0gUmVtb3ZlRW50cnlMaXN0KA0KLSAgICAg
SU4gUExJU1RfRU5UUlkgRW50cnkNCi0gICAgICkgew0KLSAgICBQTElTVF9FTlRSWSBfRVhfQmxp
bms7DQotICAgIFBMSVNUX0VOVFJZIF9FWF9GbGluazsNCi0gICAgX0VYX0ZsaW5rID0gRW50cnkt
PkZsaW5rOw0KLSAgICBfRVhfQmxpbmsgPSBFbnRyeS0+Qmxpbms7DQotICAgIF9FWF9CbGluay0+
RmxpbmsgPSBfRVhfRmxpbms7DQotICAgIF9FWF9GbGluay0+QmxpbmsgPSBfRVhfQmxpbms7DQot
ICAgIH0NCi0NCi0NCi0vLyBCT09MRUFODQotLy8gSXNMaXN0RW1wdHkoDQotLy8gICAgIElOIFBM
SVNUX0VOVFJZIExpc3RIZWFkDQotLy8gICAgICk7DQotI2RlZmluZSBJc0xpc3RFbXB0eShMaXN0
SGVhZCkgXA0KLSAgICAoKExpc3RIZWFkKS0+RmxpbmsgPT0gKExpc3RIZWFkKSkNCi0vKisrDQot
DQotUm91dGluZSBEZXNjcmlwdGlvbjoNCi0NCi0gICAgRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5v
dCBhIGxpc3QgaXMgZW1wdHkuDQotDQotQXJndW1lbnRzOg0KLQ0KLSAgICBMaXN0SGVhZCAtIFN1
cHBsaWVzICBhICByZWZlcmVuY2UgIHRvICB0aGUgIGhlYWQgIG9mICB0aGUgbGlua2VkIGxpc3Qg
dG8gYmUNCi0gICAgICAgICAgICAgICBleGFtaW5lZC4NCi0NCi1SZXR1cm4gVmFsdWU6DQotDQot
ICAgIFRSVUUgIC0gVGhlIGxpbmtlZCBsaXN0IGlzIGVtcHR5Lg0KLQ0KLSAgICBGQUxTRSAtIFRo
ZSBsaW5rZWQgbGlzdCBjb250YWlucyBhdCBsZWFzdCBvbmUgaXRlbS4NCi0tLSovDQotDQotDQot
DQotDQotaW5saW5lICBQTElTVF9FTlRSWQ0KLSBSZW1vdmVIZWFkTGlzdCgNCi0gICAgIElOIFBM
SVNUX0VOVFJZIExpc3RIZWFkDQotICAgICApDQotew0KLSAgICBQTElTVF9FTlRSWSBfRW50cnkg
PSBMaXN0SGVhZC0+Rmxpbms7DQotICAgIExpc3RIZWFkLT5GbGluayA9IF9FbnRyeS0+Rmxpbms7
DQotICAgIExpc3RIZWFkLT5GbGluay0+QmxpbmsgPSBMaXN0SGVhZDsNCi0gICAgcmV0dXJuIF9F
bnRyeTsNCi19DQotLyorKw0KLQ0KLVJvdXRpbmUgRGVzY3JpcHRpb246DQotDQotICAgIFJlbW92
ZXMgIHRoZSAgImhlYWQiIChmaXJzdCkgaXRlbSBmcm9tIGEgbGlua2VkIGxpc3QsIHJldHVybmlu
ZyB0aGUgcG9pbnRlcg0KLSAgICB0byAgdGhlICByZW1vdmVkICBlbnRyeSdzIGVtYmVkZGVkIGxp
bmthZ2Ugc3RydWN0dXJlLiAgQXR0ZW1wdGluZyB0byByZW1vdmUNCi0gICAgdGhlICBoZWFkICBp
dGVtICBmcm9tICBhICAocHJvcGVybHkgIGluaXRpYWxpemVkKSAgbGlua2VkICBsaXN0IGlzIGEg
bm8tb3AsDQotICAgIHJldHVybmluZyB0aGUgcG9pbnRlciB0byB0aGUgaGVhZCBvZiB0aGUgbGlu
a2VkIGxpc3QuDQotDQotICAgIFRoZSAgY2FsbGVyICBtYXkgIHVzZSAgdGhlICBDT05UQUlOSU5H
X1JFQ09SRCBtYWNybyB0byBhbXBsaWZ5IHRoZSByZXR1cm5lZA0KLSAgICBsaW5rYWdlIHN0cnVj
dHVyZSBwb2ludGVyIHRvIHRoZSBjb250YWluaW5nIGxpbmtlZCBsaXN0IGl0ZW0gc3RydWN0dXJl
Lg0KLQ0KLUFyZ3VtZW50czoNCi0NCi0gICAgTGlzdEhlYWQgLSBTdXBwbGllcyAgYSAgcmVmZXJl
bmNlICB0byAgdGhlICBoZWFkICBvZiAgdGhlIGxpbmtlZCBsaXN0IHRvIGJlDQotICAgICAgICAg
ICAgICAgb3BlcmF0ZWQgdXBvbi4NCi0NCi1SZXR1cm4gVmFsdWU6DQotDQotICAgIFJldHVybnMg
IGEgcG9pbnRlciB0byB0aGUgbmV3bHkgcmVtb3ZlZCBsaW5rZWQgbGlzdCBpdGVtJ3MgZW1iZWRk
ZWQgbGlua2FnZQ0KLSAgICBzdHJ1Y3R1cmUsIG9yIHRoZSBsaW5rZWQgbGlzdCBoZWFkIGluIHRo
ZSBjYXNlIG9mIGFuIGVtcHR5IGxpc3QuDQotLS0qLw0KLQ0KLQ0KLQ0KLWlubGluZSBQTElTVF9F
TlRSWQ0KLSBSZW1vdmVUYWlsTGlzdCgNCi0gICAgIElOIFBMSVNUX0VOVFJZIExpc3RIZWFkDQot
ICAgICApDQotew0KLSAgICBQTElTVF9FTlRSWSBfRU5UUlkgPSBMaXN0SGVhZC0+Qmxpbms7DQot
ICAgIExpc3RIZWFkLT5CbGluayA9IF9FTlRSWS0+Qmxpbms7DQotICAgIF9FTlRSWS0+Qmxpbmst
PkZsaW5rID0gTGlzdEhlYWQ7DQotICAgIHJldHVybiBfRU5UUlk7DQotfQ0KLS8qKysNCi0NCi1S
b3V0aW5lIERlc2NyaXB0aW9uOg0KLQ0KLSAgICBSZW1vdmVzIHRoZSAidGFpbCIgKGxhc3QpIGl0
ZW0gZnJvbSBhIGxpbmtlZCBsaXN0LCByZXR1cm5pbmcgdGhlIHBvaW50ZXIgdG8NCi0gICAgdGhl
ICByZW1vdmVkICBlbnRyeSdzIGVtYmVkZGVkIGxpbmthZ2Ugc3RydWN0dXJlLiAgQXR0ZW1wdGlu
ZyB0byByZW1vdmUgdGhlDQotICAgIHRhaWwgIGl0ZW0gIGZyb20gYSAocHJvcGVybHkgaW5pdGlh
bGl6ZWQpIGxpbmtlZCBsaXN0IGlzIGEgbm8tb3AsIHJldHVybmluZw0KLSAgICB0aGUgcG9pbnRl
ciB0byB0aGUgaGVhZCBvZiB0aGUgbGlua2VkIGxpc3QuDQotDQotICAgIFRoZSAgY2FsbGVyICBt
YXkgIHVzZSAgdGhlICBDT05UQUlOSU5HX1JFQ09SRCBtYWNybyB0byBhbXBsaWZ5IHRoZSByZXR1
cm5lZA0KLSAgICBsaW5rYWdlIHN0cnVjdHVyZSBwb2ludGVyIHRvIHRoZSBjb250YWluaW5nIGxp
bmtlZCBsaXN0IGl0ZW0gc3RydWN0dXJlLg0KLQ0KLUFyZ3VtZW50czoNCi0NCi0gICAgTGlzdEhl
YWQgLSBTdXBwbGllcyAgYSAgcmVmZXJlbmNlICB0byAgdGhlICBoZWFkICBvZiAgdGhlIGxpbmtl
ZCBsaXN0IHRvIGJlDQotICAgICAgICAgICAgICAgb3BlcmF0ZWQgdXBvbi4NCi0NCi1SZXR1cm4g
VmFsdWU6DQotDQotICAgIFJldHVybnMgIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgcmVtb3ZlZCBs
aW5rZWQgbGlzdCBpdGVtJ3MgZW1iZWRkZWQgbGlua2FnZQ0KLSAgICBzdHJ1Y3R1cmUsIG9yIHRo
ZSBsaW5rZWQgbGlzdCBoZWFkIGluIHRoZSBjYXNlIG9mIGFuIGVtcHR5IGxpc3QuDQotLS0qLw0K
LQ0KLQ0KLQ0KLQ0KLQ0KLS8qKysNCi0NCi1Sb3V0aW5lIERlc2NyaXB0aW9uOg0KLQ0KLSAgICBS
ZW1vdmVzICBhbiAgaXRlbSAgZnJvbSBhIGxpbmtlZCBsaXN0LiAgQXR0ZW1wdGluZyB0byByZW1v
dmUgdGhlIGhlYWQgb2YgYW4NCi0gICAgZW1wdHkgbGlzdCBpcyBhIG5vLW9wLg0KLQ0KLUFyZ3Vt
ZW50czoNCi0NCi0gICAgRW50cnkgLSBTdXBwbGllcyAgYSByZWZlcmVuY2UgdG8gdGhlIGxpbmth
Z2Ugc3RydWN0dXJlIGVtYmVkZGVkIGluIGEgbGlua2VkDQotICAgICAgICAgICAgbGlzdCBpdGVt
IHN0cnVjdHVyZS4NCi0NCi1SZXR1cm4gVmFsdWU6DQotDQotICAgIE5vbmUNCi0tLSovDQotDQot
DQotDQotDA0KLSBpbmxpbmUgVk9JRA0KLSBJbnNlcnRUYWlsTGlzdCgNCi0gICAgIElOIFBMSVNU
X0VOVFJZIExpc3RIZWFkLA0KLSAgICAgSU4gUExJU1RfRU5UUlkgRW50cnkNCi0gICAgICkNCi17
DQotLy8gI2RlZmluZSBJbnNlcnRUYWlsTGlzdChMaXN0SGVhZCxFbnRyeSkgew0KLSAgICBQTElT
VF9FTlRSWSBfRVhfQmxpbms7DQotICAgIFBMSVNUX0VOVFJZIF9FWF9MaXN0SGVhZDsNCi0gICAg
X0VYX0xpc3RIZWFkID0gKExpc3RIZWFkKTsNCi0gICAgX0VYX0JsaW5rID0gX0VYX0xpc3RIZWFk
LT5CbGluazsNCi0gICAgRW50cnktPkZsaW5rID0gX0VYX0xpc3RIZWFkOw0KLSAgICBFbnRyeS0+
QmxpbmsgPSBfRVhfQmxpbms7DQotICAgIF9FWF9CbGluay0+RmxpbmsgPSAoRW50cnkpOw0KLSAg
ICBfRVhfTGlzdEhlYWQtPkJsaW5rID0gKEVudHJ5KTsNCi0gICAgfQ0KLS8qKysNCi0NCi1Sb3V0
aW5lIERlc2NyaXB0aW9uOg0KLQ0KLSAgICBJbnNlcnRzIGEgbmV3IGl0ZW0gYXMgdGhlICJ0YWls
IiAobGFzdCkgaXRlbSBvZiBhIGxpbmtlZCBsaXN0Lg0KLQ0KLUFyZ3VtZW50czoNCi0NCi0gICAg
TGlzdEhlYWQgLSBTdXBwbGllcyAgYSAgcmVmZXJlbmNlICB0byAgdGhlICBoZWFkICBvZiAgdGhl
IGxpbmtlZCBsaXN0IHRvIGJlDQotICAgICAgICAgICAgICAgb3BlcmF0ZWQgdXBvbi4NCi0NCi0g
ICAgRW50cnkgICAgLSBTdXBwbGllcyAgYSAgcmVmZXJlbmNlICB0byB0aGUgbGlua2FnZSBzdHJ1
Y3R1cmUgZW1iZWRkZWQgaW4gdGhlDQotICAgICAgICAgICAgICAgbGlua2VkIGxpc3QgaXRlbSB0
byBiZSBhZGRlZCB0byB0aGUgbGlua2VkIGxpc3QuDQotDQotUmV0dXJuIFZhbHVlOg0KLQ0KLSAg
ICBOb25lDQotLS0qLw0KLQ0KLQ0KLQ0KLQwNCi0gaW5saW5lIFZPSUQNCi0gSW5zZXJ0SGVhZExp
c3QoDQotICAgICBJTiBQTElTVF9FTlRSWSBMaXN0SGVhZCwNCi0gICAgIElOIFBMSVNUX0VOVFJZ
IEVudHJ5DQotICAgICApDQotew0KLS8vICNkZWZpbmUgSW5zZXJ0SGVhZExpc3QoTGlzdEhlYWQs
RW50cnkpIHsNCi0gICAgUExJU1RfRU5UUlkgX0VYX0ZsaW5rOw0KLSAgICBQTElTVF9FTlRSWSBf
RVhfTGlzdEhlYWQ7DQotICAgIF9FWF9MaXN0SGVhZCA9IChMaXN0SGVhZCk7DQotICAgIF9FWF9G
bGluayA9IF9FWF9MaXN0SGVhZC0+Rmxpbms7DQotICAgIChFbnRyeSktPkZsaW5rID0gX0VYX0Zs
aW5rOw0KLSAgICAoRW50cnkpLT5CbGluayA9IF9FWF9MaXN0SGVhZDsNCi0gICAgX0VYX0ZsaW5r
LT5CbGluayA9IChFbnRyeSk7DQotICAgIF9FWF9MaXN0SGVhZC0+RmxpbmsgPSAoRW50cnkpOw0K
LX0NCi0vKisrDQotDQotUm91dGluZSBEZXNjcmlwdGlvbjoNCi0NCi0gICAgSW5zZXJ0cyBhIG5l
dyBpdGVtIGFzIHRoZSAiaGVhZCIgKGZpcnN0KSBpdGVtIG9mIGEgbGlua2VkIGxpc3QuDQotDQot
QXJndW1lbnRzOg0KLQ0KLSAgICBMaXN0SGVhZCAtIFN1cHBsaWVzICBhICByZWZlcmVuY2UgIHRv
ICB0aGUgIGhlYWQgIG9mICB0aGUgbGlua2VkIGxpc3QgdG8gYmUNCi0gICAgICAgICAgICAgICBv
cGVyYXRlZCB1cG9uLg0KLQ0KLSAgICBFbnRyeSAgICAtIFN1cHBsaWVzICBhICByZWZlcmVuY2Ug
IHRvIHRoZSBsaW5rYWdlIHN0cnVjdHVyZSBlbWJlZGRlZCBpbiB0aGUNCi0gICAgICAgICAgICAg
ICBsaW5rZWQgbGlzdCBpdGVtIHRvIGJlIGFkZGVkIHRvIHRoZSBsaW5rZWQgbGlzdC4NCi0NCi1S
ZXR1cm4gVmFsdWU6DQotDQotICAgIE5vbmUNCi0tLSovDQotDQotDQotDQotLy8NCi0vLw0KLS8v
ICBQU0lOR0xFX0xJU1RfRU5UUlkNCi0vLyAgUG9wRW50cnlMaXN0KA0KLS8vICAgICAgUFNJTkdM
RV9MSVNUX0VOVFJZIExpc3RIZWFkDQotLy8gICAgICApOw0KLS8vDQotDQotI2RlZmluZSBQb3BF
bnRyeUxpc3QoTGlzdEhlYWQpIFwNCi0gICAgKExpc3RIZWFkKS0+TmV4dDtcDQotICAgIHtcDQot
ICAgICAgICBQU0lOR0xFX0xJU1RfRU5UUlkgRmlyc3RFbnRyeTtcDQotICAgICAgICBGaXJzdEVu
dHJ5ID0gKExpc3RIZWFkKS0+TmV4dDtcDQotICAgICAgICBpZiAoRmlyc3RFbnRyeSAhPSBOVUxM
KSB7ICAgICBcDQotICAgICAgICAgICAgKExpc3RIZWFkKS0+TmV4dCA9IEZpcnN0RW50cnktPk5l
eHQ7XA0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB9DQot
DQotDQotLy8NCi0vLyAgVk9JRA0KLS8vICBQdXNoRW50cnlMaXN0KA0KLS8vICAgICAgUFNJTkdM
RV9MSVNUX0VOVFJZIExpc3RIZWFkLA0KLS8vICAgICAgUFNJTkdMRV9MSVNUX0VOVFJZIEVudHJ5
DQotLy8gICAgICApOw0KLS8vDQotDQotI2RlZmluZSBQdXNoRW50cnlMaXN0KExpc3RIZWFkLEVu
dHJ5KSBcDQotICAgIChFbnRyeSktPk5leHQgPSAoTGlzdEhlYWQpLT5OZXh0OyBcDQotICAgIChM
aXN0SGVhZCktPk5leHQgPSAoRW50cnkpDQotDQotDQotLy8gU2FtcGxlczoNCi0vLw0KLS8vIC8v
DQotLy8gLy8gIERlZmluZSBhIGxpc3QgaGVhZC4NCi0vLyAvLw0KLS8vDQotLy8gTElTVF9FTlRS
WSBGb29MaXN0Ow0KLS8vDQotLy8gLy8NCi0vLyAvLyAgRGVmaW5lIGEgc3RydWN0dXJlIHRoYXQg
d2lsbCBiZSBvbiB0aGUgbGlzdC4NCi0vLyAvLw0KLS8vIC8vICBOT1RFOiAgRm9yIGRlYnVnZ2lu
ZyBwdXJwb3NlcywgaXQgdXN1YWxseSBtYWtlcyBsaWZlIHNpbXBsZXIgdG8gbWFrZSB0aGUNCi0v
LyAvLyAgTElTVF9FTlRSWSAgdGhlICBmaXJzdCAgZmllbGQgIG9mICB0aGUgIHN0cnVjdHVyZSwg
IGJ1dCAgdGhpcyAgaXMgIG5vdCBhDQotLy8gLy8gIHJlcXVpcmVtZW50Lg0KLS8vIC8vDQotLy8N
Ci0vLyB0eXBlZGVmIHN0cnVjdCBfRk9PDQotLy8gew0KLS8vICAgICBMSVNUX0VOVFJZIEZvb0xp
c3RFbnRyeTsNCi0vLyAgICAgLg0KLS8vICAgICAuDQotLy8gICAgIC4NCi0vLw0KLS8vIH0gRk9P
LCAqIFBGT087DQotLy8NCi0vLyAvLw0KLS8vIC8vICBJbml0aWFsaXplIGFuIGVtcHR5IGxpc3Qu
DQotLy8gLy8NCi0vLw0KLS8vIEluaXRpYWxpemVMaXN0SGVhZCggJkZvb0xpc3QgKTsNCi0vLw0K
LS8vIC8vDQotLy8gLy8gIENyZWF0ZSBhbiBvYmplY3QsIGFwcGVuZCBpdCB0byB0aGUgZW5kIG9m
IHRoZSBsaXN0Lg0KLS8vIC8vDQotLy8NCi0vLyBQRk9PIGZvbzsNCi0vLw0KLS8vIGZvbyA9IEFM
TE9DKCBzaXplb2YoRk9PKSApOw0KLS8vIHtjaGVjayBmb3IgZXJyb3JzLCBpbml0aWFsaXplIEZP
TyBzdHJ1Y3R1cmV9DQotLy8NCi0vLyBJbnNlcnRUYWlsTGlzdCggJkZvb0xpc3QsICZmb28tPkZv
b0xpc3RFbnRyeSApOw0KLS8vDQotLy8gLy8NCi0vLyAvLyAgU2NhbiBsaXN0IGFuZCBkZWxldGUg
c2VsZWN0ZWQgaXRlbXMuDQotLy8gLy8NCi0vLw0KLS8vIFBGT08gZm9vOw0KLS8vIFBMSVNUX0VO
VFJZIGxpc3RFbnRyeTsNCi0vLw0KLS8vIGxpc3RFbnRyeSA9IEZvb0xpc3QuRmxpbms7DQotLy8N
Ci0vLyB3aGlsZSggbGlzdEVudHJ5ICE9ICZGb29MaXN0ICkNCi0vLyB7DQotLy8gICAgIGZvbyA9
IENPTlRBSU5JTkdfUkVDT1JEKCBsaXN0RW50cnksDQotLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGT08sDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb29MaXN0RW50
cnkgKTsNCi0vLyAgICAgbGlzdEVudHJ5ID0gbGlzdEVudHJ5LT5GbGluazsNCi0vLw0KLS8vICAg
ICBpZiggU29tZUZ1bmN0aW9uKCBmb28gKSApDQotLy8gICAgIHsNCi0vLyAgICAgICAgIFJlbW92
ZUVudHJ5TGlzdCggJmZvby0+Rm9vTGlzdEVudHJ5ICk7DQotLy8gICAgICBGUkVFKCBmb28gKTsN
Ci0vLyAgICAgfQ0KLS8vIH0NCi0vLw0KLS8vIC8vDQotLy8gLy8gIFB1cmdlIGFsbCBpdGVtcyBm
cm9tIGEgbGlzdC4NCi0vLyAvLw0KLS8vDQotLy8gUEZPTyBmb287DQotLy8gUExJU1RfRU5UUlkg
bGlzdEVudHJ5Ow0KLS8vDQotLy8gd2hpbGUoICFJc0xpc3RFbXB0eSggJkZvb0xpc3QgKSApDQot
Ly8gew0KLS8vICAgICBsaXN0RW50cnkgPSBSZW1vdmVIZWFkTGlzdCggJkZvb0xpc3QgKTsNCi0v
LyAgICAgZm9vID0gQ09OVEFJTklOR19SRUNPUkQoIGxpc3RFbnRyeSwNCi0vLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZPTywNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZvb0xpc3RFbnRyeSApOw0KLS8vDQotLy8gICAgIEZSRUUoIGZvbyApOw0KLS8vIH0NCi0NCi0N
Ci0jZW5kaWYgIC8vIF9MTElTVF8NCi0NCg==

Loading...