[ruby-core:91635] [Ruby trunk Feature#15626] Manual Compaction for MRI's GC (`GC.compact`)

From: tenderlove@...
Date: 2019-02-27 22:26:50 UTC
List: ruby-core #91635
SXNzdWUgIzE1NjI2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgdGVuZGVybG92ZW1ha2luZyAoQWFyb24g
UGF0dGVyc29uKS4NCg0KRmlsZSBhZnRlcl9jb21wYWN0LTEucG5nIGFkZGVkDQpGaWxlIGJlZm9y
ZV9jb21wYWN0LTEucG5nIGFkZGVkDQpGaWxlIGFmdGVyX2NvbXBhY3QtMC5wbmcgYWRkZWQNCkZp
bGUgYmVmb3JlX2NvbXBhY3QtMC5wbmcgYWRkZWQNCg0KSSd2ZSB0ZXN0ZWQgdGhlIGNvbXBhY3Rv
ciB3aXRoIGEgUmFpbHMgYXBwbGljYXRpb24sIGFuZCBJIHdhbnQgdG8gc2hhcmUgbXkgcmVzdWx0
cy4NCg0KSSBhZGRlZCB0aGUgbWlkZGxld2FyZSBiZWxvdzoNCg0KYGBgcnVieQ0KIyBUaGlzIGZp
bGUgaXMgdXNlZCBieSBSYWNrLWJhc2VkIHNlcnZlcnMgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9u
Lg0KDQpyZXF1aXJlX3JlbGF0aXZlICdjb25maWcvZW52aXJvbm1lbnQnDQpyZXF1aXJlICdvYmpz
cGFjZScNCg0KJENPVU5UID0gMA0KY2xhc3MgQ29tcGFjdEhlYXANCiAgZGVmIGluaXRpYWxpemUg
YXBwDQogICAgQGFwcCA9IGFwcA0KICBlbmQNCg0KICBkZWYgY2FsbCBlbnYNCiAgICB4ID0gQGFw
cC5jYWxsIGVudg0KICAgIEdDLnN0YXJ0DQogICAgRmlsZS5vcGVuKCJiZWZvcmVfY29tcGFjdC0j
eyRDT1VOVH0udHh0IiwgJ3cnKSBkbyB8ZnwNCiAgICAgIE9iamVjdFNwYWNlLmR1bXBfYWxsKG91
dHB1dDogZikNCiAgICBlbmQNCiAgICBHQy5jb21wYWN0DQogICAgRmlsZS5vcGVuKCJhZnRlcl9j
b21wYWN0LSN7JENPVU5UfS50eHQiLCAndycpIGRvIHxmfA0KICAgICAgT2JqZWN0U3BhY2UuZHVt
cF9hbGwob3V0cHV0OiBmKQ0KICAgIGVuZA0KICAgICRDT1VOVCArPSAxDQogICAgeA0KICBlbmQN
CmVuZA0KDQp1c2UgQ29tcGFjdEhlYXANCnJ1biBSYWlscy5hcHBsaWNhdGlvbg0KYGBgDQoNClRo
ZSBhYm92ZSBtaWRkbGV3YXJlIHdpbGw6DQoNCjEuIFJ1biB0aGUgd2ViIHJlcXVlc3QNCjIuIFJ1
biB0aGUgR0MNCjMuIER1bXAgdGhlIGhlYXANCjQuIENvbXBhY3QgdGhlIGhlYXANCjUuIER1bXAg
dGhlIGhlYXANCg0KVGhpcyBnaXZlcyB1cyBhbiBpZGVhIHdoYXQgdGhlIGhlYXAgbG9va3MgbGlr
ZSBhZnRlciBhIHJlcXVlc3QsIGJ1dCBiZWZvcmUgYW5kIGFmdGVyIGNvbXBhY3Rpb24uDQpJJ3Zl
IGF0dGFjaGVkIHZpc3VhbGl6YXRpb25zIG9mIHRoZSBoZWFwIGZvciB0d28gcmVxdWVzdHMuICBF
YWNoIHZpc3VhbGl6YXRpb24NCmlzIGEgUE5HIGZpbGUgdGhhdCByZXByZXNlbnRzIHRoZSBoZWFw
LiAgRWFjaCBjb2x1bW4gb2YgdGhlIGltYWdlIHJlcHJlc2VudHMgYQ0KcGFnZSBpbiB0aGUgaGVh
cC4gIENvbHVtbnMgYXJlIHR3byBwaXhlbHMgd2lkZS4gIEVhY2ggc3F1YXJlIGluIHRoZSBjb2x1
bW4NCnJlcHJlc2VudHMgYSBzbG90LiAgU2xvdHMgYXJlIDJweCBieSAycHggc3F1YXJlcy4gIFJl
ZCBzcXVhcmVzIGFyZSBzbG90cyB0aGF0DQpoYXZlIGFuIHVubW92YWJsZSAocGlubmVkKSBvYmpl
Y3QuICBCbGFjayBzcXVhcmVzIGFyZSBzbG90cyB0aGF0IGhhdmUgYSBtb3ZlYWJsZQ0Kb2JqZWN0
LiAgT3RoZXIgc3F1YXJlcyBhcmUgZW1wdHkgc2xvdHMuDQoNClRoZSBmaXJzdCBpbWFnZSAiYmVm
b3JlLWNvbXBhY3QtMC5wbmciIGlzIGJlZm9yZSBhIGNvbXBhY3Rpb24gaGFzIGV2ZXINCm9jY3Vy
cmVkLiAgWW91IGNhbiBzZWUgdGhlcmUgYXJlIG1hbnkgdW5maWxsZWQgcGFnZXMuICBPZiB0aGUg
NTgyIHBhZ2VzLCA5OCBhcmUNCmZ1bGwsIGFuZCA0ODQgaGF2ZSBlbXB0eSBzbG90cy4gIEFmdGVy
IGNvbXBhY3Rpb24gImFmdGVyLWNvbXBhY3QtMC5wbmciLCB0aGVyZQ0KYXJlIDU3NiBwYWdlcywg
NDExIGZ1bGwsIGFuZCAxNjUgaGF2ZSBlbXB0eSBzbG90cy4NCg0KU3Vic2VxdWVudCByZXF1ZXN0
cyBoYXZlIHNpbWlsYXIgbG9va2luZyBoZWFwcyB0byAiYWZ0ZXItY29tcGFjdC0wIiAoYXMgZXhw
ZWN0ZWQpLg0KDQpUaGUgcHJvZ3JhbSBJIHVzZWQgdG8gZ2VuZXJhdGUgdGhlc2UgdmlzdWFsaXph
dGlvbnMgY2FuIGJlIGZvdW5kIGhlcmU6DQoNCiAgaHR0cHM6Ly9naXN0LmdpdGh1YnVzZXJjb250
ZW50LmNvbS90ZW5kZXJsb3ZlLzU3OGNmYjRjZTY3NzQ2NWQwYThjZWI0MzYyOTI4YTg5L3Jhdy80
MTc5OGRiNTUxNTRiMjM1MDU5ZjE0MTRhOGJiMThjZDk1NWQxYWNlL2hlYXB2aXoucmINCg0KSSds
bCBwdWJsaXNoIHRoZSBSYWlscyBhcHBsaWNhdGlvbiBJIHVzZWQgdG8gZ2VuZXJhdGUgdGhlc2Ug
Z3JhcGhzIGFuZCBhZGQgYSBsaW5rIGhlcmUuIDopDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzE1NjI2OiBNYW51YWwgQ29tcGFjdGlvbiBmb3Ig
TVJJJ3MgR0MgKGBHQy5jb21wYWN0YCkNCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vl
cy8xNTYyNiNjaGFuZ2UtNzY4OTYNCg0KKiBBdXRob3I6IHRlbmRlcmxvdmVtYWtpbmcgKEFhcm9u
IFBhdHRlcnNvbikNCiogU3RhdHVzOiBPcGVuDQoqIFByaW9yaXR5OiBOb3JtYWwNCiogQXNzaWdu
ZWU6IA0KKiBUYXJnZXQgdmVyc2lvbjogDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tDQpIaSwNCg0KSSd2ZSBhdHRhY2hlZCBhIHBhdGNoIHRoYXQgaW1wbGVtZW50cyBh
IGNvbXBhY3RvciBmb3IgTVJJLiAgSSdsbCB0cnkgdG8gZGVzY3JpYmUgdGhlIHBhdGNoIGluIGRl
dGFpbCBiZWxvdywgYnV0IHRoZSBiaWdnZXN0IHVzZXIgZmFjaW5nIGNoYW5nZXMgYXJlOg0KDQox
LiBBIG5ldyBtZXRob2QgYEdDLmNvbXBhY3RgIHRoYXQgY2FuIGJlIGNhbGxlZCBmcm9tIFJ1YnkN
CjIuIEMgZXh0ZW5zaW9ucyBoYXZlIGEgbmV3ICJhZnRlciBjb21wYWN0aW9uIiBjYWxsYmFjayB0
aGV5IGNhbiByZWdpc3Rlcg0KMy4gSW50cm9kdWN0aW9uIG9mIG5ldyBtYXJraW5nIGZ1bmN0aW9u
cyB0aGF0IGFsbG93IG9iamVjdHMgdG8gYmUgbWFya2VkLCBidXQgbm90ICJwaW5uZWQiIHRvIHRo
ZSBzYW1lIGxvY2F0aW9uDQo0LiBBIGZ1bmN0aW9uIHRvIGdldCB0aGUgbmV3IGxvY2F0aW9uIG9m
IGFuIG9iamVjdCAodG8gYmUgdXNlZCBmcm9tIHRoZSAiYWZ0ZXIgY29tcGFjdGlvbiIgY2FsbGJh
Y2spDQoNCiMgQ29tcGFjdG9yIGZvciBSR2VuR0MNCg0KVGhpcyBkb2N1bWVudCBkZXNjcmliZXMg
dGhlIGNvbXBhY3RvciBpbXBsZW1lbnRhdGlvbiBmb3IgUkdlbkdDLiAgVGhpcyBwYXRjaA0KYWRk
cyBhIG5ldyBtZXRob2QgdG8gUnVieSwgYEdDLmNvbXBhY3RgIHdoaWNoIHdpbGwgY29tcGFjdCB0
aGUgb2JqZWN0cyBpbiB0aGUNCmhlYXAuICBXaGF0IGZvbGxvd3MgaXMgYSBkZXNjcmlwdGlvbiBv
ZiB0aGUgYWxnb3JpdGhtLCBhbG9uZyB3aXRoIGFjaGlldmVtZW50cw0KYW5kIHRlY2huaWNhbCBj
aGFsbGVuZ2VzLg0KDQojIyBTdGVwcyBmb3IgQ29tcGFjdGlvbg0KDQpUaGVzZSBhcmUgdGhlIGhp
Z2ggbGV2ZWwgc3RlcHMgdGFrZW4gaW4gYEdDLmNvbXBhY3RgIGFyZSBhcyBmb2xsb3dzOg0KDQox
LiBGdWxsIEdDDQoyLiBNb3ZlIG9iamVjdHMNCjMuIFVwZGF0ZSByZWZlcmVuY2VzDQo0LiBGdWxs
IEdDDQoNCiMjIyBTdGVwIE9uZSwgRnVsbCBHQw0KDQpOb3QgYWxsIG9iamVjdHMgaW4gUnVieSdz
IGhlYXAgY2FuIG1vdmUuICBJbiBwYXJ0aWN1bGFyLCBDIGV4dGVuc2lvbnMgbWF5IGhvbGQNCnJl
ZmVyZW5jZXMgdG8gVkFMVUUgcG9pbnRlcnMuICBJZiB0aGUgVkFMVUUgcG9pbnRlcnMgbW92ZSwg
dGhlIEMgZXh0ZW5zaW9uIG1heQ0Kbm90IGJlIGFibGUgdG8gZmluZCB0aGVtIGFuZCB3aWxsIGdl
dCBhIFNFR1Ygb3IgcG9zc2libHkgd3JvbmcgZGF0YS4NCg0KVG8gcHJldmVudCB0aGlzLCBhIG5l
dyAicGlubmluZyIgdGFibGUgd2FzIGludHJvZHVjZWQuICBBbnkgb2JqZWN0IG1hcmtlZCB2aWEN
CmByYl9nY19tYXJrYCBpcyAicGlubmVkIiBhbmQgaXMgbm90IGFsbG93ZWQgdG8gbW92ZS4gIEMg
ZXh0ZW5zaW9ucyBtdXN0IG1hcmsNCnRoZWlyIHJlZmVyZW5jZXMgaW4gb3JkZXIgdG8ga2VlcCB0
aGVtIGFsaXZlLiAgU2luY2UgQyBleHRlbnNpb25zIHVzZQ0KYHJiX2djX21hcmtgIHRvIG1hcmsg
YSByZWZlcmVuY2UsIHdlIGtub3cgbm90IHRvIG1vdmUgdGhhdCByZWZlcmVuY2UuICBJbiBvcmRl
cg0KdG8gZW5zdXJlIGFsbCByZWZlcmVuY2VzIGdldCBtYXJrZWQsIHdlIHBlcmZvcm0gYSBmdWxs
IEdDLg0KDQpOZXcgZnVuY3Rpb25zLCBgcmJfZ2NfbWFya19ub19waW5gLCBldGMgd2VyZSBpbnRy
b2R1Y2VkIGFuZCB1c2VkIGludGVybmFsbHkuDQpUaGVzZSBmdW5jdGlvbnMga2VlcHMgdGhlIG9i
amVjdCBhbGl2ZSBidXQgd2l0aG91dCBwaW5uaW5nIHRoZSByZWZlcmVuY2UuDQoNClN1bW1hcnk6
IFBlcmZvcm0gYSBmdWxsIEdDIHNvIHRoYXQgb2JqZWN0cyBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFy
a2AgZG8gbm90IG1vdmUuDQoNCiMjIyBTdGVwIFR3bywgTW92ZSBPYmplY3RzDQoNClRoaXMgY29t
cGFjdG9yIHVzZXMgYSAidHdvIGZpbmdlciIgYWxnb3JpdGhtIHdoaWNoIHdhcyBpbnRyb2R1Y2Vk
IGluICJUaGUNClByb2dyYW1taW5nIExhbmd1YWdlIExJU1A6IEl0cyBPcGVyYXRpb24gYW5kIEFw
cGxpY2F0aW9ucyIgKHBhZ2UgMjI4KVteMV0uICBUd28NCnBvaW50ZXJzIHBvaW50IGF0IGVhY2gg
c2lkZSBvZiB0aGUgaGVhcCwgaWYgb25lIHNsb3QgaXMgZW1wdHksIGFuZCB0aGUgb3RoZXIgaXMN
Cm1vdmVhYmxlLCBpdCBzd2FwcyBwbGFjZXMgYW5kIGxlYXZlcyBhIGBUX01PVkVEYCBvYmplY3Qg
dGhhdCBjb250YWlucyBhDQpmb3J3YXJkaW5nIGFkZHJlc3MuDQoNCkluIFJ1YnksIHRoZSBhbGdv
cml0aG0gbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczoNCg0KYGBgcnVieQ0KZGVmIGNvbXBhY3QN
CiAgaGVhcCA9IFsgLi4uIF0gIyBtYW55IHNsb3RzDQogIGxlZnQgID0gMA0KICByaWdodCA9IGhl
YXAubGVuZ3RoIC0gMQ0KDQogIHdoaWxlIGxlZnQgPCByaWdodA0KICAgIGxlZnRfc2xvdCA9IGhl
YXBbbGVmdF0NCiAgICByaWdodF9zbG90ID0gaGVhcFtyaWdodF0NCg0KICAgIGlmIGlzX2VtcHR5
PyhsZWZ0X3Nsb3QpICYmICFpc19lbXB0eT8ocmlnaHRfc2xvdCkgJiYgY2FuX21vdmU/KHJpZ2h0
X3Nsb3QpDQogICAgICBzd2FwKGxlZnQsIHJpZ2h0KQ0KICAgICAgaGVhcFtyaWdodF0gPSBUX01P
VkVELm5ldyhsZWZ0KSAjIGxlYXZlIGZvcndhcmRpbmcgYWRkcmVzcw0KICAgIGVuZA0KDQogICAg
d2hpbGUgIWlzX2VtcHR5PyhoZWFwW2xlZnRdKQ0KICAgICAgbGVmdCArPSAxDQogICAgZW5kDQoN
CiAgICB3aGlsZSBpc19lbXB0eT8oaGVhcFtyaWdodF0pIHx8ICFjYW5fbW92ZT8oaGVhcFtyaWdo
dF0pDQogICAgICByaWdodCAtPSAxDQogICAgZW5kDQogIGVuZA0KZW5kDQpgYGANCg0KSWYgd2Ug
aGF2ZSBhIGhlYXAgd2l0aCA2IHNsb3RzLCBiZWZvcmUgY29tcGFjdGlvbiBpdCBtaWdodCBsb29r
IHNvbWV0aGluZyBsaWtlDQp0aGlzOg0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgIOKUjCDi
lIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAg
ICAgICAgICAgICAgICAgICAgIEJlZm9yZSBDb21wYWN0aW9uICAg4pSCICAgICAgIA0KICAgICAg
ICAgICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKU
gCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA
4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA
4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRleCAgICDilIIgIDEgIOKUgiAg
MiAg4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIINCiAgICAgICAgICAgICAgIOKU
nOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKU
gOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUpA0KU2xv
dCBDb250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgkVtcHR54pSCRW1wdHnilIIgIEMgIOKUgiAg
RCAg4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKU
giAgICAg4pSCICAgICDilIINCiAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUtOKU
gOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKU
gOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KYGBgDQoNCkFmdGVyIGNvbXBhY3Rpb24s
IGJ1dCBiZWZvcmUgcmVmZXJlbmNlIHVwZGF0ZSwgaXQgd2lsbCBsb29rIGxpa2UgdGhpczoNCg0K
YGBgDQogICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA
IOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIg
Q29tcGFjdGlvbiAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIOKUlCDilIAg4pSA
IOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAg
ICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKU
gOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKU
kA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSCICA0ICDilIIgIDUg
IOKUgiAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDilIDilLzilIDilIDi
lIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDi
lIDilIDilLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKUgiAgQSAg4pSCICBC
ICDilIIgIEQgIOKUgiAgQyAg4pSCTU9WRUTilIJNT1ZFROKUgg0KICAgICAgICAgICAgICAg4pSC
ICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIJUTyA0IOKUglRPIDMg4pSCDQogICAgICAg
ICAgICAgICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDi
lIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDi
lIDilJgNCmBgYA0KDQpTbG90cyA1IGFuZCA2IGNvbnRhaW4gYFRfTU9WRURgIG9iamVjdHMgdGhh
dCBwb2ludCB0byB0aGUgbmV3IGxvY2F0aW9ucyBvZiBEIGFuZA0KQyBvYmplY3RzLg0KDQojIyMg
U3RlcCBUaHJlZSwgVXBkYXRlIFJlZmVyZW5jZXMNCg0KQWZ0ZXIgb2JqZWN0cyBoYXZlIG1vdmVk
LCByZWZlcmVuY2VzIGFyZSB1cGRhdGVkLiAgVGhpcyBpcyBhIG1hdHRlciBvZiB1cGRhdGluZw0K
YW55IHJlZmVyZW5jZXMgdG8gdXNlIHRoZSBmb3J3YXJkaW5nIGFkZHJlc3MgcmF0aGVyIHRoYW4g
dGhlIG9yaWdpbmFsIGxvY2F0aW9uLg0KDQpGb3IgZXhhbXBsZSwgaWYgb2JqZWN0IEEgaGFzIGEg
cmVmZXJlbmNlIHRvIEMsIGFuZCBCIGEgcmVmZXJlbmNlIHRvIEQ6DQoNCmBgYA0KICAgICAgICAg
ICAgICAgICAgICAg4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDi
lIAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIENvbXBhY3Rpb24gICDi
lIIgICAgICAgDQogICAgICAgICAgICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg4pSAIOKUgCDi
lIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICDilIzilIDilIDi
lIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDi
lIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilJANCiBTbG90IEluZGV4
ICAgIOKUgiAgMSAg4pSCICAyICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIgIDYgIOKUgg0K
ICAgICAgICAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA
4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA
4pSA4pSA4pSA4pSkDQpTbG90IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSCRW1wdHnilIJF
bXB0eeKUgiAgQyAg4pSCICBEICDilIINCiAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDi
lIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgg0KICAgICAgICAgICAgICAg4pSU4pSA
4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA
4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSYDQogICAgICAg
ICAgICAgICAgICDilIIgICAgIOKUgiAgICAgICAgICAgICAgICAg4payICAgICDilrIgICANCiAg
ICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAg
IA0KICAgICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICDilIIgICANCiAgICAg
ICAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIA0KYGBgDQoNCkFmdGVyIGNv
bXBhY3Rpb24sIGJ1dCBiZWZvcmUgdXBkYXRpbmcgcmVmZXJlbmNlcywgdGhlIGhlYXAgd2lsbCBs
b29rIGxpa2UgdGhpczoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDi
lIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAg
ICAgICAgICAgICAgQWZ0ZXIgQ29tcGFjdGlvbiAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAg
ICAgICAgIOKUlCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAg
ICAgICANCiAgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKU
gOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKU
rOKUgOKUgOKUgOKUgOKUgOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAg
MyAg4pSCICA0ICDilIIgIDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDi
lIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDi
lIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVu
dHMgIOKUgiAgQSAg4pSCICBCICDilIIgIEQgIOKUgiAgQyAg4pSCTU9WRUTilIJNT1ZFROKUgg0K
ICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIJUTyA0IOKU
glRPIDMg4pSCDQogICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDi
lIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDi
lIDilLTilIDilIDilIDilIDilIDilJgNCiAgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAg
ICAgICAgICAgICAgICDilrIgICAgIOKWsiAgIA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDi
lIIgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgDQogICAgICAgICAgICAgICAgICDilJTi
lIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
lIDilIDilIDilIDilJggICAgIOKUgiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAg4pSU4pSA
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSA4pSYICAgDQpgYGANCg0KVGhlIHVwZGF0ZSByZWZlcmVuY2VzIHN0ZXAgbG9va3Mg
YXQgZWFjaCBvYmplY3QgaW4gdGhlIGhlYXAsIGNoZWNrcyB0byBzZWUgaWYgaXQNCnJlZmVyZW5j
ZXMgYW55IG1vdmVkIHNsb3RzLCB0aGVuIHVwZGF0ZXMgdGhlIHJlZmVyZW5jZSB0byB1c2UgdGhl
IG5ldyBsb2NhdGlvbi4NCkluIFJ1YnksIGl0IGxvb2tzIGxpa2UgdGhpczoNCg0KYGBgcnVieQ0K
ZGVmIHVwZGF0ZV9yZWZlcmVuY2VzDQogIGhlYXAuZWFjaCBkbyB8c2xvdHwNCiAgICBuZXh0IGlm
IGlzX2VtcHR5PyhzbG90KSB8fCBpc19tb3ZlZD8oc2xvdCkNCg0KICAgIHNsb3QucmVmZXJlbmNl
cy5lYWNoX3dpdGhfaW5kZXggZG8gfGNoaWxkLCBpfA0KICAgICAgaWYgaXNfbW92ZWQ/KGNoaWxk
KQ0KICAgICAgICBzbG90LnNldF9yZWZlcmVuY2UoaSwgY2hpbGQubmV3X2xvY2F0aW9uKQ0KICAg
ICAgZW5kDQogICAgZW5kDQogIGVuZA0KZW5kDQpgYGANCg0KQWZ0ZXIgcmVmZXJlbmNlIHVwZGF0
ZXMsIHRoZSBoZWFwIHdpbGwgbG9vayBsaWtlIHRoaXM6DQoNCmBgYA0KICAgICAgICAgICAgICAg
ICAgICAg4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAg
ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgUmVmIFVwZGF0ZXMgICDilIIgICAg
ICAgDQogICAgICAgICAgICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA
IOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICDilIzilIDilIDilIDilIDi
lIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDi
lKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilJANCiBTbG90IEluZGV4ICAgIOKU
giAgMSAg4pSCICAyICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIgIDYgIOKUgg0KICAgICAg
ICAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA
4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA
4pSA4pSkDQpTbG90IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSCICBEICDilIIgIEMgIOKU
gk1PVkVE4pSCTU9WRUTilIINCiAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAg
IOKUgiAgICAg4pSCVE8gNCDilIJUTyAzIOKUgg0KICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA
4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA
4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSYDQogICAgICAgICAgICAg
ICAgICDilIIgICAgIOKUgiAgICAg4payICAgICDilrIgICAgICAgICAgICAgICANCiAgICAgICAg
ICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAgICAgICAgICAgIA0KICAg
ICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA
4pSA4pSA4pSA4pSA4pSYICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICDi
lJTilIDilIDilIDilIDilIDilJggICAgICAgICAgICAgICAgICAgICANCmBgYA0KDQojIyMgU3Rl
cCBGb3VyLCBGdWxsIEdDDQoNCkFmdGVyIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIHVwZGF0ZWQsIGEg
ZnVsbCBHQyBpcyBwZXJmb3JtZWQuICBUaGlzIGNvbnZlcnRzIHRoZQ0KYFRfTU9WRURgIHNsb3Rz
IGJhY2sgaW4gdG8gYFRfRU1QVFlgIHNsb3RzLiAgVGhlIEdDIGF1dG9tYXRpY2FsbHkgdGFrZXMg
Y2FyZSBvZg0KdGhpcyBiZWNhdXNlIG5vIG9iamVjdCBzaG91bGQgcmVmZXJlbmNlIGEgYFRfTU9W
RURgIHNsb3QuDQoNCiMjIE5vbiBNb3ZpbmcgT2JqZWN0cw0KDQpOb24gbW92aW5nIG9iamVjdHMg
YXJlOg0KDQoxLiBPYmplY3RzIG9uIHRoZSBzdGFjaw0KMi4gT2JqZWN0cyBtYXJrZWQgd2l0aCBg
cmJfZ2NfbWFya2ANCjMuIEhhc2gga2V5IG9iamVjdHMNCg0KIyMjIE9iamVjdHMgb24gdGhlIHN0
YWNrDQoNClRoZSBzdGFjayBzaG91bGQgbm90IGJlIG11dGF0ZWQsIHNvIHRoZXNlIGFyZSBwaW5u
ZWQuDQoNCiMjIyBPYmplY3RzIG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYA0KDQpBcyBtZW50aW9u
ZWQgZWFybGllciwgYW55IG9iamVjdCBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2AgbWF5IG5vdCBt
b3ZlIGJlY2F1c2UgYQ0KQyBleHRlbnNpb24gbWF5IGhvbGQgYSByZWZlcmVuY2UuICBIZXJlIGlz
IGFuIGV4Y2VycHQgZnJvbSBZYWpsLCBhIEpTT04gcGFyc2VyLg0KVGhpcyBpcyB0aGUgbWFyayBm
dW5jdGlvbiBpdCB1c2VzOg0KDQpgYGBjDQpzdGF0aWMgdm9pZCB5YWpsX2VuY29kZXJfd3JhcHBl
cl9tYXJrKHZvaWQgKiB3cmFwcGVyKSB7DQogICAgeWFqbF9lbmNvZGVyX3dyYXBwZXIgKiB3ID0g
d3JhcHBlcjsNCiAgICBpZiAodykgew0KICAgICAgICByYl9nY19tYXJrKHctPm9uX3Byb2dyZXNz
X2NhbGxiYWNrKTsNCiAgICAgICAgcmJfZ2NfbWFyayh3LT50ZXJtaW5hdG9yKTsNCiAgICB9DQp9
DQoNCg0Kb2JqID0gRGF0YV9NYWtlX1N0cnVjdChrbGFzcywgeWFqbF9lbmNvZGVyX3dyYXBwZXIs
IHlhamxfZW5jb2Rlcl93cmFwcGVyX21hcmssIHlhamxfZW5jb2Rlcl93cmFwcGVyX2ZyZWUsIHdy
YXBwZXIpOw0KYGBgDQoNClRoZSB2YWx1ZXMgaW4gdGhpcyBtYXJrIGZ1bmN0aW9uIGB3LT5vbl9w
cm9ncmVzc19jYWxsYmFja2AgYW5kIGB3LT50ZXJtaW5hdG9yYA0Kd2lsbCBub3QgbW92ZSBzaW5j
ZSB0aGV5IGFyZSBwaW5uZWQgYnkgYHJiX2djX21hcmtgLg0KDQojIyMgSGFzaCBrZXkgb2JqZWN0
cw0KDQpDZXJ0YWluIGhhc2gga2V5cyB3aWxsIG5vdCBtb3ZlLiAgTW9zdCBvYmplY3RzIHVzZSB0
aGVpciBhZGRyZXNzIGFzIHRoZSBoYXNoDQp2YWx1ZS4gIElmIHRoZSBvYmplY3QgbW92ZXMsIHRo
ZSBoYXNoIHZhbHVlIGNvdWxkIGNoYW5nZSwgc28gaGFzaCBrZXlzIGFyZSBub3QNCmFsbG93ZWQg
dG8gbW92ZS4NCg0KVGhlcmUgaXMgYW4gZXhjZXB0aW9uIGZvciBzdHJpbmcgb2JqZWN0cy4gIFN0
cmluZyBvYmplY3RzIGNhbGN1bGF0ZSB0aGVpciBoYXNoDQpiYXNlZCBvbiB0aGUgYnl0ZXMgaW4g
dGhlIHN0cmluZy4gIFNpbmNlIHRoZSBieXRlcyBpbiB0aGUgc3RyaW5nIGRvIG5vdCBjaGFuZ2UN
CmFmdGVyIG1vdmUsIHRoZXkgYXJlIGFsbG93ZWQgdG8gbW92ZS4gIE1vc3QgaGFzaCBrZXlzIGlu
IGxhcmdlIHByb2dyYW1zIGFyZQ0Kc3RyaW5ncywgc28gb25seSBhbGxvd2luZyBzdHJpbmcga2V5
cyB0byBtb3ZlIHNlZW1lZCBlbm91Z2guDQoNCiMjIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnMNCg0K
IyMjIE9iamVjdCBJRA0KDQpgT2JqZWN0I29iamVjdF9pZGAgYmFzZXMgaXRzIHZhbHVlIGZyb20g
dGhlIGFkZHJlc3Mgb2YgdGhlIG9iamVjdC4gIEZvciBleGFtcGxlOg0KDQpgYGBydWJ5DQp4ID0g
T2JqZWN0Lm5ldw0KaWQgPSB4Lm9iamVjdF9pZA0KR0MuY29tcGFjdCAgICAgICAgIyBgeGAgbW92
ZXMNCmlkID09IHgub2JqZWN0X2lkICMgYGlkYCBzaG91bGQgYmUgc2FtZSBhcyBgeC5vYmplY3Rf
aWRgDQpgYGANCg0KV2UgZXhwZWN0IHRoZSBvYmplY3QgaWQgdG8gcmVtYWluIHRoZSBzYW1lIHJl
Z2FyZGxlc3Mgb2YgY29tcGFjdGlvbi4gIFRvIGRlYWwNCndpdGggYG9iamVjdF9pZGAsIHR3byBo
YXNoZXMgd2VyZSBpbnRyb2R1Y2VkLiAgT25lIGhhc2ggY29udGFpbnMgYSBtYXAgb2YgdGhlDQpv
YmplY3QgdG8gdGhlICpzZWVuKiBvYmplY3QgaWQuICBUaGUgc2Vjb25kIG1hcCBjb250YWlucyBh
bGwgc2VlbiBvYmplY3QgaWRzLg0KVGhlIG1hcHMgYXJlIHVwZGF0ZWQgYW55IHRpbWUgYG9iamVj
dF9pZGAgaXMgY2FsbGVkLCBhbiBvYmplY3QgbW92ZXMsIG9yIGFuDQpvYmplY3QgaXMgZnJlZWQu
DQoNCm9iamVjdF9pZCBpbXBsZW1lbnRhdGlvbiBpbiBSdWJ5Og0KDQpgYGBydWJ5DQokb2JqX3Rv
X2lkID0ge30NCiRpZF90b19vYmogPSB7fQ0KDQpjbGFzcyBPYmplY3QNCiAgZGVmIG9iamVjdF9p
ZA0KICAgIGlmICRvYmpfdG9faWQua2V5PyhhZGRyZXNzKQ0KICAgICAgIyBTZWNvbmQgY2FsbCB0
byBvYmplY3RfaWQgb24gdGhpcyBvYmplY3QNCiAgICAgIHJldHVybiAkb2JqX3RvX2lkW2FkZHJl
c3NdDQogICAgZWxzZQ0KICAgICAgIyBGaXJzdCBjYWxsIHRvIG9iamVjdF9pZCBvbiB0aGlzIG9i
amVjdA0KDQogICAgICBhZGRyID0gc2VsZi5hZGRyZXNzDQoNCiAgICAgIGxvb3AgZG8NCiAgICAg
ICAgaWYgJHNlZW5faWRzLmtleT8oYWRkcikNCiAgICAgICAgICAjIFJlc29sdmUgY29uZmxpY3QN
CiAgICAgICAgICBhZGRyICs9IHNpemVvZihSVkFMVUUpDQogICAgICAgIGVsc2UNCiAgICAgICAg
ICAkb2JqX3RvX2lkW3NlbGYuYWRkcmVzc10gPSBhZGRyDQogICAgICAgICAgJGlkX3RvX29ialth
ZGRyXSAgICAgICAgID0gc2VsZg0KICAgICAgICAgIHJldHVybiBhZGRyDQogICAgICAgIGVuZA0K
ICAgICAgZW5kDQogICAgZW5kDQogIGVuZA0KDQogIHByaXZhdGUNCg0KICBkZWYgYWRkcmVzcw0K
ICAgICMgcmV0dXJucyBhZGRyZXNzIGluIG1lbW9yeSBvZiBvYmplY3QNCiAgZW5kDQplbmQNCmBg
YA0KDQpEdXJpbmcgY29tcGFjdGlvbjoNCg0KYGBgcnVieQ0KZGVmIGNvbXBhY3QNCiAgaGVhcCA9
IFsgLi4uIF0gIyBtYW55IHNsb3RzDQoNCiAgd2hpbGUgbGVmdCA8IHJpZ2h0DQogICAgZGVzdF9z
bG90ID0gaGVhcFtsZWZ0XQ0KICAgIHNvdXJjZV9zbG90ID0gaGVhcFtyaWdodF0NCg0KICAgIGlm
IG1vdmluZz8oc291cmNlX3Nsb3QpDQogICAgICBpZiAkb2JqX3RvX2lkLmtleT8oc291cmNlX3Ns
b3QuYWRkcmVzcykNCiAgICAgICAgaWQgPSAkb2JqX3RvX2lkLmRlbGV0ZShzb3VyY2Vfc2xvdC5h
ZGRyZXNzKQ0KICAgICAgICAkb2JqX3RvX2lkW2Rlc3Rfc2xvdC5hZGRyZXNzXSA9IGlkDQogICAg
ICAgICRpZF90b19vYmpbaWRdICAgICAgICAgICAgICAgID0gZGVzdF9zbG90LmFkZHJlc3MNCiAg
ICAgIGVuZA0KDQogICAgICAjIGV0Yw0KICAgIGVuZA0KICBlbmQNCmVuZA0KYGBgDQoNCkR1cmlu
ZyBGcmVlOg0KDQpgYGBydWJ5DQpkZWYgZnJlZShvYmopDQogIGlmICRvYmpfdG9faWQua2V5Pyhv
YmouYWRkcmVzcykNCiAgICAkc2Vlbl9pZHMuZGVsZXRlKCRvYmpfdG9faWQuZGVsZXRlKG9iai5h
ZGRyZXNzKSkNCiAgZW5kDQplbmQNCmBgYA0KDQojIyMgT2JqZWN0U3BhY2UuX2lkMnJlZg0KDQpX
aGVuIGdlbmVyYXRpbmcgYW4gb2JqZWN0IGlkLCBpbiB0aGUgY2FzZSBvZiBhIGNvbGxpc2lvbiwg
dGhlIGFkZHJlc3MgaXMNCmluY3JlbWVudGVkIGJ5IDQwLiAgVGhpcyBlbmFibGVzIGBfaWQycmVm
YCB0byBkZXRlcm1pbmUgdGhlcmUgaXMgYSBWQUxVRSBwb2ludGVyDQphbmQgcm91bmQgdHJpcCB0
aGUgb2JqZWN0IGNvcnJlY3RseS4NCg0KIyMgQ29tcGFjdGlvbiBTdXBwb3J0IGZvciBDIGV4dGVu
c2lvbnMNCg0KQW55IG9iamVjdCBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2Agd2lsbCBiZSAicGlu
bmVkIiBhbmQgY2Fubm90IG1vdmUuICBDDQpleHRlbnNpb25zIG1hcmsgb2JqZWN0cyB2aWEgYHJi
X2djX21hcmtgLCBzbyB0aGlzIGVuc3VyZXMgdGhhdCBwb2ludGVycyBpbiBDDQpzdGF5IHZhbGlk
Lg0KDQpIb3dldmVyLCBzb21lIEMgZXh0ZW5zaW9ucyBtYXkgd2FudCB0byBzdXBwb3J0IHJlZmVy
ZW5jZSBtb3ZlbWVudC4NCg0KIyMjIFJlZmVyZW5jZSBNb3ZlbWVudCBpbiBDIGV4dGVuc2lvbnMN
Cg0KSW4gb3JkZXIgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGlmIGEgQyBl
eHRlbnNpb24gaG9sZHMgYSByZWZlcmVuY2UNCnRvIGEgVkFMVUUsIHRoZSBWQUxVRSBzaG91bGQg
bm90IG1vdmUuICBHb2luZyBmb3J3YXJkLCBDIGV4dGVuc2lvbnMgY2FuIHN1cHBvcnQNCm1vdmlu
ZyBWQUxVRXMuICBUbyBzdXBwb3J0IG1vdmluZyBWQUxVRXMsIGEgQyBleHRlbnNpb24gc2hvdWxk
IGNoYW5nZQ0KYHJiX2djX21hcmtgIHRvIGByYl9nY19tYXJrX25vX3BpbmAsIHRoZW4gaW1wbGVt
ZW50IGEgbmV3IGNhbGxiYWNrIHRoYXQgaXMNCmNhbGxlZCBkdXJpbmcgY29tcGFjdGlvbiB0aGF0
IGdpdmVzIHRoZSBleHRlbnNpb24gYW4gb3Bwb3J0dW5pdHkgdG8gdXBkYXRlIGl0cw0Kb3duIHJl
ZmVyZW5jZXMuICBBIG5ldyBmdW5jdGlvbiBgcmJfZ2NfbmV3X2xvY2F0aW9uYCB3aWxsIHJldHVy
biB0aGUgbmV3DQpsb2NhdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIFZBTFVFLg0KDQpIZXJlIGlzIGFu
IGV4YW1wbGUgZm9yIGF1dG9sb2FkIGZyb20gYHZhcmlhYmxlLmNgLiAgQSBuZXcgY29tcGFjdGlv
biBjYWxsYmFjayBpcw0KcmVnaXN0ZXJlZCwgYGF1dG9sb2FkX2lfY29tcGFjdGA6DQoNCmBgYGMN
CnN0YXRpYyBjb25zdCByYl9kYXRhX3R5cGVfdCBhdXRvbG9hZF9kYXRhX2lfdHlwZSA9IHsNCiAg
ICAiYXV0b2xvYWRfaSIsDQogICAge2F1dG9sb2FkX2lfbWFyaywgYXV0b2xvYWRfaV9mcmVlLCBh
dXRvbG9hZF9pX21lbXNpemUsIGF1dG9sb2FkX2lfY29tcGFjdH0sDQogICAgMCwgMCwgUlVCWV9U
WVBFRF9GUkVFX0lNTUVESUFURUxZDQp9Ow0KYGBgDQoNClRoZSBtYXJrIGZ1bmN0aW9uIGNoYW5n
ZXMgdG8gKm1hcmsqIHJlZmVyZW5jZXMsIGJ1dCAqbm90KiBwaW4gdGhlbToNCg0KYGBgYw0Kc3Rh
dGljIHZvaWQNCmF1dG9sb2FkX2lfbWFyayh2b2lkICpwdHIpDQp7DQogICAgc3RydWN0IGF1dG9s
b2FkX2RhdGFfaSAqcCA9IHB0cjsNCg0KICAgIHJiX2djX21hcmtfbm9fcGluKHAtPmZlYXR1cmUp
Ow0KDQogICAgLyogYWxsb3cgR0MgdG8gZnJlZSB1cyBpZiBubyBtb2R1bGVzIHJlZmVyIHRvIHRo
aXMgdmlhIGF1dG9sb2FkX2NvbnN0LmFkICovDQogICAgaWYgKGxpc3RfZW1wdHkoJnAtPmNvbnN0
YW50cykpIHsNCiAgICAgICAgcmJfaGFzaF9kZWxldGUoYXV0b2xvYWRfZmVhdHVyZW1hcCwgcC0+
ZmVhdHVyZSk7DQogICAgfQ0KfQ0KYGBgDQoNCkFmdGVyIHRoZSBoZWFwIGlzIGNvbXBhY3RlZCwg
YW55IEMgZXh0ZW5zaW9ucyB0aGF0IHJlZ2lzdGVyZWQgYSAiY29tcGFjdGlvbiINCmNhbGxiYWNr
IHdpbGwgYmUgY2FsbGVkIGFuZCBoYXZlIGEgY2hhbmNlIHRvIHVwZGF0ZSBpbnRlcm5hbCByZWZl
cmVuY2VzLiAgVGhlDQphdXRvbG9hZCBjb21wYWN0aW9uIGZ1bmN0aW9uIGlzIGxpa2UgdGhpczoN
Cg0KYGBgYw0Kc3RhdGljIHZvaWQNCmF1dG9sb2FkX2lfY29tcGFjdCh2b2lkICpwdHIpDQp7DQog
ICAgc3RydWN0IGF1dG9sb2FkX2RhdGFfaSAqcCA9IHB0cjsNCiAgICBwLT5mZWF0dXJlID0gcmJf
Z2NfbmV3X2xvY2F0aW9uKHAtPmZlYXR1cmUpOw0KYGBgDQoNClRoZSBjb21wYWN0aW9uIGNhbGxi
YWNrIGFza3MgZm9yIHRoZSBuZXcgbG9jYXRpb24gZm9yIHRoZSBgcC0+ZmVhdHVyZWANCnJlZmVy
ZW5jZS4gIGByYl9nY19uZXdfbG9jYXRpb25gIHdpbGwgZWl0aGVyIHJldHVybiB0aGUgY3VycmVu
dCB2YWx1ZSBvZg0KYHAtPmZlYXR1cmVgIChpbiB0aGUgY2FzZSB0aGUgVkFMVUUgZGlkIG5vdCBt
b3ZlKSwgb3IgdGhlIG5ldyBsb2NhdGlvbi4NCg0KIyMgUmVmZXJlbmNlIFZlcmlmaWNhdGlvbiBh
bmQgVGVzdGluZw0KDQpBZnRlciBjb21wYWN0aW9uLCBvYmplY3RzIHRoYXQgaGF2ZSBtb3ZlZCBh
cmUgY2hhbmdlZCB0byBgVF9NT1ZFRGAgb2JqZWN0cyB3aXRoDQpmb3J3YXJkaW5nIGFkZHJlc3Nl
cy4gIE9uY2UgYWxsIHJlZmVyZW5jZXMgYXJlIHVwZGF0ZWQsIG5vIG9iamVjdCBzaG91bGQgcG9p
bnQNCnRvIGEgYFRfTU9WRURgIHNsb3QuICBXZSBjYW4gc2F5IHRoYXQgYmVmb3JlIGFuZCBhZnRl
ciBjb21wYWN0aW9uLCBubyBvYmplY3QNCnNob3VsZCBldmVyIHBvaW50IGF0IGEgYFRfTU9WRURg
IHNsb3QuICBTbyBpZiBhIGBUX01PVkVEYCBvYmplY3QgaXMgZXZlciBwdXNoZWQNCm9uIHRvIHRo
ZSBtYXJrIHF1ZXVlLCB0aGVyZSBpcyBhIGJ1Zy4gIGBwdXNoX21hcmtfc3RhY2tgIGhhcyBhIGNo
ZWNrIGZvcg0KYFRfTU9WRURgIG9iamVjdHMsIGFuZCB3aWxsIGNyYXNoIGlmIGEgYFRfTU9WRURg
IG9iamVjdCBpcyBldmVyIHB1c2hlZCBvbiB0byB0aGUNCm1hcmsgc3RhY2suDQoNCkEgbWV0aG9k
IGBHQy52ZXJpZnlfY29tcGFjdGlvbl9yZWZlcmVuY2VzYCB3YXMgYWRkZWQgdGhhdCBkb3VibGVz
IHRoZSBhdmFpbGFibGUNCmhlYXAgc2l6ZSwgdGhlbiBjb21wYWN0cyB0aGUgaGVhcC4gIFNpbmNl
IHRoZSBoZWFwIGhhcyBkb3VibGVkIGluIHNpemUsIGFueQ0Kb2JqZWN0IHRoYXQgY2FuIG1vdmUg
d2lsbCBtb3ZlLiAgQW55IHJlZmVyZW5jZXMgdG8gYFRfTU9WRURgIG9iamVjdHMgd2lsbCBiZQ0K
Y2F1Z2h0IGR1cmluZyB0aGUgR0MgcGhhc2UgYWZ0ZXIgY29tcGFjdGlvbi4NCg0KIyMgS25vd24g
SXNzdWUNCg0KU2FmZXR5IGZvciBDIGV4dGVuc2lvbnMgZGVwZW5kcyBlbnRpcmVseSBvbiBDIGV4
dGVuc2lvbnMgbWFya2luZyB0aGVpcg0KcmVmZXJlbmNlcy4gIElmIGEgQyBleHRlbnNpb24gZG9l
cyBub3QgbWFyayBhIHJlZmVyZW5jZSwgdGhlIGNvbXBhY3RvciBhc3N1bWVzDQp0aGF0IHRoZSBv
YmplY3QgaXMgc2FmZSB0byBtb3ZlLiAgVGhpcyBjYW4gY2F1c2UgYW4gZXJyb3IgaW4gdGhlIGZv
bGxvd2luZw0Kc2l0dWF0aW9uLCB3aGVuIHRoZXJlIGlzIGFuIG9iamVjdCBncmFwaCBsaWtlIHRo
aXM6DQoNCg0KYGBgDQog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSQICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUkCANCiDilIIgIFJ1YnkgT2JqZWN0ICDilIIgICAgICAg4pSCICBSdWJ5IE9iamVj
dCAg4pSCIA0KIOKUgiAgSW1wbGVtZW50ZWQgIOKUgiAgICAgICDilIIgIEltcGxlbWVudGVkICDi
lIIgDQog4pSCICAgIGluIFJ1YnkgICAg4pSCICAgICAgIOKUgiAgICAgaW4gQyAgICAgIOKUgiAN
CiDilIIgICAgICAgICAgICAgICDilIIgICAgICAg4pSCICAgICAgICAgICAgICAg4pSCIA0KIOKU
lOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICDi
lJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggDQogICAg
ICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgIA0KICAgICAgICAg4pSC
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICDilIIgICAgICAgICAg
ICAgICAgICAgICAgIOKUgiAgIE5PVCAgIA0KIE1hcmtlZCAg4pSCICAgICAgICAgICAgICAgICAg
ICAgICAgICBNYXJrZWQgDQogICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgIOKUgiAg
ICAgICAgIA0KICAgICAgICAg4pSCICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSA4pSA4pSA4pSQICAgICAgICAgICAgIA0KICAgICAgICAg4pSCICAg4pSCICAgICAg
ICAgICAgICAg4pSCICAg4pSCICAgICAgICAgDQogICAgICAgICDilIIgICDilIIgIFJ1YnkgT2Jq
ZWN0ICDilIIgICAgICAgICAgICAgDQogICAgICAgICDilJTilIDilIDilrbilIIgICAgICAgICAg
ICAgICDilILil4DilIAg4pSYICAgICAgICAgDQogICAgICAgICAgICAg4pSCICAgICAgICAgICAg
ICAg4pSCICAgICAgICAgICAgIA0KICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgICAgICANCmBgYA0KDQpJZiB0aGUg
QyBleHRlbnNpb24gY29udGFpbnMgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0LCBidXQgZXhwZWN0
cyB0aGUgb2JqZWN0DQpub3QgdG8gbW92ZSBiZWNhdXNlIGEgUnVieSBvYmplY3QgY29udGFpbnMg
YSByZWZlcmVuY2UsIHRoZW4gdGhlIHRhcmdldCBSdWJ5DQpvYmplY3QgKm1heSogbW92ZSBhbmQg
dGhlIHJlZmVyZW5jZSBpbiB0aGUgQyBleHRlbnNpb24gd2lsbCBiZSB3cm9uZy4gIEkgbGlrZSB0
bw0KY2FsbCB0aGVzZSAiZ2hvc3QgcmVmZXJlbmNlcyIgYmVjYXVzZSB0aGUgR0MgY2Fubm90IHNl
ZSB0aGVtIGJ1dCB0aGV5IHdpbGwgY29tZQ0KYmFjayB0byBoYXVudCB5b3UuDQoNClRoZSBzb2x1
dGlvbiB0byB0aGlzIGlzIGVpdGhlcjoNCg0KMS4gQ2hhbmdlIHRoZSBDIGV4dGVuc2lvbiB0byBg
cmJfZ2NfbWFya2AgdGhlIG9iamVjdA0KMi4gUmVtb3ZlIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUg
QyBleHRlbnNpb24NCg0KT25lIGV4YW1wbGUgb2YgdGhpcyBzaXR1YXRpb24gd2FzIGZpeGVkIGhl
cmU6DQoNCiAgaHR0cHM6Ly9naXRodWIuY29tL21zZ3BhY2svbXNncGFjay1ydWJ5L2lzc3Vlcy8x
MzMNCg0KIyMgU3VtbWFyeQ0KDQpCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIEMgZXh0ZW5z
aW9ucyBpcyBtYWludGFpbmVkIGJ5ICJwaW5uaW5nIiBhbnkNCnJlZmVyZW5jZXMgbWFya2VkIHdp
dGggYHJiX2djX21hcmtgLiAgQSBmdWxsIG1hcmsgKm11c3QqIGJlIGRvbmUgYmVmb3JlDQpjb21w
YWN0aW5nIHRvIGRpc2NvdmVyIGFsbCBwaW5uZWQgcmVmZXJlbmNlcy4NCg0KQSBuZXcgY2FsbGJh
Y2sgZm9yIEMgZXh0ZW5zaW9ucyBpcyBpbnRyb2R1Y2VkIHNvIHRoYXQgQyBleHRlbnNpb25zIGNh
biBzdXBwb3J0DQpjb21wYWN0aW9uLiAgQyBleHRlbnNpb25zIHRoYXQgd2lzaCB0byBzdXBwb3J0
IGNvbXBhY3Rpb24gbXVzdCB1c2UgdGhlIG5ldw0KY2FsbGJhY2ssIGByYl9nY19tYXJrX25vX3Bp
bmAsIGFuZCBgcmJfZ2NfbmV3X2xvY2F0aW9uYC4NCg0KQyBleHRlbnNpb25zIHRoYXQgbWFpbnRh
aW4gcG9pbnRlcnMgYnV0IGRvIG5vdCBtYXJrIHRob3NlIHBvaW50ZXJzIG1heSBTRUdWLiAgV2UN
CmNhbiB1c2UgYEdDLnZlcmlmeV9jb21wYWN0aW9uX3JlZmVyZW5jZXNgIHRvIGRpc2NvdmVyIHRo
ZXNlIGlzc3Vlcy4NCg0KW14xXTogU2VlIGFsc28gIlRoZSBHYXJiYWdlIENvbGxlY3Rpb24gSGFu
ZGJvb2siIHBhZ2UgMzINCg0KDQotLS1GaWxlcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tDQowMDAxLUNvbXBhY3RpbmctR0MtZm9yLU1SSS5wYXRjaCAoNzYuNSBLQikNCmJlZm9yZV9j
b21wYWN0LTAucG5nICgxMTEgS0IpDQphZnRlcl9jb21wYWN0LTAucG5nICg4MC42IEtCKQ0KYmVm
b3JlX2NvbXBhY3QtMS5wbmcgKDgxLjIgS0IpDQphZnRlcl9jb21wYWN0LTEucG5nICg3OS40IEtC
KQ0KDQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvDQoKVW5zdWJzY3JpYmU6IDxt
YWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJl
Pgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVi
eS1jb3JlPgo=

In This Thread

Prev Next