[Patches] Sightly clean-up cycle-gc patch

Charles G Waldman cgw@fnal.gov
Tue, 25 Apr 2000 11:02:09 -0500 (CDT)


DQogSSBkb24ndCBrbm93IHdoYXQgaGFwcGVuZWQgd2l0aCB0aGF0IGxhc3QgbWVzc2FnZSAt
IGl0IHNvbWVob3cgZ290DQpiYXNlLTY0IGVuY29kZWQgd2l0aG91dCBtZSBhc2tpbmcgZm9y
IHRoYXQuICBTb3JyeSEgIFR1cm5zIG91dCB0aGF0DQpub3Qgb25seSB3YXMgdGhlIG1lc3Nh
Z2UgdW5yZWFkYWJsZSwgYnV0IEkgYXR0YWNoZWQgdGhlIHdyb25nIGZpbGUuDQpEb3VibGUt
b29wcyENCg0KDQpUaGUgcHJvYmxlbXMgSSB3YXMgaGF2aW5nIGdldHRpbmcgTmVpbCdzIGN5
Y2xpYy1nYyBzdHVmZiB0byB3b3JrIHdpdGgNCnRoZSBsYXRlc3QgQ1ZTIFB5dGhvbiBoYWQg
bm90aGluZyB0byBkbyB3aXRoIFRyYXNoY2FuIC0gc29ycnksDQpDaHJpc3RpYW4hICBJdCB3
YXMgbXkgb3duIGNoYW5nZXMgdG8gdHVwbGVvYmplY3QuYy4gIEl0IHR1cm5lZCBvdXQgdG8N
CmJlIGEgbGl0dGxlIHRyaWNreSB0byBnZXQgdGhlIEdDIGluZm8gaGFuZGxlZCBjb3JyZWN0
bHkgZHVyaW5nDQpfUHlUdXBsZV9SZXNpemUuICBCZWxvdyBpcyBhIHZlcnNpb24gb2YgTmVp
bCdzIHBhdGNoIHRoYXQgYXBwbGllcw0KY2xlYW5seSB0byBjdXJyZW50IENWUyBhbmQgc2Vl
bXMgdG8gd29yayBjb3JyZWN0bHkuICBBbGwgY3JlZGl0IGlzIGR1ZQ0KdG8gTmVpbCwgSSBq
dXN0IGRpZCBhIHRpbnkgYW1vdW50IG9mIGNsZWFudXAgd29yayBpbiBhIGZldyBwbGFjZXMu
DQooSSB3YXMgdGhpbmtpbmcgb2YgcG9zdGluZyB0aGlzIGFzIGEgZGlmZiB0byBOZWlsJ3Mg
ZGlmZiwgYnV0IHdhc24ndA0Kc3VyZSBob3cgdGhhdCB3b3VsZCBnbyBvdmVyLi4uICBJZiB0
aGlzIGdldHMgY2hlY2tlZCBpbiBpdCB3aWxsIGJlIGENCmxvdCBlYXNpZXIgdG8gd29yayBv
biBpdCBhbmQgc2VuZCBzbWFsbCBwYXRjaGVzLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8NCnJl
Z2VuZXJhdGUgdGhlIHdob2xlIHRoaW5nIGVhY2ggdGltZSkuDQoNCg0KDQpEaWZmZXJlbmNl
czogIA0KDQogICgxKSBUaGUgYWJvdmUtbWVudGlvbmVkIF9QeVR1cGxlX1Jlc2l6ZSBmaXgN
Cg0KICAoMikgQSBmZXcgcHJvYmxlbXMgd2VyZSBleHBvc2VkIGJ5IGJ1aWxkaW5nIHdpdGgg
UHlfVFJBQ0VfUkVGUw0KICBkZWZpbmVkLiAgU3BlY2lmaWFsbHksIFB5T2JqZWN0X05ldyBh
bmQgUHlPYmplY3RfTmV3VmFyIGFscmVhZHkgZG8gYQ0KICBfUHlfTmV3UmVmZXJlbmNlIGlu
dGVybmFsbHksIGJ1dCBpbiBhIGZldyBwbGFjZXMgKGUuZy4gUHlMaXN0X05ldyksDQogIFB5
T2JqZWN0X05ldyB3YXMgYmVpbmcgdXNlZCB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHdoaWNo
IGlzIHRoZW4NCiAgX1B5X05ld1JlZmVyZW5jZSdkLiAgSWYgUHlfVFJBQ0VfUkVGUyBpcyBu
b3Qgc2V0LCB0aGlzIGlzIG1lcmVseQ0KICByZWR1bmRhbnQ7IHdpdGggUHlfVFJBQ0VfUkVG
UyBzZXQgaXQgY2F1c2VzIHNlcmlvdXMgcHJvYmxlbXMgYmVjYXVzZQ0KICB0aGUgb2JqZWN0
IGlzIGFkZGVkIHRvIHRoZSByZWZlcmVuY2UgY2hhaW4gdHdpY2UuDQoNCg0KDQogICAgICAg
ICAgICAgICAgICAgSSBjb25maXJtIHRoYXQsIHRvIHRoZSBiZXN0IG9mIG15IGtub3dsZWRn
ZSBhbmQgYmVsaWVmLCB0aGlzDQogICAgICAgICAgICAgICAgICAgY29udHJpYnV0aW9uIGlz
IGZyZWUgb2YgYW55IGNsYWltcyBvZiB0aGlyZCBwYXJ0aWVzIHVuZGVyDQogICAgICAgICAg
ICAgICAgICAgY29weXJpZ2h0LCBwYXRlbnQgb3Igb3RoZXIgcmlnaHRzIG9yIGludGVyZXN0
cyAoImNsYWltcyIpLiAgVG8NCiAgICAgICAgICAgICAgICAgICB0aGUgZXh0ZW50IHRoYXQg
SSBoYXZlIGFueSBzdWNoIGNsYWltcywgSSBoZXJlYnkgZ3JhbnQgdG8gQ05SSSBhDQogICAg
ICAgICAgICAgICAgICAgbm9uZXhjbHVzaXZlLCBpcnJldm9jYWJsZSwgcm95YWx0eS1mcmVl
LCB3b3JsZHdpZGUgbGljZW5zZSB0bw0KICAgICAgICAgICAgICAgICAgIHJlcHJvZHVjZSwg
ZGlzdHJpYnV0ZSwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZQ0K
ICAgICAgICAgICAgICAgICAgIGRlcml2YXRpdmUgdmVyc2lvbnMsIGFuZCBvdGhlcndpc2Ug
dXNlIHRoaXMgY29udHJpYnV0aW9uIGFzIHBhcnQNCiAgICAgICAgICAgICAgICAgICBvZiB0
aGUgUHl0aG9uIHNvZnR3YXJlIGFuZCBpdHMgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBvciBh
bnkNCiAgICAgICAgICAgICAgICAgICBkZXJpdmF0aXZlIHZlcnNpb25zIHRoZXJlb2YsIGF0
IG5vIGNvc3QgdG8gQ05SSSBvciBpdHMgbGljZW5zZWQNCiAgICAgICAgICAgICAgICAgICB1
c2VycywgYW5kIHRvIGF1dGhvcml6ZSBvdGhlcnMgdG8gZG8gc28uDQoNCiAgICAgICAgICAg
ICAgICAgICBJIGFja25vd2xlZGdlIHRoYXQgQ05SSSBtYXksIGF0IGl0cyBzb2xlIGRpc2Ny
ZXRpb24sIGRlY2lkZQ0KICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgb3Igbm90IHRvIGlu
Y29ycG9yYXRlIHRoaXMgY29udHJpYnV0aW9uIGluIHRoZSBQeXRob24NCiAgICAgICAgICAg
ICAgICAgICBzb2Z0d2FyZSBhbmQgaXRzIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi4gIEkgZnVy
dGhlciBncmFudCBDTlJJDQogICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiB0byB1c2Ug
bXkgbmFtZSBhbmQgb3RoZXIgaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24NCiAgICAgICAgICAg
ICAgICAgICBwcm92aWRlZCB0byBDTlJJIGJ5IG1lIGZvciB1c2UgaW4gY29ubmVjdGlvbiB3
aXRoIHRoZSBQeXRob24NCiAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBhbmQgaXRzIHJl
bGF0ZWQgZG9jdW1lbnRhdGlvbi4NCg0KLS0tIFB5dGhvbi1jdnMvSW5jbHVkZS9vYmplY3Qu
aAlGcmkgTWFyIDI0IDIyOjMyOjE2IDIwMDANCisrKyBQeXRob24tZ2MvSW5jbHVkZS9vYmpl
Y3QuaAlTYXQgQXByICA4IDAxOjM4OjI1IDIwMDANCkBAIC0xNDUsNiArMTQ1LDEwIEBADQog
dHlwZWRlZiBpbnQgKCpnZXRzZWdjb3VudHByb2MpIFB5X1BST1RPKChQeU9iamVjdCAqLCBp
bnQgKikpOw0KIHR5cGVkZWYgaW50ICgqZ2V0Y2hhcmJ1ZmZlcnByb2MpIFB5X1BST1RPKChQ
eU9iamVjdCAqLCBpbnQsIGNvbnN0IGNoYXIgKiopKTsNCiB0eXBlZGVmIGludCAoKm9iam9i
anByb2MpIFB5X1BST1RPKChQeU9iamVjdCAqLCBQeU9iamVjdCAqKSk7DQorI2lmZGVmIFdJ
VEhfQ1lDTEVfR0MNCit0eXBlZGVmIGludCAoKnZpc2l0cHJvYykgUHlfUFJPVE8oKFB5T2Jq
ZWN0ICosIHZvaWQgKikpOw0KK3R5cGVkZWYgaW50ICgqcmVjdXJzZXByb2MpIFB5X1BST1RP
KChQeU9iamVjdCAqLCB2aXNpdHByb2MsIHZvaWQgKikpOw0KKyNlbmRpZg0KIA0KIHR5cGVk
ZWYgc3RydWN0IHsNCiAJYmluYXJ5ZnVuYyBuYl9hZGQ7DQpAQCAtMjQzLDkgKzI0NywxOCBA
QA0KIA0KIAljaGFyICp0cF9kb2M7IC8qIERvY3VtZW50YXRpb24gc3RyaW5nICovDQogDQot
CS8qIE1vcmUgc3BhcmVzICovDQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisJLyogY2FsbCBm
dW5jdGlvbiBmb3IgYWxsIGFjY2Vzc2libGUgb2JqZWN0cyAqLw0KKwlyZWN1cnNlcHJvYyB0
cF9yZWN1cnNlOw0KKwkNCisJLyogZGVsZXRlIHJlZmVyZW5jZXMgdG8gY29udGFpbmVkIG9i
amVjdHMgKi8NCisJaW5xdWlyeSB0cF9jbGVhcjsNCisjZWxzZQ0KIAlsb25nIHRwX3h4eDU7
DQogCWxvbmcgdHBfeHh4NjsNCisjZW5kaWYNCisNCisJLyogTW9yZSBzcGFyZXMgKi8NCiAJ
bG9uZyB0cF94eHg3Ow0KIAlsb25nIHRwX3h4eDg7DQogDQpAQCAtMzE1LDYgKzMyOCw5IEBA
DQogDQogLyogUHlTZXF1ZW5jZU1ldGhvZHMgY29udGFpbnMgc3FfY29udGFpbnMgKi8NCiAj
ZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TRVFVRU5DRV9JTiAoMUw8PDEpDQorDQorLyogT2Jq
ZWN0cyB3aXRoIGEgR0MgaW5mbyBwcmVmaXggKGFsbG9jYXRlZCAqYmVmb3JlKiB0aGUgb2Jq
ZWN0IGl0c2VsZiEpICovDQorI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfR0NJTkZPICgxTDw8
MikNCiANCiAjZGVmaW5lIFB5X1RQRkxBR1NfREVGQVVMVCAgKFB5X1RQRkxBR1NfSEFWRV9H
RVRDSEFSQlVGRkVSIHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFBG
TEFHU19IQVZFX1NFUVVFTkNFX0lOKQ0KLS0tIFB5dGhvbi1jdnMvSW5jbHVkZS9vYmppbXBs
LmgJVGh1IE1hciAgMiAxNzowMjoyMyAyMDAwDQorKysgUHl0aG9uLWdjL0luY2x1ZGUvb2Jq
aW1wbC5oCVNhdCBBcHIgIDggMDM6MTg6MjIgMjAwMA0KQEAgLTM4LDggKzM4LDQyIEBADQog
LyoNCiBBZGRpdGlvbmFsIG1hY3JvcyBmb3IgbW9kdWxlcyB0aGF0IGltcGxlbWVudCBuZXcg
b2JqZWN0IHR5cGVzLg0KIFlvdSBtdXN0IGZpcnN0IGluY2x1ZGUgIm9iamVjdC5oIi4NCisq
Lw0KKw0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDIA0KKw0KKy8qIFN0cnVjdHVyZSAqcHJlZml4
ZWQqIHRvIGNvbnRhaW5lciBvYmplY3RzIHBhcnRpY2lwYXRpbmcgaW4gR0MgKi8gDQordHlw
ZWRlZiBzdHJ1Y3QgX2djaW5mbyB7DQorCXN0cnVjdCBfZ2NpbmZvICpnY19uZXh0Ow0KKwlz
dHJ1Y3QgX2djaW5mbyAqZ2NfcHJldjsNCisJaW50IGdjX3JlZnM7DQorfSBQeUdDSW5mbzsN
CisNCisvKiBUZXN0IGlmIGEgdHlwZSBoYXMgR0MgaW5mbyAqLw0KKyNkZWZpbmUgUFlfVFlQ
RUlTR0ModCkgUHlUeXBlX0hhc0ZlYXR1cmUoKHQpLCBQeV9UUEZMQUdTX0hBVkVfR0NJTkZP
KQ0KKw0KKy8qIFRlc3QgaWYgYW4gb2JqZWN0IGhhcyBHQyBpbmZvICovDQorI2RlZmluZSBQ
WV9JU0dDKG8pIFBZX1RZUEVJU0dDKChvKS0+b2JfdHlwZSkNCisNCisvKiBHZXQgYW4gb2Jq
ZWN0J3MgR0MgaW5mbyAtLSBOVUxMIGlmIHRoZSBvYmplY3QgaGFzIG5vbmUgKi8NCisjZGVm
aW5lIFBZX0dDSU5GTyhvKSAoUFlfSVNHQyhvKSA/ICgoUHlHQ0luZm8gKikobyktMSkgOiBO
VUxMKQ0KKw0KKy8qIFVuc2FmZSB2ZXJzaW9uIG9mIFBZX0dDSU5GTygpIC0tIG9ubHkgY2Fs
bCBpZiBQWV9JU0dDKHApIGlzIHRydWUgKi8NCisjZGVmaW5lIFBZX0dDSU5GT19VTlNBRkUo
bykgKChQeUdDSW5mbyAqKShvKS0xKQ0KKw0KKy8qIEdldCB0aGUgb2JqZWN0IGdpdmVuIHRo
ZSBQeUdDSW5mbyAqLw0KKyNkZWZpbmUgUFlfR0NPQkooZykgKChQeU9iamVjdCAqKSgoZykr
MSkpDQogDQotUHlPYmplY3RfTkVXKHR5cGUsIHR5cGVvYmopIGFsbG9jYXRlcyBtZW1vcnkg
Zm9yIGEgbmV3IG9iamVjdCBvZiB0aGUgZ2l2ZW4NCisvKiBBZGQgdGhlIG9iamVjdCBpbnRv
IHRoZSBjb250YWluZXIgc2V0ICovDQorZXh0ZXJuIERMX0lNUE9SVCh2b2lkKSBQeUdDX0lu
c2VydCBQeV9QUk9UTygoUHlPYmplY3QgKikpOw0KKw0KKy8qIFJlbW92ZSB0aGUgb2JqZWN0
IGZyb20gdGhlIGNvbnRhaW5lciBzZXQgKi8NCitleHRlcm4gRExfSU1QT1JUKHZvaWQpIFB5
R0NfUmVtb3ZlIFB5X1BST1RPKChQeU9iamVjdCAqKSk7DQorDQorI2VuZGlmDQorDQorLyoN
CitQeU9iamVjdF9OZXcodHlwZSwgdHlwZW9iaikgYWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBu
ZXcgb2JqZWN0IG9mIHRoZSBnaXZlbg0KIHR5cGU7IGhlcmUgJ3R5cGUnIG11c3QgYmUgdGhl
IEMgc3RydWN0dXJlIHR5cGUgdXNlZCB0byByZXByZXNlbnQgdGhlDQogb2JqZWN0IGFuZCAn
dHlwZW9iaicgdGhlIGFkZHJlc3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSBvYmplY3Qu
DQogUmVmZXJlbmNlIGNvdW50IGFuZCB0eXBlIHBvaW50ZXIgYXJlIGZpbGxlZCBpbjsgdGhl
IHJlc3Qgb2YgdGhlIGJ5dGVzIG9mDQpAQCAtNDcsMzAgKzgxLDI5IEBADQogVGhlIHNpemUg
b2YgdGhlIG9iamVjdCBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSB0cF9iYXNpY3Np
emUgZmllbGQNCiBvZiB0aGUgdHlwZSBvYmplY3QuDQogDQotUHlPYmplY3RfTkVXX1ZBUih0
eXBlLCB0eXBlb2JqLCBuKSBpcyBzaW1pbGFyIGJ1dCBhbGxvY2F0ZXMgYSB2YXJpYWJsZS1z
aXplDQorUHlPYmplY3RfTmV3VmFyKHR5cGUsIHR5cGVvYmosIG4pIGlzIHNpbWlsYXIgYnV0
IGFsbG9jYXRlcyBhIHZhcmlhYmxlLXNpemUNCiBvYmplY3Qgd2l0aCBuIGV4dHJhIGl0ZW1z
LiAgVGhlIHNpemUgaXMgY29tcHV0ZWQgYXMgdHBfYmFzaWNzaXplIHBsdXMNCiBuICogdHBf
aXRlbXNpemUuICBUaGlzIGZpbGxzIGluIHRoZSBvYl9zaXplIGZpZWxkIGFzIHdlbGwuDQog
Ki8NCiANCi0jaWZuZGVmIE1TX0NPUkVETEwNCiBleHRlcm4gRExfSU1QT1JUKFB5T2JqZWN0
ICopIF9QeU9iamVjdF9OZXcgUHlfUFJPVE8oKFB5VHlwZU9iamVjdCAqKSk7DQogZXh0ZXJu
IERMX0lNUE9SVChQeVZhck9iamVjdCAqKSBfUHlPYmplY3RfTmV3VmFyIFB5X1BST1RPKChQ
eVR5cGVPYmplY3QgKiwgaW50KSk7DQorZXh0ZXJuIERMX0lNUE9SVCh2b2lkKSBQeU9iamVj
dF9EZWwgUHlfUFJPVE8oKFB5T2JqZWN0ICopKTsNCiANCi0jZGVmaW5lIFB5T2JqZWN0X05F
Vyh0eXBlLCB0eXBlb2JqKSAoKHR5cGUgKikgX1B5T2JqZWN0X05ldyh0eXBlb2JqKSkNCi0j
ZGVmaW5lIFB5T2JqZWN0X05FV19WQVIodHlwZSwgdHlwZW9iaiwgbikgKCh0eXBlICopIF9Q
eU9iamVjdF9OZXdWYXIodHlwZW9iaiwgbikpDQotDQotI2Vsc2UNCi0vKiBGb3IgYW4gTVMt
V2luZG93cyBETEwsIHdlIGNoYW5nZSB0aGUgd2F5IGFuIG9iamVjdCBpcyBjcmVhdGVkLCBz
byB0aGF0IHRoZQ0KLSAgIGV4dGVuc2lvbiBtb2R1bGUncyBtYWxsb2MgaXMgdXNlZCwgcmF0
aGVyIHRoYW4gdGhlIGNvcmUgRExMIG1hbGxvYywgYXMgdGhlcmUgaXMNCi0gICBubyBndWFy
YW50ZWUgdGhleSB3aWxsIHVzZSB0aGUgc2FtZSBoZWFwDQotKi8NCi1leHRlcm4gRExfSU1Q
T1JUKFB5T2JqZWN0ICopIF9QeU9iamVjdF9OZXcgUHlfUFJPVE8oKFB5VHlwZU9iamVjdCAq
LCBQeU9iamVjdCAqKSk7DQotZXh0ZXJuIERMX0lNUE9SVChQeVZhck9iamVjdCAqKSBfUHlP
YmplY3RfTmV3VmFyIFB5X1BST1RPKChQeVR5cGVPYmplY3QgKiwgaW50LCBQeVZhck9iamVj
dCAqKSk7DQotDQotI2RlZmluZSBQeU9iamVjdF9ORVcodHlwZSwgdHlwZW9iaikgKCh0eXBl
ICopIF9QeU9iamVjdF9OZXcodHlwZW9iaiwoUHlPYmplY3QgKiltYWxsb2MoKHR5cGVvYmop
LT50cF9iYXNpY3NpemUpKSkNCi0jZGVmaW5lIFB5T2JqZWN0X05FV19WQVIodHlwZSwgdHlw
ZW9iaiwgbikgKCh0eXBlICopIF9QeU9iamVjdF9OZXdWYXIodHlwZW9iaiwgbiwgKFB5VmFy
T2JqZWN0ICopbWFsbG9jKCh0eXBlb2JqKS0+dHBfYmFzaWNzaXplICsgbiAqICh0eXBlb2Jq
KS0+dHBfaXRlbXNpemUpKSkNCi0NCi0jZW5kaWYgLyogTVNfQ09SRURMTCAqLw0KKy8qIEZ1
bmN0aW9ucyAqLw0KKyNkZWZpbmUgUHlPYmplY3RfTmV3KHR5cGUsIHR5cGVvYmopIFwNCisJ
CSgodHlwZSAqKSBfUHlPYmplY3RfTmV3KHR5cGVvYmopKQ0KKyNkZWZpbmUgUHlPYmplY3Rf
TmV3VmFyKHR5cGUsIHR5cGVvYmosIG4pIFwNCisgICAgICAgICAgICAgICAgKCh0eXBlICop
IF9QeU9iamVjdF9OZXdWYXIoKHR5cGVvYmopLCAobikpKQ0KKw0KKw0KK2V4dGVybiBETF9J
TVBPUlQoUHlPYmplY3QgKikgX1B5T2JqZWN0X0Zyb21UeXBlIFB5X1BST1RPKChQeVR5cGVP
YmplY3QgKiwgUHlPYmplY3QgKikpOw0KK2V4dGVybiBETF9JTVBPUlQoUHlWYXJPYmplY3Qg
KikgX1B5T2JqZWN0X1ZhckZyb21UeXBlIFB5X1BST1RPKChQeVR5cGVPYmplY3QgKiwgaW50
LCBQeVZhck9iamVjdCAqKSk7DQorDQorLyogVGhlc2UgbWFjcm9zIG1heSBub3QgdXNlIHRo
ZSBzYW1lIG1hbGxvYyBhcyBQeXRob24uIFRoZXkgY2Fubm90IGJlIHVzZWQNCisgKiBvYmpl
Y3RzIHRoYXQgYXJlIGludm9sdmVkIGluIGdhcmJhZ2UgY29sbGVjdGlvbiAqLw0KKyNkZWZp
bmUgUHlPYmplY3RfTkVXKHR5cGUsIHR5cGVvYmopICgodHlwZSAqKSBfUHlPYmplY3RfRnJv
bVR5cGUodHlwZW9iaiwoUHlPYmplY3QgKiltYWxsb2MoKHR5cGVvYmopLT50cF9iYXNpY3Np
emUpKSkNCisjZGVmaW5lIFB5T2JqZWN0X05FV19WQVIodHlwZSwgdHlwZW9iaiwgbikgKCh0
eXBlICopIF9QeU9iamVjdF9WYXJGcm9tVHlwZSh0eXBlb2JqLCBuLCAoUHlWYXJPYmplY3Qg
KiltYWxsb2MoKHR5cGVvYmopLT50cF9iYXNpY3NpemUgKyBuICogKHR5cGVvYmopLT50cF9p
dGVtc2l6ZSkpKQ0KIA0KICNpZmRlZiBfX2NwbHVzcGx1cw0KIH0NCi0tLSBQeXRob24tY3Zz
L01vZHVsZXMvY1BpY2tsZS5jCUZyaSBNYXIgMjQgMjI6MzI6MjUgMjAwMA0KKysrIFB5dGhv
bi1nYy9Nb2R1bGVzL2NQaWNrbGUuYwlTYXQgQXByICA4IDAyOjEzOjExIDIwMDANCkBAIC0y
ODg2LDcgKzI4ODYsNyBAQA0KICAgICAgICAgICAgICAgUHlJbnN0YW5jZU9iamVjdCAqaW5z
dDsNCiANCiAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7DQotICAgICAgICAgICAgICBV
TkxFU1MgKGluc3Q9UHlPYmplY3RfTkVXKFB5SW5zdGFuY2VPYmplY3QsICZQeUluc3RhbmNl
X1R5cGUpKQ0KKyAgICAgICAgICAgICAgVU5MRVNTIChpbnN0PVB5T2JqZWN0X05ldyhQeUlu
c3RhbmNlT2JqZWN0LCAmUHlJbnN0YW5jZV9UeXBlKSkNCiAgICAgICAgICAgICAgICAgZ290
byBlcnI7DQogICAgICAgICAgICAgICBpbnN0LT5pbl9jbGFzcz0oUHlDbGFzc09iamVjdCop
Y2xzOw0KICAgICAgICAgICAgICAgUHlfSU5DUkVGKGNscyk7DQpAQCAtMjg5NCw3ICsyODk0
LDkgQEANCiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGluc3QpOw0KICAgICAgICAgICAg
ICAgICBnb3RvIGVycjsNCiAgICAgICAgICAgICAgIH0NCi0NCisjaWZkZWYgV0lUSF9DWUNM
RV9HQw0KKyAgICAgICAgICAgICAgUHlHQ19JbnNlcnQoKFB5T2JqZWN0ICopaW5zdCk7DQor
I2VuZGlmDQogICAgICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopaW5zdDsNCiAgICAg
ICAgICAgICB9DQogICAgICAgICAgIFB5X0RFQ1JFRihfX2dldGluaXRhcmdzX18pOw0KLS0t
IFB5dGhvbi1jdnMvTW9kdWxlcy9uZXdtb2R1bGUuYwlUdWUgRmViIDI5IDE0OjU1OjA5IDIw
MDANCisrKyBQeXRob24tZ2MvTW9kdWxlcy9uZXdtb2R1bGUuYwlTYXQgQXByICA4IDAyOjEz
OjI2IDIwMDANCkBAIC00OSwxMyArNDksMTYgQEANCiAJCQkgICAgICAmUHlDbGFzc19UeXBl
LCAma2xhc3MsDQogCQkJICAgICAgJlB5RGljdF9UeXBlLCAmZGljdCkpDQogCQlyZXR1cm4g
TlVMTDsNCi0JaW5zdCA9IFB5T2JqZWN0X05FVyhQeUluc3RhbmNlT2JqZWN0LCAmUHlJbnN0
YW5jZV9UeXBlKTsNCisJaW5zdCA9IFB5T2JqZWN0X05ldyhQeUluc3RhbmNlT2JqZWN0LCAm
UHlJbnN0YW5jZV9UeXBlKTsNCiAJaWYgKGluc3QgPT0gTlVMTCkNCiAJCXJldHVybiBOVUxM
Ow0KIAlQeV9JTkNSRUYoa2xhc3MpOw0KIAlQeV9JTkNSRUYoZGljdCk7DQogCWluc3QtPmlu
X2NsYXNzID0gKFB5Q2xhc3NPYmplY3QgKilrbGFzczsNCiAJaW5zdC0+aW5fZGljdCA9IGRp
Y3Q7DQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisJUHlHQ19JbnNlcnQoKFB5T2JqZWN0ICop
aW5zdCk7DQorI2VuZGlmDQogCXJldHVybiAoUHlPYmplY3QgKilpbnN0Ow0KIH0NCiANCi0t
LSBQeXRob24tY3ZzL01vZHVsZXMvZ2Ntb2R1bGUuYw0KKysrIFB5dGhvbi1nYy9Nb2R1bGVz
L2djbW9kdWxlLmMJU2F0IEFwciAgOCAwMzoyNTo1NyAyMDAwDQpAQCAtMCwwICsxLDY3NyBA
QA0KKy8qDQorIA0KKyAgUmVmZXJlbmNlIEN5Y2xlIEdhcmJhZ2UgQ29sbGVjdGlvbg0KKyAg
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KKyAgTmVpbCBTY2hlbWVu
YXVlciA8bmFzY2hlbWVAZW5tZS51Y2FsZ2FyeS5jYT4NCisNCisgIEJhc2VkIG9uIGEgcG9z
dCBvbiB0aGUgcHl0aG9uLWRldiBsaXN0LiAgSWRlYXMgZnJvbSBHdWlkbyB2YW4gUm9zc3Vt
LA0KKyAgRXJpYyBUaWVkZW1hbm4sIGFuZCB2YXJpb3VzIG90aGVycy4NCisNCisgIGh0dHA6
Ly93d3cuZW5tZS5jYWxnYXJ5LmNhL35uYXNjaGVtZS9weXRob24vZ2MuaHRtbA0KKyAgaHR0
cDovL3d3dy5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDAtTWFyY2gvMDAz
ODY5Lmh0bWwNCisgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRl
di8yMDAwLU1hcmNoLzAwNDAxMC5odG1sDQorICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcGlw
ZXJtYWlsL3B5dGhvbi1kZXYvMjAwMC1NYXJjaC8wMDQwMjIuaHRtbA0KKw0KKyAgRm9yIGEg
aGlnaGxldmVsIHZpZXcgb2YgdGhlIGNvbGxlY3Rpb24gcHJvY2VzcywgcmVhZCB0aGUgY29s
bGVjdA0KKyAgZnVuY3Rpb24uDQorDQorICBUT0RPOg0KKwl1c2UgYSBkaWZmZXJlbnQgaW50
ZXJmYWNlIGZvciBzZXRfZGVidWcoKSAoa2V5d29yZHMpPw0KKwlpbmxpbmUgUHlHQ19JbnNl
cnQgYW5kIFB5R0NfUmVtb3ZlIGNhbGxzPw0KKwl0dW5lIHBhcmFtZXRlcnMNCisNCisqLw0K
Kw0KKyNpbmNsdWRlICJQeXRob24uaCINCisNCisjaWZuZGVmIFdJVEhfQ1lDTEVfR0MNCisj
ZXJyb3IgIllvdSBtdXN0IGRlZmluZSBXSVRIX0NZQ0xFX0dDIHRvIGluY2x1ZGUgdGhpcyBt
b2R1bGUiDQorI2VuZGlmDQorDQorLyogbWFnaWMgZ2NfcmVmcyB2YWx1ZSAqLw0KKyNkZWZp
bmUgR0NfTU9WRUQgLTENCisNCisNCisvKioqIEdsb2JhbCBHQyBzdGF0ZSAqKiovDQorDQor
LyogbGlua2VkIGxpc3RzIG9mIGNvbnRhaW5lciBvYmplY3RzICovDQorc3RhdGljIFB5R0NJ
bmZvIGdlbmVyYXRpb24wID0geyZnZW5lcmF0aW9uMCwgJmdlbmVyYXRpb24wLCAwfTsNCitz
dGF0aWMgUHlHQ0luZm8gZ2VuZXJhdGlvbjEgPSB7JmdlbmVyYXRpb24xLCAmZ2VuZXJhdGlv
bjEsIDB9Ow0KK3N0YXRpYyBQeUdDSW5mbyBnZW5lcmF0aW9uMiA9IHsmZ2VuZXJhdGlvbjIs
ICZnZW5lcmF0aW9uMiwgMH07DQorc3RhdGljIGludCBnZW5lcmF0aW9uID0gMDsgLyogY3Vy
cmVudCBnZW5lcmF0aW9uIGJlaW5nIGNvbGxlY3RlZCAqLw0KKw0KKy8qIGNvbGxlY3Rpb24g
ZnJlcXVlbmNpZXMsIFhYWCB0dW5lIHRoZXNlICovDQorc3RhdGljIGludCB0aHJlc2hvbGQw
ID0gMTAwOyAvKiBuZXQgbmV3IGNvbnRhaW5lcnMgYmVmb3JlIGNvbGxlY3Rpb24gKi8NCitz
dGF0aWMgaW50IHRocmVzaG9sZDEgPSAxMDsgIC8qIGdlbmVyYXRpb24wIGNvbGxlY3Rpb25z
IGJlZm9yZSBjb2xsZWN0aW5nIDEgKi8NCitzdGF0aWMgaW50IHRocmVzaG9sZDIgPSAxMDsg
IC8qIGdlbmVyYXRpb24xIGNvbGxlY3Rpb25zIGJlZm9yZSBjb2xsZWN0aW5nIDIgKi8NCisN
CisvKiBuZXQgbmV3IG9iamVjdHMgYWxsb2NhdGVkIHNpbmNlIGxhc3QgY29sbGVjdGlvbiAq
Lw0KK3N0YXRpYyBpbnQgYWxsb2NhdGVkID0gMDsNCisNCisvKiBzZXQgZm9yIGRlYnVnZ2lu
ZyBpbmZvcm1hdGlvbiAqLw0KKyNkZWZpbmUgREVCVUdfU1RBVFMJCSgxPDwwKSAvKiBwcmlu
dCBjb2xsZWN0aW9uIHN0YXRpc3RpY3MgKi8NCisjZGVmaW5lIERFQlVHX0NPTExFQ1RBQkxF
CSgxPDwxKSAvKiBwcmludCBjb2xsZWN0YWJsZSBvYmplY3RzICovDQorI2RlZmluZSBERUJV
R19VTkNPTExFQ1RBQkxFCSgxPDwyKSAvKiBwcmludCB1bmNvbGxlY3RhYmxlIG9iamVjdHMg
Ki8NCisjZGVmaW5lIERFQlVHX0lOU1RBTkNFUwkJKDE8PDMpIC8qIHByaW50IGluc3RhbmNl
cyAqLw0KKyNkZWZpbmUgREVCVUdfT0JKRUNUUwkJKDE8PDQpIC8qIHByaW50IG90aGVyIG9i
amVjdHMgKi8NCisjZGVmaW5lIERFQlVHX0xFQUsJCURFQlVHX0NPTExFQ1RBQkxFIHwgXA0K
KwkJCQlERUJVR19VTkNPTExFQ1RBQkxFIHwgXA0KKwkJCQlERUJVR19JTlNUQU5DRVMgfCBc
DQorCQkJCURFQlVHX09CSkVDVFMNCitzdGF0aWMgaW50IGRlYnVnID0gREVCVUdfTEVBSzsN
CisNCisvKiBsaXN0IG9mIHVuY29sbGVjdGFibGUgb2JqZWN0cyAqLw0KK3N0YXRpYyBQeU9i
amVjdCAqZ2FyYmFnZSA9IE5VTEw7DQorDQorDQorLyoqKiBsaXN0IGZ1bmN0aW9ucyAoc2hv
dWxkIHByb2JhYmx5IGJlIG1hY3Jvcywgc3R1cGlkIGNvbXBpbGVycykgKioqLw0KKw0KK3N0
YXRpYyB2b2lkDQorTElTVF9JTklUKFB5R0NJbmZvICpsaXN0KQ0KK3sNCisJbGlzdC0+Z2Nf
cHJldiA9IGxpc3Q7DQorCWxpc3QtPmdjX25leHQgPSBsaXN0Ow0KK30NCisNCitzdGF0aWMg
dm9pZA0KK0xJU1RfQVBQRU5EKFB5R0NJbmZvICpub2RlLCBQeUdDSW5mbyAqbGlzdCkNCit7
DQorCW5vZGUtPmdjX25leHQgPSBsaXN0Ow0KKwlub2RlLT5nY19wcmV2ID0gbGlzdC0+Z2Nf
cHJldjsNCisJbm9kZS0+Z2NfcHJldi0+Z2NfbmV4dCA9IG5vZGU7DQorCWxpc3QtPmdjX3By
ZXYgPSBub2RlOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK0xJU1RfUkVNT1ZFKFB5R0NJbmZv
ICpub2RlKQ0KK3sNCisJbm9kZS0+Z2NfcHJldi0+Z2NfbmV4dCA9IG5vZGUtPmdjX25leHQ7
DQorCW5vZGUtPmdjX25leHQtPmdjX3ByZXYgPSBub2RlLT5nY19wcmV2Ow0KK30NCisNCitz
dGF0aWMgdm9pZCANCitMSVNUX01PVkUoUHlHQ0luZm8gKmZyb20sIFB5R0NJbmZvICp0bykN
Cit7DQorCWlmIChmcm9tLT5nY19uZXh0ID09IGZyb20pIHsNCisJCS8qIGVtcHR5IGZyb20g
bGlzdCAqLw0KKwkJTElTVF9JTklUKHRvKTsNCisJfSBlbHNlIHsNCisJCXRvLT5nY19uZXh0
ID0gZnJvbS0+Z2NfbmV4dDsNCisJCXRvLT5nY19uZXh0LT5nY19wcmV2ID0gdG87DQorCQl0
by0+Z2NfcHJldiA9IGZyb20tPmdjX3ByZXY7DQorCQl0by0+Z2NfcHJldi0+Z2NfbmV4dCA9
IHRvOw0KKwl9DQorCUxJU1RfSU5JVChmcm9tKTsNCit9DQorDQorLyogYXBwZW5kIGEgbGlz
dCBvbnRvIGFub3RoZXIgbGlzdCAqLw0KK3N0YXRpYyB2b2lkDQorTElTVF9MQVBQRU5EKFB5
R0NJbmZvICpmcm9tLCBQeUdDSW5mbyAqdG8pDQorew0KKwlQeUdDSW5mbyAqdGFpbDsNCisJ
aWYgKGZyb20tPmdjX25leHQgIT0gZnJvbSkgew0KKwkJdGFpbCA9IHRvLT5nY19wcmV2Ow0K
KwkJdGFpbC0+Z2NfbmV4dCA9IGZyb20tPmdjX25leHQ7DQorCQl0YWlsLT5nY19uZXh0LT5n
Y19wcmV2ID0gdGFpbDsNCisJCXRvLT5nY19wcmV2ID0gZnJvbS0+Z2NfcHJldjsNCisJCXRv
LT5nY19wcmV2LT5nY19uZXh0ID0gdG87DQorCX0NCisJTElTVF9JTklUKGZyb20pOw0KK30N
CisNCitzdGF0aWMgbG9uZw0KK0xJU1RfU0laRShQeUdDSW5mbyAqbGlzdCkNCit7DQorCVB5
R0NJbmZvICpnYzsNCisJbG9uZyBuID0gMDsNCisJZm9yIChnYyA9IGxpc3QtPmdjX25leHQ7
IGdjICE9IGxpc3Q7IGdjID0gZ2MtPmdjX25leHQpIHsNCisJCW4rKzsNCisJfQ0KKwlyZXR1
cm4gbjsNCit9DQorDQorDQorI2lmZGVmIERFQlVHDQorc3RhdGljIHZvaWQNCitsaXN0X3By
aW50KFB5R0NJbmZvICpsaXN0KSB7DQorCVB5R0NJbmZvICpvcCA9IGxpc3Q7DQorCWRvIHsN
CisJCXByaW50ZigiJXggJXggJXggJWRcbiIsIChsb25nKW9wLCAobG9uZylvcC0+Z2NfcHJl
diwgDQorCQkJCShsb25nKW9wLT5nY19uZXh0LCAobG9uZylvcC0+Z2NfcmVmcyk7DQorDQor
CQlvcCA9IG9wLT5nY19uZXh0Ow0KKwl9IHdoaWxlIChvcCAhPSBsaXN0KTsNCit9DQorI2Vu
ZGlmDQorDQorLyoqKiBlbmQgb2YgbGlzdCBzdHVmZiAqKiovDQorDQorDQorLyogU2V0IGFs
bCBnY19yZWZzID0gb2JfcmVmY250ICovDQorc3RhdGljIHZvaWQNCit1cGRhdGVfcmVmcyhQ
eUdDSW5mbyAqY29udGFpbmVycykNCit7DQorCVB5R0NJbmZvICpnYyA9IGNvbnRhaW5lcnMt
PmdjX25leHQ7DQorCWZvciAoOyBnYyAhPSBjb250YWluZXJzOyBnYz1nYy0+Z2NfbmV4dCkg
ew0KKwkJZ2MtPmdjX3JlZnMgPSBQWV9HQ09CSihnYyktPm9iX3JlZmNudDsNCisJfQ0KK30N
CisNCitzdGF0aWMgaW50DQordmlzaXRfZGVjcmVmKFB5T2JqZWN0ICpvcCwgdm9pZCAqZGF0
YSkNCit7DQorCWlmIChvcCAmJiBQWV9JU0dDKG9wKSkgew0KKwkJUFlfR0NJTkZPX1VOU0FG
RShvcCktPmdjX3JlZnMtLTsNCisJfQ0KKwlyZXR1cm4gMTsNCit9DQorDQorLyogU3VidHJh
Y3QgaW50ZXJuYWwgcmVmZXJlbmNlcyBmcm9tIGdjX3JlZnMgKi8NCitzdGF0aWMgdm9pZA0K
K3N1YnRyYWN0X3JlZnMoUHlHQ0luZm8gKmNvbnRhaW5lcnMpDQorew0KKwlyZWN1cnNlcHJv
YyByZWN1cnNlOw0KKwlQeUdDSW5mbyAqZ2MgPSBjb250YWluZXJzLT5nY19uZXh0Ow0KKwlm
b3IgKDsgZ2MgIT0gY29udGFpbmVyczsgZ2M9Z2MtPmdjX25leHQpIHsNCisJCXJlY3Vyc2Ug
PSBQWV9HQ09CSihnYyktPm9iX3R5cGUtPnRwX3JlY3Vyc2U7DQorCQkodm9pZCkgcmVjdXJz
ZShQWV9HQ09CSihnYyksDQorCQkJICAgICAgICh2aXNpdHByb2MpdmlzaXRfZGVjcmVmLA0K
KwkJCSAgICAgICBOVUxMKTsNCisJfQ0KK30NCisNCisvKiBBcHBlbmQgb2JqZWN0cyB3aXRo
IGdjX3JlZnMgPiAwIHRvIHJvb3RzIGxpc3QgKi8NCitzdGF0aWMgdm9pZA0KK21vdmVfcm9v
dHMoUHlHQ0luZm8gKmNvbnRhaW5lcnMsIFB5R0NJbmZvICpyb290cykNCit7DQorCVB5R0NJ
bmZvICpuZXh0Ow0KKwlQeUdDSW5mbyAqZ2MgPSBjb250YWluZXJzLT5nY19uZXh0Ow0KKwl3
aGlsZSAoZ2MgIT0gY29udGFpbmVycykgew0KKwkJbmV4dCA9IGdjLT5nY19uZXh0Ow0KKwkJ
aWYgKGdjLT5nY19yZWZzID4gMCkgew0KKwkJCUxJU1RfUkVNT1ZFKGdjKTsNCisJCQlMSVNU
X0FQUEVORChnYywgcm9vdHMpOw0KKwkJCWdjLT5nY19yZWZzID0gR0NfTU9WRUQ7DQorCQl9
DQorCQlnYyA9IG5leHQ7DQorCX0NCit9DQorDQorc3RhdGljIGludA0KK3Zpc2l0X3JlYWNo
YWJsZShQeU9iamVjdCAqb3AsIFB5R0NJbmZvICpyb290cykNCit7DQorCVB5R0NJbmZvICpn
YyA9IFBZX0dDSU5GTyhvcCk7DQorCWlmIChnYyAmJiBnYy0+Z2NfcmVmcyAhPSBHQ19NT1ZF
RCkgew0KKwkJTElTVF9SRU1PVkUoZ2MpOw0KKwkJTElTVF9BUFBFTkQoZ2MsIHJvb3RzKTsN
CisJCWdjLT5nY19yZWZzID0gR0NfTU9WRUQ7DQorCX0NCisJcmV0dXJuIDE7DQorfQ0KKw0K
Ky8qIE1vdmUgb2JqZWN0cyByZWZlcmVuY2VkIGZyb20gcmVhY2hhYmxlIHRvIHJlYWNoYWJs
ZSBzZXQuICovDQorc3RhdGljIHZvaWQNCittb3ZlX3Jvb3RfcmVhY2hhYmxlKFB5R0NJbmZv
ICpyZWFjaGFibGUpDQorew0KKwlyZWN1cnNlcHJvYyByZWN1cnNlOw0KKwlQeUdDSW5mbyAq
Z2MgPSByZWFjaGFibGUtPmdjX25leHQ7DQorCWZvciAoOyBnYyAhPSByZWFjaGFibGU7IGdj
PWdjLT5nY19uZXh0KSB7DQorCQkvKiBjYXJlZnVsLCByZWFjaGFibGUgbGlzdCBpcyBncm93
aW5nIGhlcmUgKi8NCisJCVB5T2JqZWN0ICpvcCA9IFBZX0dDT0JKKGdjKTsNCisJCXJlY3Vy
c2UgPSBvcC0+b2JfdHlwZS0+dHBfcmVjdXJzZTsNCisJCSh2b2lkKSByZWN1cnNlKG9wLA0K
KwkJCSAgICAgICAodmlzaXRwcm9jKXZpc2l0X3JlYWNoYWJsZSwNCisJCQkgICAgICAgKHZv
aWQgKilyZWFjaGFibGUpOw0KKwl9DQorfQ0KKw0KKy8qIG1vdmUgYWxsIG9iamVjdHMgd2l0
aCBmaW5hbGl6ZXJzIChpbnN0YW5jZXMgd2l0aCBfX2RlbF9fKSAqLw0KK3N0YXRpYyB2b2lk
DQorbW92ZV9maW5hbGl6ZXJzKFB5R0NJbmZvICp1bnJlYWNoYWJsZSwgUHlHQ0luZm8gKmZp
bmFsaXplcnMpDQorew0KKwlQeUdDSW5mbyAqbmV4dDsNCisJUHlHQ0luZm8gKmdjID0gdW5y
ZWFjaGFibGUtPmdjX25leHQ7DQorCXN0YXRpYyBQeU9iamVjdCAqZGVsc3RyOw0KKwlpZiAo
ZGVsc3RyID09IE5VTEwpIHsNCisJCWRlbHN0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJp
bmcoIl9fZGVsX18iKTsNCisJfQ0KKwlmb3IgKDsgZ2MgIT0gdW5yZWFjaGFibGU7IGdjPW5l
eHQpIHsNCisJCVB5T2JqZWN0ICpvcCA9IFBZX0dDT0JKKGdjKTsNCisJCW5leHQgPSBnYy0+
Z2NfbmV4dDsNCisJCWlmIChQeUluc3RhbmNlX0NoZWNrKG9wKSAmJiBQeU9iamVjdF9IYXNB
dHRyKG9wLCBkZWxzdHIpKSB7DQorCQkJTElTVF9SRU1PVkUoZ2MpOw0KKwkJCUxJU1RfQVBQ
RU5EKGdjLCBmaW5hbGl6ZXJzKTsNCisJCX0NCisJfQ0KK30NCisNCisNCisvKiBjYWxsZWQg
YnkgdHBfcmVjdXJzZSAqLw0KK3N0YXRpYyBpbnQNCit2aXNpdF9maW5hbGl6ZXJfcmVhY2hh
YmxlKFB5T2JqZWN0ICpvcCwgUHlHQ0luZm8gKmZpbmFsaXplcnMpDQorew0KKwlQeUdDSW5m
byAqZ2MgPSBQWV9HQ0lORk8ob3ApOw0KKwlpZiAoZ2MgJiYgZ2MtPmdjX3JlZnMgIT0gR0Nf
TU9WRUQpIHsNCisJCUxJU1RfUkVNT1ZFKGdjKTsNCisJCUxJU1RfQVBQRU5EKGdjLCBmaW5h
bGl6ZXJzKTsNCisJCWdjLT5nY19yZWZzID0gR0NfTU9WRUQ7DQorCX0NCisJcmV0dXJuIDE7
DQorfQ0KKw0KKy8qIE1vdmUgb2JqZWN0cyByZWZlcmVuY2VkIGZyb20gcm9vdHMgdG8gcm9v
dHMgKi8NCitzdGF0aWMgdm9pZA0KK21vdmVfZmluYWxpemVyX3JlYWNoYWJsZShQeUdDSW5m
byAqZmluYWxpemVycykNCit7DQorCXJlY3Vyc2Vwcm9jIHJlY3Vyc2U7DQorCVB5R0NJbmZv
ICpnYyA9IGZpbmFsaXplcnMtPmdjX25leHQ7DQorCWZvciAoOyBnYyAhPSBmaW5hbGl6ZXJz
OyBnYz1nYy0+Z2NfbmV4dCkgew0KKwkJLyogY2FyZWZ1bCwgZmluYWxpemVycyBsaXN0IGlz
IGdyb3dpbmcgaGVyZSAqLw0KKwkJcmVjdXJzZSA9IFBZX0dDT0JKKGdjKS0+b2JfdHlwZS0+
dHBfcmVjdXJzZTsNCisJCSh2b2lkKSByZWN1cnNlKFBZX0dDT0JKKGdjKSwgDQorCQkJICAg
ICAgICh2aXNpdHByb2MpdmlzaXRfZmluYWxpemVyX3JlYWNoYWJsZSwNCisJCQkgICAgICAg
KHZvaWQgKilmaW5hbGl6ZXJzKTsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZA0KK2RlYnVn
X2luc3RhbmNlKFB5T2JqZWN0ICpvdXRwdXQsIGNoYXIgKm1zZywgUHlJbnN0YW5jZU9iamVj
dCAqaW5zdCkNCit7DQorCWNoYXIgYnVmWzIwMF07DQorCWNoYXIgKmNuYW1lOw0KKwkvKiBi
ZSBjYXJlZnVsIG5vdCB0byBjcmVhdGUgbmV3IGRpY3Rpb25hcmllcyAqLw0KKwlQeU9iamVj
dCAqY2xhc3NuYW1lID0gaW5zdC0+aW5fY2xhc3MtPmNsX25hbWU7DQorCWlmIChjbGFzc25h
bWUgIT0gTlVMTCAmJiBQeVN0cmluZ19DaGVjayhjbGFzc25hbWUpKQ0KKwkJY25hbWUgPSBQ
eVN0cmluZ19Bc1N0cmluZyhjbGFzc25hbWUpOw0KKwllbHNlDQorCQljbmFtZSA9ICI/IjsN
CisJc3ByaW50ZihidWYsICJnYzogJXM8JS4xMDBzIGluc3RhbmNlIGF0ICVseD5cbiIsIA0K
KwkJCW1zZywgY25hbWUsIChsb25nKWluc3QpOw0KKwlQeUZpbGVfV3JpdGVTdHJpbmcoYnVm
LCBvdXRwdXQpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK2RlYnVnX2N5Y2xlKFB5T2JqZWN0
ICpvdXRwdXQsIGNoYXIgKm1zZywgUHlPYmplY3QgKm9wKQ0KK3sNCisJaWYgKChkZWJ1ZyAm
IERFQlVHX0lOU1RBTkNFUykgJiYgUHlJbnN0YW5jZV9DaGVjayhvcCkpIHsNCisJCWRlYnVn
X2luc3RhbmNlKG91dHB1dCwgbXNnLCAoUHlJbnN0YW5jZU9iamVjdCAqKW9wKTsNCisJfSBl
bHNlIGlmIChkZWJ1ZyAmIERFQlVHX09CSkVDVFMpIHsNCisJCWNoYXIgYnVmWzIwMF07DQor
CQlzcHJpbnRmKGJ1ZiwgImdjOiAlczxPYmplY3QgMHgleD5cbiIsIG1zZywgKGxvbmcpb3Ap
Ow0KKwkJUHlGaWxlX1dyaXRlU3RyaW5nKGJ1Ziwgb3V0cHV0KTsNCisJfQ0KK30NCisNCisv
KiBIYW5kbGUgdW5jb2xsZWN0YWJsZSBnYXJiYWdlIChjeWNsZXMgd2l0aCBmaW5hbGl6ZXJz
KS4gKi8NCitzdGF0aWMgdm9pZA0KK2hhbmRsZV9maW5hbGl6ZXJzKFB5R0NJbmZvICpmaW5h
bGl6ZXJzLCBQeUdDSW5mbyAqb2xkKQ0KK3sNCisJUHlHQ0luZm8gKmdjOw0KKwlpZiAoZ2Fy
YmFnZSA9PSBOVUxMKSB7DQorCQlnYXJiYWdlID0gUHlMaXN0X05ldygwKTsNCisJfQ0KKwlm
b3IgKGdjID0gZmluYWxpemVycy0+Z2NfbmV4dDsgZ2MgIT0gZmluYWxpemVyczsNCisJCQln
YyA9IGZpbmFsaXplcnMtPmdjX25leHQpIHsNCisJCVB5T2JqZWN0ICpvcCA9IFBZX0dDT0JK
KGdjKTsNCisJCS8qIEFkZCBhbGwgaW5zdGFuY2VzIHRvIGEgUHl0aG9uIGFjY2Vzc2libGUg
bGlzdCBvZiBnYXJiYWdlICovDQorCQlpZiAoUHlJbnN0YW5jZV9DaGVjayhvcCkpIHsNCisJ
CQlQeUxpc3RfQXBwZW5kKGdhcmJhZ2UsIG9wKTsNCisJCX0NCisJCS8qIFdlIGFzc3VtZSB0
aGF0IGFsbCBvYmplY3RzIGluIGZpbmFsaXplcnMgYXJlIHJlYWNoYWJsZSBmcm9tDQorCQkg
KiBpbnN0YW5jZXMuICBPbmNlIHdlIGFkZCB0aGUgaW5zdGFuY2VzIHRvIHRoZSBnYXJiYWdl
IGxpc3QNCisJCSAqIGV2ZXJ5dGhpbmcgaXMgcmVhY2hhYmxlIGZyb20gUHl0aG9uIGFnYWlu
LiAqLw0KKwkJTElTVF9SRU1PVkUoZ2MpOw0KKwkJTElTVF9BUFBFTkQoZ2MsIG9sZCk7DQor
CX0NCit9DQorDQorLyogQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBieSBjbGVhcmluZyB0aGUg
Y29udGFpbmVycyBpbnZvbHZlZC4gIFRoaXMgaXMNCisgKiB0cmlja3kgYnVzaW5lc3MgYXMg
dGhlIGxpc3RzIGNhbiBiZSBjaGFuZ2luZyBhbmQgd2UgZG9uJ3Qga25vdyB3aGljaA0KKyAq
IG9iamVjdHMgbWF5IGJlIGZyZWVkLiAgSXQgaXMgcG9zc2libGUgSSBzY3Jld2VkIHNvbWV0
aGluZyB1cCBoZXJlLiAqLw0KK3N0YXRpYyB2b2lkDQorZGVsZXRlX2dhcmJhZ2UoUHlHQ0lu
Zm8gKnVucmVhY2hhYmxlLCBQeUdDSW5mbyAqb2xkKQ0KK3sNCisJaW5xdWlyeSBjbGVhcjsN
CisNCisJd2hpbGUgKHVucmVhY2hhYmxlLT5nY19uZXh0ICE9IHVucmVhY2hhYmxlKSB7DQor
CQlQeUdDSW5mbyAqZ2MgPSB1bnJlYWNoYWJsZS0+Z2NfbmV4dDsNCisJCVB5T2JqZWN0ICpv
cCA9IFBZX0dDT0JKKGdjKTsNCisJCWlmICgoY2xlYXIgPSBvcC0+b2JfdHlwZS0+dHBfY2xl
YXIpICE9IE5VTEwpIHsNCisJCQlQeV9JTkNSRUYob3ApOw0KKwkJCWNsZWFyKChQeU9iamVj
dCAqKW9wKTsNCisJCQlQeV9ERUNSRUYob3ApOw0KKwkJfQ0KKwkJLyogb25seSB0cnkgdG8g
Y2FsbCB0cF9jbGVhciBvbmNlIGZvciBlYWNoIG9iamVjdCAqLw0KKwkJaWYgKHVucmVhY2hh
YmxlLT5nY19uZXh0ID09IGdjKSB7DQorCQkJLyogc3RpbGwgYWxpdmUsIG1vdmUgaXQsIGl0
IG1heSBkaWUgbGF0ZXIgKi8NCisJCQlMSVNUX1JFTU9WRShnYyk7DQorCQkJTElTVF9BUFBF
TkQoZ2MsIG9sZCk7DQorCQl9DQorCX0NCit9DQorDQorLyogVGhpcyBpcyB0aGUgbWFpbiBm
dW5jdGlvbi4gIFJlYWQgdGhpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUNCisgKiBjb2xsZWN0
aW9uIHByb2Nlc3Mgd29ya3MuICovDQorc3RhdGljIGxvbmcNCitjb2xsZWN0KFB5R0NJbmZv
ICp5b3VuZywgUHlHQ0luZm8gKm9sZCkNCit7DQorCWxvbmcgbiA9IDA7DQorCWxvbmcgbSA9
IDA7DQorCVB5R0NJbmZvIHJlYWNoYWJsZTsNCisJUHlHQ0luZm8gdW5yZWFjaGFibGU7DQor
CVB5R0NJbmZvIGZpbmFsaXplcnM7DQorCVB5R0NJbmZvICpnYzsNCisJUHlPYmplY3QgKm91
dHB1dCA9IE5VTEw7DQorDQorCWlmIChkZWJ1Zykgew0KKwkJb3V0cHV0ID0gUHlTeXNfR2V0
T2JqZWN0KCJzdGRlcnIiKTsNCisJfQ0KKwlpZiAoZGVidWcgJiBERUJVR19TVEFUUykgew0K
KwkJY2hhciBidWZbMTAwXTsNCisJCXNwcmludGYoYnVmLCAiZ2M6IGNvbGxlY3RpbmcgZ2Vu
ZXJhdGlvbiAlZC4uLlxuIiwgZ2VuZXJhdGlvbik7DQorCQlQeUZpbGVfV3JpdGVTdHJpbmco
YnVmLG91dHB1dCk7DQorCQlzcHJpbnRmKGJ1ZiwgImdjOiBvYmplY3RzIGluIGVhY2ggZ2Vu
ZXJhdGlvbjogJWQgJWQgJWRcbiIsDQorCQkJTElTVF9TSVpFKCZnZW5lcmF0aW9uMCksDQor
CQkJTElTVF9TSVpFKCZnZW5lcmF0aW9uMSksDQorCQkJTElTVF9TSVpFKCZnZW5lcmF0aW9u
MikpOw0KKwkJUHlGaWxlX1dyaXRlU3RyaW5nKGJ1ZixvdXRwdXQpOw0KKwl9DQorDQorCS8q
IFVzaW5nIG9iX3JlZmNudCBhbmQgZ2NfcmVmcywgY2FsY3VsYXRlIHdoaWNoIG9iamVjdHMg
aW4gdGhlDQorCSAqIGNvbnRhaW5lciBzZXQgYXJlIHJlYWNoYWJsZSBmcm9tIG91dHNpZGUg
dGhlIHNldCAoaWUuIGhhdmUgYQ0KKwkgKiByZWZjb3VudCBncmVhdGVyIHRoYW4gMCB3aGVu
IGFsbCB0aGUgcmVmZXJlbmNlcyB3aXRoaW4gdGhlDQorCSAqIHNldCBhcmUgdGFrZW4gaW50
byBhY2NvdW50ICovDQorCXVwZGF0ZV9yZWZzKHlvdW5nKTsNCisJc3VidHJhY3RfcmVmcyh5
b3VuZyk7DQorDQorCS8qIE1vdmUgZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSBvdXRzaWRl
IHRoZSBzZXQgaW50byB0aGUNCisJICogcmVhY2hhYmxlIHNldCAoaWUuIGdjX3JlZnMgPiAw
KS4gIE5leHQsIG1vdmUgZXZlcnl0aGluZw0KKwkgKiByZWFjaGFibGUgZnJvbSBvYmplY3Rz
IGluIHRoZSByZWFjaGFibGUgc2V0LiAqLw0KKwlMSVNUX0lOSVQoJnJlYWNoYWJsZSk7DQor
CW1vdmVfcm9vdHMoeW91bmcsICZyZWFjaGFibGUpOw0KKwltb3ZlX3Jvb3RfcmVhY2hhYmxl
KCZyZWFjaGFibGUpOw0KKw0KKwkvKiBtb3ZlIHVucmVhY2hhYmxlIG9iamVjdHMgdG8gYSB0
ZW1wb3JhcnkgbGlzdCwgbmV3IG9iamVjdHMgY2FuIGJlDQorCSAqIGFsbG9jYXRlZCBhZnRl
ciB0aGlzIHBvaW50ICovDQorCUxJU1RfSU5JVCgmdW5yZWFjaGFibGUpOw0KKwlMSVNUX01P
VkUoeW91bmcsICZ1bnJlYWNoYWJsZSk7DQorCS8vTElTVF9JTklUKHlvdW5nKTsNCisNCisJ
LyogbW92ZSByZWFjaGFibGUgb2JqZWN0cyB0byBuZXh0IGdlbmVyYXRpb24gKi8NCisJTElT
VF9MQVBQRU5EKCZyZWFjaGFibGUsIG9sZCk7DQorDQorCS8qIE1vdmUgb2JqZWN0cyByZWFj
aGFibGUgZnJvbSBmaW5hbGl6ZXJzLCB3ZSBjYW4ndCBzYWZlbHkgZGVsZXRlDQorCSAqIHRo
ZW0uICBQeXRob24gcHJvZ3JhbW1lcnMgc2hvdWxkIHRha2UgY2FyZSBub3QgdG8gY3JlYXRl
IHN1Y2gNCisJICogdGhpbmdzLiAgRm9yIFB5dGhvbiBmaW5hbGl6ZXJzIG1lYW5zIGluc3Rh
bmNlIG9iamVjdHMgd2l0aA0KKwkgKiBfX2RlbF9fIG1ldGhvZHMuICovDQorCUxJU1RfSU5J
VCgmZmluYWxpemVycyk7DQorCW1vdmVfZmluYWxpemVycygmdW5yZWFjaGFibGUsICZmaW5h
bGl6ZXJzKTsNCisJbW92ZV9maW5hbGl6ZXJfcmVhY2hhYmxlKCZmaW5hbGl6ZXJzKTsNCisN
CisJLyogQ29sbGVjdCBzdGF0aXN0aWNzIG9uIGNvbGxlY3RhYmxlIG9iamVjdHMgZm91bmQg
YW5kIHByaW50DQorCSAqIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gKi8NCisJZm9yIChnYyA9
IHVucmVhY2hhYmxlLmdjX25leHQ7IGdjICE9ICZ1bnJlYWNoYWJsZTsNCisJCQlnYyA9IGdj
LT5nY19uZXh0KSB7DQorCQltKys7DQorCQlpZiAob3V0cHV0ICE9IE5VTEwgJiYgKGRlYnVn
ICYgREVCVUdfQ09MTEVDVEFCTEUpKSB7DQorCQkJZGVidWdfY3ljbGUob3V0cHV0LCAiY29s
bGVjdGFibGUgIiwgUFlfR0NPQkooZ2MpKTsNCisJCX0NCisJfQ0KKwkvKiBjYWxsIHRwX2Ns
ZWFyIG9uIG9iamVjdHMgaW4gdGhlIGNvbGxlY3RhYmxlIHNldC4gIFRoaXMgd2lsbCBjYXVz
ZQ0KKwkgKiB0aGUgcmVmZXJlbmNlIGN5Y2xlcyB0byBiZSBicm9rZW4uIEl0IG1heSBhbHNv
IGNhdXNlIHNvbWUgb2JqZWN0cyBpbg0KKwkgKiBmaW5hbGl6ZXJzIHRvIGJlIGZyZWVkICov
DQorCWRlbGV0ZV9nYXJiYWdlKCZ1bnJlYWNoYWJsZSwgb2xkKTsNCisNCisJLyogQ29sbGVj
dCBzdGF0aXN0aWNzIG9uIHVuY29sbGVjdGFibGUgb2JqZWN0cyBmb3VuZCBhbmQgcHJpbnQN
CisJICogZGVidWdnaW5nIGluZm9ybWF0aW9uLiAqLw0KKwlmb3IgKGdjID0gZmluYWxpemVy
cy5nY19uZXh0OyBnYyAhPSAmZmluYWxpemVyczsNCisJCQlnYyA9IGdjLT5nY19uZXh0KSB7
DQorCQluKys7DQorCQlpZiAob3V0cHV0ICE9IE5VTEwgJiYgKGRlYnVnICYgREVCVUdfVU5D
T0xMRUNUQUJMRSkpIHsNCisJCQlkZWJ1Z19jeWNsZShvdXRwdXQsICJ1bmNvbGxlY3RhYmxl
ICIsIFBZX0dDT0JKKGdjKSk7DQorCQl9DQorCX0NCisJaWYgKG91dHB1dCAhPSBOVUxMICYm
IChkZWJ1ZyAmIERFQlVHX1NUQVRTKSkgew0KKwkJaWYgKG0gPT0gMCAmJiBuID09IDApIHsN
CisJCQlQeUZpbGVfV3JpdGVTdHJpbmcoImdjOiBkb25lLlxuIiwgb3V0cHV0KTsNCisJCX0g
ZWxzZSB7DQorCQkJY2hhciBidWZbMjAwXTsNCisJCQlzcHJpbnRmKGJ1ZiwNCisJCQkJImdj
OiBkb25lLCAlZCB1bnJlYWNoYWJsZSwgJWQgdW5jb2xsZWN0YWJsZS5cbiIsDQorCQkJCW4r
bSwgbik7DQorCQkJUHlGaWxlX1dyaXRlU3RyaW5nKGJ1Ziwgb3V0cHV0KTsNCisJCX0NCisJ
fQ0KKw0KKwkvKiBBcHBlbmQgaW5zdGFuY2VzIGluIHRoZSB1bmNvbGxlY3RhYmxlIHNldCB0
byBhIFB5dGhvbg0KKwkgKiByZWFjaGFibGUgbGlzdCBvZiBnYXJiYWdlLiAgVGhlIHByb2dy
YW1tZXIgaGFzIHRvIGRlYWwgd2l0aA0KKwkgKiB0aGlzIGlmIHRoZXkgaW5zaXN0IG9uIGNy
ZWF0aW5nIHRoaXMgdHlwZSBvZiBzdHJ1Y3R1cmUuICovDQorCWhhbmRsZV9maW5hbGl6ZXJz
KCZmaW5hbGl6ZXJzLCBvbGQpOw0KKw0KKwlhbGxvY2F0ZWQgPSAwOw0KKwlQeUVycl9DbGVh
cigpOyAvKiBpbiBjYXNlIHdyaXRpbmcgdG8gc3lzLnN0ZGVyciBmYWlsZWQgKi8NCisJcmV0
dXJuIG4rbTsNCit9DQorDQorc3RhdGljIGxvbmcNCitjb2xsZWN0X2dlbmVyYXRpb25zKHZv
aWQpDQorew0KKwlzdGF0aWMgbG9uZyBjb2xsZWN0aW9uczAgPSAwOw0KKwlzdGF0aWMgbG9u
ZyBjb2xsZWN0aW9uczEgPSAwOw0KKwlsb25nIG47DQorDQorDQorCWlmIChjb2xsZWN0aW9u
czEgPiB0aHJlc2hvbGQyKSB7DQorCQlnZW5lcmF0aW9uID0gMjsNCisJCUxJU1RfTEFQUEVO
RCgmZ2VuZXJhdGlvbjAsICZnZW5lcmF0aW9uMik7DQorCQlMSVNUX0xBUFBFTkQoJmdlbmVy
YXRpb24xLCAmZ2VuZXJhdGlvbjIpOw0KKwkJaWYgKGdlbmVyYXRpb24yLmdjX25leHQgIT0g
JmdlbmVyYXRpb24yKSB7DQorCQkJbiA9IGNvbGxlY3QoJmdlbmVyYXRpb24yLCAmZ2VuZXJh
dGlvbjIpOw0KKwkJfQ0KKwkJY29sbGVjdGlvbnMxID0gMDsNCisJfSBlbHNlIGlmIChjb2xs
ZWN0aW9uczAgPiB0aHJlc2hvbGQxKSB7DQorCQlnZW5lcmF0aW9uID0gMTsNCisJCWNvbGxl
Y3Rpb25zMSsrOw0KKwkJTElTVF9MQVBQRU5EKCZnZW5lcmF0aW9uMCwgJmdlbmVyYXRpb24x
KTsNCisJCWlmIChnZW5lcmF0aW9uMS5nY19uZXh0ICE9ICZnZW5lcmF0aW9uMSkgew0KKwkJ
CW4gPSBjb2xsZWN0KCZnZW5lcmF0aW9uMSwgJmdlbmVyYXRpb24yKTsNCisJCX0NCisJCWNv
bGxlY3Rpb25zMCA9IDA7DQorCX0gZWxzZSB7DQorCQlnZW5lcmF0aW9uID0gMDsNCisJCWNv
bGxlY3Rpb25zMCsrOw0KKwkJaWYgKGdlbmVyYXRpb24wLmdjX25leHQgIT0gJmdlbmVyYXRp
b24wKSB7DQorCQkJbiA9IGNvbGxlY3QoJmdlbmVyYXRpb24wLCAmZ2VuZXJhdGlvbjEpOw0K
KwkJfQ0KKwl9DQorCXJldHVybiBuOw0KK30NCisNCit2b2lkDQorUHlHQ19JbnNlcnQoUHlP
YmplY3QgKm9wKQ0KK3sNCisJLyogY29sbGVjdGlvbiBsb2NrIHNpbmNlIGNvbGxlY3Rpbmcg
bWF5IGNhdXNlIGFsbG9jYXRpb25zICovDQorCXN0YXRpYyBpbnQgY29sbGVjdGluZyA9IDA7
DQorDQorI2lmZGVmIERFQlVHDQorCS8qZnByaW50ZihzdGRlcnIsICJJbnNlcnQgMHgleFxu
Iiwgb3ApOyovDQorI2VuZGlmDQorCWlmICh0aHJlc2hvbGQwICYmIGFsbG9jYXRlZCA+IHRo
cmVzaG9sZDAgJiYgIWNvbGxlY3RpbmcpIHsNCisJCWNvbGxlY3RpbmcrKzsNCisJCWNvbGxl
Y3RfZ2VuZXJhdGlvbnMoKTsNCisJCWNvbGxlY3RpbmctLTsNCisJfQ0KKwlhbGxvY2F0ZWQr
KzsNCisJTElTVF9BUFBFTkQoUFlfR0NJTkZPKG9wKSwgJmdlbmVyYXRpb24wKTsNCit9DQor
DQordm9pZA0KK1B5R0NfUmVtb3ZlKFB5T2JqZWN0ICpvcCkNCit7DQorI2lmZGVmIERFQlVH
DQorCS8qZnByaW50ZihzdGRlcnIsICJSZW1vdmUgMHgleFxuIiwgb3ApOyovDQorI2VuZGlm
DQorCWlmIChhbGxvY2F0ZWQgPiAwKSB7DQorCQlhbGxvY2F0ZWQtLTsNCisJfQ0KKwlMSVNU
X1JFTU9WRShQWV9HQ0lORk8ob3ApKTsNCit9DQorDQorDQorc3RhdGljIGNoYXIgY29sbGVj
dF9fZG9jX19bXSA9DQorImNvbGxlY3QoKSAtPiBuXG4iDQorIlxuIg0KKyJSdW4gYSBmdWxs
IGNvbGxlY3Rpb24uICBUaGUgbnVtYmVyIG9mIHVucmVhY2hhYmxlIG9iamVjdHMgaXMgcmV0
dXJuZWQuXG4iDQorOw0KKw0KK3N0YXRpYyBQeU9iamVjdCAqDQorUHlfY29sbGVjdChzZWxm
LCBhcmdzKQ0KKwlQeU9iamVjdCAqc2VsZjsNCisJUHlPYmplY3QgKmFyZ3M7DQorew0KKwls
b25nIG47DQorDQorCWlmKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiKSkJLyogY2hlY2sg
bm8gYXJncyAqLw0KKwkJcmV0dXJuIE5VTEw7DQorDQorCWdlbmVyYXRpb24gPSAyOw0KKwlM
SVNUX0xBUFBFTkQoJmdlbmVyYXRpb24wLCAmZ2VuZXJhdGlvbjIpOw0KKwlMSVNUX0xBUFBF
TkQoJmdlbmVyYXRpb24xLCAmZ2VuZXJhdGlvbjIpOw0KKwluID0gY29sbGVjdCgmZ2VuZXJh
dGlvbjIsICZnZW5lcmF0aW9uMik7DQorDQorCXJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwg
bik7DQorfQ0KKw0KK3N0YXRpYyBjaGFyIHNldF9kZWJ1Z19fZG9jX19bXSA9IA0KKyJzZXRf
ZGVidWcoZmxhZ3MpIC0+IE5vbmVcbiINCisiXG4iDQorIlNldCB0aGUgZ2FyYmFnZSBjb2xs
ZWN0aW9uIGRlYnVnZ2luZyBmbGFncy4gRGVidWdnaW5nIGluZm9ybWF0aW9uIGlzXG4iDQor
IndyaXR0ZW4gdG8gc3lzLnN0ZGVyci5cbiINCisiXG4iDQorImZsYWdzIGlzIGFuIGludGVn
ZXIgYW5kIGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgYml0cyB0dXJuZWQgb246XG4iDQorIlxu
Ig0KKyIgIERFQlVHX1NUQVRTIC0gUHJpbnQgc3RhdGlzdGljcyBkdXJpbmcgY29sbGVjdGlv
bi5cbiINCisiICBERUJVR19DT0xMRUNUQUJMRSAtIFByaW50IGNvbGxlY3RhYmxlIG9iamVj
dHMgZm91bmQuXG4iDQorIiAgREVCVUdfVU5DT0xMRUNUQUJMRSAtIFByaW50IHVucmVhY2hh
YmxlIGJ1dCB1bmNvbGxlY3RhYmxlIG9iamVjdHMgZm91bmQuXG4iDQorIiAgREVCVUdfSU5T
VEFOQ0VTIC0gUHJpbnQgaW5zdGFuY2Ugb2JqZWN0cy5cbiINCisiICBERUJVR19PQkpFQ1RT
IC0gUHJpbnQgb2JqZWN0cyBvdGhlciB0aGFuIGluc3RhbmNlcy5cbiINCisiICBERUJVR19M
RUFLIC0gRGVidWcgbGVha2luZyBwcm9ncmFtcyAoZXZlcnl0aGluZyBidXQgU1RBVFMpLlxu
Ig0KKzsNCisNCitzdGF0aWMgUHlPYmplY3QgKg0KK1B5X3NldF9kZWJ1ZyhzZWxmLCBhcmdz
KQ0KKwlQeU9iamVjdCAqc2VsZjsNCisJUHlPYmplY3QgKmFyZ3M7DQorew0KKwlpZiAoIVB5
QXJnX1BhcnNlVHVwbGUoYXJncywgImwiLCAmZGVidWcpKQ0KKwkJcmV0dXJuIE5VTEw7DQor
DQorCVB5X0lOQ1JFRihQeV9Ob25lKTsNCisJcmV0dXJuIFB5X05vbmU7DQorfQ0KKw0KK3N0
YXRpYyBjaGFyIGdldF9kZWJ1Z19fZG9jX19bXSA9IA0KKyJnZXRfZGVidWcoKSAtPiBmbGFn
c1xuIg0KKyJcbiINCisiR2V0IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gZGVidWdnaW5nIGZs
YWdzLlxuIg0KKzsNCisNCitzdGF0aWMgUHlPYmplY3QgKg0KK1B5X2dldF9kZWJ1ZyhzZWxm
LCBhcmdzKQ0KKwlQeU9iamVjdCAqc2VsZjsNCisJUHlPYmplY3QgKmFyZ3M7DQorew0KKwlp
ZighUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiIikpCS8qIG5vIGFyZ3MgKi8NCisJCXJldHVy
biBOVUxMOw0KKw0KKwlyZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIGRlYnVnKTsNCit9DQor
DQorc3RhdGljIGNoYXIgc2V0X3RocmVzaF9fZG9jX19bXSA9DQorInNldF90aHJlc2hvbGQo
dGhyZXNob2xkMCwgW3RocmVob2xkMSwgdGhyZXNob2xkMl0pIC0+IE5vbmVcbiINCisiXG4i
DQorIlNldHMgdGhlIGNvbGxlY3Rpb24gdGhyZXNob2xkcy4gIFNldHRpbmcgdGhyZXNob2xk
MCB0byB6ZXJvIGRpc2FibGVzXG4iDQorImNvbGxlY3Rpb24uXG4iDQorOw0KKw0KK3N0YXRp
YyBQeU9iamVjdCAqDQorUHlfc2V0X3RocmVzaChzZWxmLCBhcmdzKQ0KKwlQeU9iamVjdCAq
c2VsZjsNCisJUHlPYmplY3QgKmFyZ3M7DQorew0KKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUo
YXJncywgIml8aWkiLCAmdGhyZXNob2xkMCwgDQorCQkJCSZ0aHJlc2hvbGQxLCAmdGhyZXNo
b2xkMikpDQorCQlyZXR1cm4gTlVMTDsNCisNCisJUHlfSU5DUkVGKFB5X05vbmUpOw0KKwly
ZXR1cm4gUHlfTm9uZTsNCit9DQorDQorc3RhdGljIGNoYXIgZ2V0X3RocmVzaF9fZG9jX19b
XSA9DQorImdldF90cmVzaG9sZCgpIC0+ICh0aHJlc2hvbGQwLCB0aHJlc2hvbGQxLCB0aHJl
c2hvbGQyKVxuIg0KKyJcbiINCisiUmV0dXJuIHRoZSBjdXJyZW50IGNvbGxlY3Rpb24gdGhy
ZXNob2xkc1xuIg0KKzsNCisNCitzdGF0aWMgUHlPYmplY3QgKg0KK1B5X2dldF90aHJlc2go
c2VsZiwgYXJncykNCisJUHlPYmplY3QgKnNlbGY7DQorCVB5T2JqZWN0ICphcmdzOw0KK3sN
CisJaWYoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIiIpKQkvKiBubyBhcmdzICovDQorCQly
ZXR1cm4gTlVMTDsNCisNCisJcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaWkpIiwgdGhyZXNo
b2xkMCwgdGhyZXNob2xkMSwgdGhyZXNob2xkMik7DQorfQ0KKw0KKw0KK3N0YXRpYyBjaGFy
IGdjX19kb2NfXyBbXSA9DQorIlRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUg
Z2FyYmFnZSBjb2xsZWN0b3IgZm9yIHJlZmVyZW5jZSBjeWNsZXMuXG4iDQorIlxuIg0KKyJj
b2xsZWN0KCkgLS0gRG8gYSBmdWxsIGNvbGxlY3Rpb24gcmlnaHQgbm93LlxuIg0KKyJzZXRf
ZGVidWcoKSAtLSBTZXQgZGVidWdnaW5nIGZsYWdzLlxuIg0KKyJnZXRfZGVidWcoKSAtLSBH
ZXQgZGVidWdnaW5nIGZsYWdzLlxuIg0KKyJzZXRfdGhyZXNob2xkKCkgLS0gU2V0IHRoZSBj
b2xsZWN0aW9uIHRocmVzaG9sZHMuXG4iDQorImdldF90aHJlc2hvbGQoKSAtLSBSZXR1cm4g
dGhlIGN1cnJlbnQgdGhlIGNvbGxlY3Rpb24gdGhyZXNob2xkcy5cbiINCis7DQorDQorc3Rh
dGljIFB5TWV0aG9kRGVmIEdjTWV0aG9kc1tdID0gew0KKwl7InNldF9kZWJ1ZyIsCQlQeV9z
ZXRfZGVidWcsICBNRVRIX1ZBUkFSR1MsIHNldF9kZWJ1Z19fZG9jX199LA0KKwl7ImdldF9k
ZWJ1ZyIsCQlQeV9nZXRfZGVidWcsICBNRVRIX1ZBUkFSR1MsIGdldF9kZWJ1Z19fZG9jX199
LA0KKwl7InNldF90aHJlc2hvbGQiLAlQeV9zZXRfdGhyZXNoLCBNRVRIX1ZBUkFSR1MsIHNl
dF90aHJlc2hfX2RvY19ffSwNCisJeyJnZXRfdGhyZXNob2xkIiwJUHlfZ2V0X3RocmVzaCwg
TUVUSF9WQVJBUkdTLCBnZXRfdGhyZXNoX19kb2NfX30sDQorCXsiY29sbGVjdCIsCQlQeV9j
b2xsZWN0LCAgICBNRVRIX1ZBUkFSR1MsIGNvbGxlY3RfX2RvY19ffSwNCisJe05VTEwsCU5V
TEx9CQkvKiBTZW50aW5lbCAqLw0KK307DQorDQordm9pZA0KK2luaXRnYyh2b2lkKQ0KK3sN
CisJUHlPYmplY3QgKm07DQorCVB5T2JqZWN0ICpkOw0KKw0KKwltID0gUHlfSW5pdE1vZHVs
ZTQoImdjIiwNCisJCQkgICAgICBHY01ldGhvZHMsDQorCQkJICAgICAgZ2NfX2RvY19fLA0K
KwkJCSAgICAgIE5VTEwsDQorCQkJICAgICAgUFlUSE9OX0FQSV9WRVJTSU9OKTsNCisJZCA9
IFB5TW9kdWxlX0dldERpY3QobSk7DQorCWlmIChnYXJiYWdlID09IE5VTEwpIHsNCisJCWdh
cmJhZ2UgPSBQeUxpc3RfTmV3KDApOw0KKwl9DQorCVB5RGljdF9TZXRJdGVtU3RyaW5nKGQs
ICJnYXJiYWdlIiwgZ2FyYmFnZSk7DQorCVB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJERUJV
R19TVEFUUyIsDQorCQkJUHlJbnRfRnJvbUxvbmcoREVCVUdfU1RBVFMpKTsNCisJUHlEaWN0
X1NldEl0ZW1TdHJpbmcoZCwgIkRFQlVHX0NPTExFQ1RBQkxFIiwNCisJCQlQeUludF9Gcm9t
TG9uZyhERUJVR19DT0xMRUNUQUJMRSkpOw0KKwlQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAi
REVCVUdfVU5DT0xMRUNUQUJMRSIsDQorCQkJUHlJbnRfRnJvbUxvbmcoREVCVUdfVU5DT0xM
RUNUQUJMRSkpOw0KKwlQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiREVCVUdfSU5TVEFOQ0VT
IiwNCisJCQlQeUludF9Gcm9tTG9uZyhERUJVR19JTlNUQU5DRVMpKTsNCisJUHlEaWN0X1Nl
dEl0ZW1TdHJpbmcoZCwgIkRFQlVHX09CSkVDVFMiLA0KKwkJCVB5SW50X0Zyb21Mb25nKERF
QlVHX09CSkVDVFMpKTsNCisJUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkRFQlVHX0xFQUsi
LA0KKwkJCVB5SW50X0Zyb21Mb25nKERFQlVHX0xFQUspKTsNCit9DQorDQotLS0gUHl0aG9u
LWN2cy9PYmplY3RzL2NsYXNzb2JqZWN0LmMJVHVlIEZlYiAyOSAxNDo1NToxNSAyMDAwDQor
KysgUHl0aG9uLWdjL09iamVjdHMvY2xhc3NvYmplY3QuYwlNb24gQXByIDI0IDIxOjE5OjE4
IDIwMDANCkBAIC0xMTAsNyArMTEwLDcgQEANCiAJCX0NCiAJCVB5X0lOQ1JFRihiYXNlcyk7
DQogCX0NCi0Jb3AgPSBQeU9iamVjdF9ORVcoUHlDbGFzc09iamVjdCwgJlB5Q2xhc3NfVHlw
ZSk7DQorCW9wID0gUHlPYmplY3RfTmV3KFB5Q2xhc3NPYmplY3QsICZQeUNsYXNzX1R5cGUp
Ow0KIAlpZiAob3AgPT0gTlVMTCkgew0KIAkJUHlfREVDUkVGKGJhc2VzKTsNCiAJCXJldHVy
biBOVUxMOw0KQEAgLTEzMSw2ICsxMzEsOSBAQA0KIAlQeV9YSU5DUkVGKG9wLT5jbF9nZXRh
dHRyKTsNCiAJUHlfWElOQ1JFRihvcC0+Y2xfc2V0YXR0cik7DQogCVB5X1hJTkNSRUYob3At
PmNsX2RlbGF0dHIpOw0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorCVB5R0NfSW5zZXJ0KChQ
eU9iamVjdCAqKW9wKTsNCisjZW5kaWYNCiAJcmV0dXJuIChQeU9iamVjdCAqKSBvcDsNCiB9
DQogDQpAQCAtMTQwLDEzICsxNDMsMTYgQEANCiBjbGFzc19kZWFsbG9jKG9wKQ0KIAlQeUNs
YXNzT2JqZWN0ICpvcDsNCiB7DQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisJUHlHQ19SZW1v
dmUoKFB5T2JqZWN0ICopb3ApOw0KKyNlbmRpZg0KIAlQeV9ERUNSRUYob3AtPmNsX2Jhc2Vz
KTsNCiAJUHlfREVDUkVGKG9wLT5jbF9kaWN0KTsNCiAJUHlfWERFQ1JFRihvcC0+Y2xfbmFt
ZSk7DQogCVB5X1hERUNSRUYob3AtPmNsX2dldGF0dHIpOw0KIAlQeV9YREVDUkVGKG9wLT5j
bF9zZXRhdHRyKTsNCiAJUHlfWERFQ1JFRihvcC0+Y2xfZGVsYXR0cik7DQotCWZyZWUoKEFO
WSAqKW9wKTsNCisJUHlPYmplY3RfRGVsKChQeU9iamVjdCAqKW9wKTsNCiB9DQogDQogc3Rh
dGljIFB5T2JqZWN0ICoNCkBAIC0zODYsNiArMzkyLDIxIEBADQogCXJldHVybiByZXM7DQog
fQ0KIA0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorc3RhdGljIGludA0KK2NsYXNzX3JlY3Vy
c2UoUHlDbGFzc09iamVjdCAqbywgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICpjbG9zdXJlKQ0K
K3sNCisJaWYgKG8tPmNsX2Jhc2VzKSB2aXNpdChvLT5jbF9iYXNlcywgY2xvc3VyZSk7DQor
CWlmIChvLT5jbF9kaWN0KSB2aXNpdChvLT5jbF9kaWN0LCBjbG9zdXJlKTsNCisJaWYgKG8t
PmNsX25hbWUpIHZpc2l0KG8tPmNsX25hbWUsIGNsb3N1cmUpOw0KKwlpZiAoby0+Y2xfZ2V0
YXR0cikgdmlzaXQoby0+Y2xfZ2V0YXR0ciwgY2xvc3VyZSk7DQorCWlmIChvLT5jbF9zZXRh
dHRyKSB2aXNpdChvLT5jbF9zZXRhdHRyLCBjbG9zdXJlKTsNCisJaWYgKG8tPmNsX2RlbGF0
dHIpIHZpc2l0KG8tPmNsX2RlbGF0dHIsIGNsb3N1cmUpOw0KKwlyZXR1cm4gMTsNCit9DQor
I2VuZGlmIC8qIFdJVEhfQ1lDTEVfR0MgKi8NCisNCisNCiBQeVR5cGVPYmplY3QgUHlDbGFz
c19UeXBlID0gew0KIAlQeU9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlKQ0KIAkwLA0K
QEAgLTQwNiw2ICs0MjcsMTIgQEANCiAJKHJlcHJmdW5jKWNsYXNzX3N0ciwgLyp0cF9zdHIq
Lw0KIAkoZ2V0YXR0cm9mdW5jKWNsYXNzX2dldGF0dHIsIC8qdHBfZ2V0YXR0cm8qLw0KIAko
c2V0YXR0cm9mdW5jKWNsYXNzX3NldGF0dHIsIC8qdHBfc2V0YXR0cm8qLw0KKyNpZmRlZiBX
SVRIX0NZQ0xFX0dDDQorCTAsCQkvKiB0cF9hc19idWZmZXIgKi8NCisJUHlfVFBGTEFHU19E
RUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDSU5GTywgLyp0cF9mbGFncyovDQorCTAsCQkv
KiB0cF9kb2MgKi8NCisJKHJlY3Vyc2Vwcm9jKWNsYXNzX3JlY3Vyc2UsCS8qIHRwX3JlY3Vy
c2UgKi8NCisjZW5kaWYNCiB9Ow0KIA0KIGludA0KQEAgLTQ0NCwxMiArNDcxLDE1IEBADQog
CQlQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsNCiAJCXJldHVybiBOVUxMOw0KIAl9DQotCWlu
c3QgPSBQeU9iamVjdF9ORVcoUHlJbnN0YW5jZU9iamVjdCwgJlB5SW5zdGFuY2VfVHlwZSk7
DQorCWluc3QgPSBQeU9iamVjdF9OZXcoUHlJbnN0YW5jZU9iamVjdCwgJlB5SW5zdGFuY2Vf
VHlwZSk7DQogCWlmIChpbnN0ID09IE5VTEwpDQogCQlyZXR1cm4gTlVMTDsNCiAJUHlfSU5D
UkVGKGNsYXNzKTsNCiAJaW5zdC0+aW5fY2xhc3MgPSAoUHlDbGFzc09iamVjdCAqKWNsYXNz
Ow0KIAlpbnN0LT5pbl9kaWN0ID0gUHlEaWN0X05ldygpOw0KKyNpZmRlZiBXSVRIX0NZQ0xF
X0dDDQorCVB5R0NfSW5zZXJ0KChQeU9iamVjdCAqKWluc3QpOw0KKyNlbmRpZg0KIAlpZiAo
aW5zdC0+aW5fZGljdCA9PSBOVUxMKSB7DQogCQlQeV9ERUNSRUYoaW5zdCk7DQogCQlyZXR1
cm4gTlVMTDsNCkBAIC00OTgsMTEgKzUyOCwxNCBAQA0KIAlQeU9iamVjdCAqZXJyb3JfdHlw
ZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOw0KIAlQeU9iamVjdCAqZGVsOw0K
IAlzdGF0aWMgUHlPYmplY3QgKmRlbHN0cjsNCisJZXh0ZXJuIGxvbmcgX1B5X1JlZlRvdGFs
Ow0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorCVB5R0NfUmVtb3ZlKChQeU9iamVjdCAqKWlu
c3QpOw0KKyNlbmRpZg0KIAkvKiBDYWxsIHRoZSBfX2RlbF9fIG1ldGhvZCBpZiBpdCBleGlz
dHMuICBGaXJzdCB0ZW1wb3JhcmlseQ0KIAkgICByZXZpdmUgdGhlIG9iamVjdCBhbmQgc2F2
ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8NCiAjaWZkZWYgUHlfVFJBQ0Vf
UkVGUw0KIAkvKiBtdWNoIHRvbyBjb21wbGljYXRlZCBpZiBQeV9UUkFDRV9SRUZTIGRlZmlu
ZWQgKi8NCi0JZXh0ZXJuIGxvbmcgX1B5X1JlZlRvdGFsOw0KIAlpbnN0LT5vYl90eXBlID0g
JlB5SW5zdGFuY2VfVHlwZTsNCiAJX1B5X05ld1JlZmVyZW5jZSgoUHlPYmplY3QgKilpbnN0
KTsNCiAJX1B5X1JlZlRvdGFsLS07CQkvKiBjb21wZW5zYXRlIGZvciBpbmNyZW1lbnQgaW4g
TkVXUkVGICovDQpAQCAtNTUwLDYgKzU4Myw5IEBADQogI2lmZGVmIENPVU5UX0FMTE9DUw0K
IAkJaW5zdC0+b2JfdHlwZS0+dHBfZnJlZS0tOw0KICNlbmRpZg0KKyNpZmRlZiBXSVRIX0NZ
Q0xFX0dDDQorCQlQeUdDX0luc2VydCgoUHlPYmplY3QgKilpbnN0KTsNCisjZW5kaWYNCiAJ
CXJldHVybjsgLyogX19kZWxfXyBhZGRlZCBhIHJlZmVyZW5jZTsgZG9uJ3QgZGVsZXRlIG5v
dyAqLw0KIAl9DQogI2lmZGVmIFB5X1RSQUNFX1JFRlMNCkBAIC01NTcsMTEgKzU5MywxMCBA
QA0KIAlpbnN0LT5vYl90eXBlLT50cF9mcmVlLS07CS8qIGNvbXBlbnNhdGUgZm9yIGluY3Jl
bWVudCBpbiBVTlJFRiAqLw0KICNlbmRpZg0KIAlfUHlfRm9yZ2V0UmVmZXJlbmNlKChQeU9i
amVjdCAqKWluc3QpOw0KLQlpbnN0LT5vYl90eXBlID0gTlVMTDsNCiAjZW5kaWYgLyogUHlf
VFJBQ0VfUkVGUyAqLw0KIAlQeV9ERUNSRUYoaW5zdC0+aW5fY2xhc3MpOw0KIAlQeV9YREVD
UkVGKGluc3QtPmluX2RpY3QpOw0KLQlmcmVlKChBTlkgKilpbnN0KTsNCisJUHlPYmplY3Rf
RGVsKChQeU9iamVjdCAqKWluc3QpOw0KIH0NCiANCiBzdGF0aWMgUHlPYmplY3QgKg0KQEAg
LTg0MCw2ICs4NzUsMTYgQEANCiAJcmV0dXJuIG91dGNvbWU7DQogfQ0KIA0KKyNpZmRlZiBX
SVRIX0NZQ0xFX0dDDQorc3RhdGljIGludA0KK2luc3RhbmNlX3JlY3Vyc2UoUHlJbnN0YW5j
ZU9iamVjdCAqbywgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICpjbG9zdXJlKQ0KK3sNCisJaWYg
KG8tPmluX2NsYXNzKSB2aXNpdCgoUHlPYmplY3QgKikoby0+aW5fY2xhc3MpLCBjbG9zdXJl
KTsNCisJaWYgKG8tPmluX2RpY3QpIHZpc2l0KG8tPmluX2RpY3QsIGNsb3N1cmUpOw0KKwly
ZXR1cm4gMTsNCit9DQorI2VuZGlmIC8qIFdJVEhfQ1lDTEVfR0MgKi8NCisNCiBzdGF0aWMg
UHlPYmplY3QgKmdldGl0ZW1zdHIsICpzZXRpdGVtc3RyLCAqZGVsaXRlbXN0ciwgKmxlbnN0
cjsNCiANCiBzdGF0aWMgaW50DQpAQCAtMTQ2Myw3ICsxNTA4LDExIEBADQogCShnZXRhdHRy
b2Z1bmMpaW5zdGFuY2VfZ2V0YXR0ciwgLyp0cF9nZXRhdHRybyovDQogCShzZXRhdHRyb2Z1
bmMpaW5zdGFuY2Vfc2V0YXR0ciwgLyp0cF9zZXRhdHRybyovDQogICAgICAgICAwLCAvKiB0
cF9hc19idWZmZXIgKi8NCi0JUHlfVFBGTEFHU19ERUZBVUxULCAvKnRwX2ZsYWdzICovDQor
CVB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQ0lORk8sIC8qdHBfZmxh
Z3MqLw0KKwkwLAkJLyogdHBfZG9jICovDQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisJKHJl
Y3Vyc2Vwcm9jKWluc3RhbmNlX3JlY3Vyc2UsCS8qIHRwX3JlY3Vyc2UgKi8NCisjZW5kaWYN
CiB9Ow0KIA0KIA0KQEAgLTE0OTMsNyArMTU0Miw3IEBADQogCQlfUHlfTmV3UmVmZXJlbmNl
KChQeU9iamVjdCAqKWltKTsNCiAJfQ0KIAllbHNlIHsNCi0JCWltID0gUHlPYmplY3RfTkVX
KFB5TWV0aG9kT2JqZWN0LCAmUHlNZXRob2RfVHlwZSk7DQorCQlpbSA9IFB5T2JqZWN0X05l
dyhQeU1ldGhvZE9iamVjdCwgJlB5TWV0aG9kX1R5cGUpOw0KIAkJaWYgKGltID09IE5VTEwp
DQogCQkJcmV0dXJuIE5VTEw7DQogCX0NCi0tLSBQeXRob24tY3ZzL09iamVjdHMvZGljdG9i
amVjdC5jCVRodSBNYXIgMzAgMjI6MDI6NTIgMjAwMA0KKysrIFB5dGhvbi1nYy9PYmplY3Rz
L2RpY3RvYmplY3QuYwlTYXQgQXByICA4IDAyOjA5OjU5IDIwMDANCkBAIC0xMjEsNyArMTIx
LDcgQEANCiAJCWlmIChkdW1teSA9PSBOVUxMKQ0KIAkJCXJldHVybiBOVUxMOw0KIAl9DQot
CW1wID0gUHlPYmplY3RfTkVXKGRpY3RvYmplY3QsICZQeURpY3RfVHlwZSk7DQorCW1wID0g
UHlPYmplY3RfTmV3KGRpY3RvYmplY3QsICZQeURpY3RfVHlwZSk7DQogCWlmIChtcCA9PSBO
VUxMKQ0KIAkJcmV0dXJuIE5VTEw7DQogCW1wLT5tYV9zaXplID0gMDsNCkBAIC0xMjksNiAr
MTI5LDkgQEANCiAJbXAtPm1hX3RhYmxlID0gTlVMTDsNCiAJbXAtPm1hX2ZpbGwgPSAwOw0K
IAltcC0+bWFfdXNlZCA9IDA7DQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisJUHlHQ19JbnNl
cnQoKFB5T2JqZWN0ICopbXApOw0KKyNlbmRpZg0KIAlyZXR1cm4gKFB5T2JqZWN0ICopbXA7
DQogfQ0KIA0KQEAgLTQ4MCw2ICs0ODMsOSBAQA0KIAlyZWdpc3RlciBpbnQgaTsNCiAJcmVn
aXN0ZXIgZGljdGVudHJ5ICplcDsNCiAJUHlfVFJBU0hDQU5fU0FGRV9CRUdJTihtcCkNCisj
aWZkZWYgV0lUSF9DWUNMRV9HQw0KKwlQeUdDX1JlbW92ZSgoUHlPYmplY3QgKiltcCk7DQor
I2VuZGlmDQogCWZvciAoaSA9IDAsIGVwID0gbXAtPm1hX3RhYmxlOyBpIDwgbXAtPm1hX3Np
emU7IGkrKywgZXArKykgew0KIAkJaWYgKGVwLT5tZV9rZXkgIT0gTlVMTCkgew0KIAkJCVB5
X0RFQ1JFRihlcC0+bWVfa2V5KTsNCkBAIC00ODksNyArNDk1LDcgQEANCiAJCX0NCiAJfQ0K
IAlQeU1lbV9YREVMKG1wLT5tYV90YWJsZSk7DQotCVB5TWVtX0RFTChtcCk7DQorCVB5T2Jq
ZWN0X0RlbCgoUHlPYmplY3QgKiltcCk7DQogCVB5X1RSQVNIQ0FOX1NBRkVfRU5EKG1wKQ0K
IH0NCiANCkBAIC0xMDM2LDYgKzEwNDIsMzMgQEANCiAJcmV0dXJuIFB5X05vbmU7DQogfQ0K
IA0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorc3RhdGljIGludA0KK2RpY3RfcmVjdXJzZShQ
eU9iamVjdCAqb3AsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqY2xvc3VyZSkNCit7DQorCWlu
dCBpID0gMDsNCisJUHlPYmplY3QgKnBrOw0KKwlQeU9iamVjdCAqcHY7DQorDQorCXdoaWxl
IChQeURpY3RfTmV4dChvcCwgJmksICZwaywgJnB2KSkgew0KKwkJaWYgKCF2aXNpdChwaywg
Y2xvc3VyZSkpIHsNCisJCQlyZXR1cm4gMDsNCisJCX0NCisJCWlmICghdmlzaXQocHYsIGNs
b3N1cmUpKSB7DQorCQkJcmV0dXJuIDA7DQorCQl9DQorCX0NCisJcmV0dXJuIDE7DQorfQ0K
Kw0KK3N0YXRpYyBpbnQNCitkaWN0X2djX2NsZWFyKFB5T2JqZWN0ICpvcCkNCit7DQorCVB5
RGljdF9DbGVhcihvcCk7DQorCXJldHVybiAwOw0KK30NCisjZW5kaWYgLyogV0lUSF9DWUNM
RV9HQyAqLw0KKw0KIHN0YXRpYyBQeU1ldGhvZERlZiBtYXBwX21ldGhvZHNbXSA9IHsNCiAJ
eyJoYXNfa2V5IiwJKFB5Q0Z1bmN0aW9uKWRpY3RfaGFzX2tleSwgICAgICBNRVRIX1ZBUkFS
R1N9LA0KIAl7ImtleXMiLAkoUHlDRnVuY3Rpb24pZGljdF9rZXlzfSwNCkBAIC0xMDcxLDYg
KzExMDQsMTggQEANCiAJMCwJCQkvKnRwX2FzX251bWJlciovDQogCTAsCQkJLyp0cF9hc19z
ZXF1ZW5jZSovDQogCSZkaWN0X2FzX21hcHBpbmcsCS8qdHBfYXNfbWFwcGluZyovDQorI2lm
ZGVmIFdJVEhfQ1lDTEVfR0MNCisJMCwJCS8qIHRwX2hhc2ggKi8NCisJMCwJCS8qIHRwX2Nh
bGwgKi8NCisJMCwJCS8qIHRwX3N0ciAqLw0KKwkwLAkJLyogdHBfZ2V0YXR0cm8gKi8NCisJ
MCwJCS8qIHRwX3NldGF0dHJvICovDQorCTAsCQkvKiB0cF9hc19idWZmZXIgKi8NCisJUHlf
VFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDSU5GTywgLyp0cF9mbGFncyov
DQorCTAsCQkvKiB0cF9kb2MgKi8NCisJKHJlY3Vyc2Vwcm9jKWRpY3RfcmVjdXJzZSwJLyog
dHBfcmVjdXJzZSAqLw0KKwkoaW5xdWlyeSlkaWN0X2djX2NsZWFyLAkJLyogdHBfY2xlYXIg
Ki8NCisjZW5kaWYNCiB9Ow0KIA0KIC8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdp
dGggb2xkIGRpY3Rpb25hcnkgaW50ZXJmYWNlICovDQotLS0gUHl0aG9uLWN2cy9PYmplY3Rz
L2Z1bmNvYmplY3QuYwlUaHUgTWF5IDIxIDE4OjU1OjM0IDE5OTgNCisrKyBQeXRob24tZ2Mv
T2JqZWN0cy9mdW5jb2JqZWN0LmMJU2F0IEFwciAgOCAwMjowOTo1MCAyMDAwDQpAQCAtNDAs
NyArNDAsNyBAQA0KIAlQeU9iamVjdCAqY29kZTsNCiAJUHlPYmplY3QgKmdsb2JhbHM7DQog
ew0KLQlQeUZ1bmN0aW9uT2JqZWN0ICpvcCA9IFB5T2JqZWN0X05FVyhQeUZ1bmN0aW9uT2Jq
ZWN0LA0KKwlQeUZ1bmN0aW9uT2JqZWN0ICpvcCA9IFB5T2JqZWN0X05ldyhQeUZ1bmN0aW9u
T2JqZWN0LA0KIAkJCQkJICAgICZQeUZ1bmN0aW9uX1R5cGUpOw0KIAlpZiAob3AgIT0gTlVM
TCkgew0KIAkJUHlPYmplY3QgKmRvYzsNCkBAIC02Myw2ICs2Myw5IEBADQogCQlQeV9JTkNS
RUYoZG9jKTsNCiAJCW9wLT5mdW5jX2RvYyA9IGRvYzsNCiAJfQ0KKyNpZmRlZiBXSVRIX0NZ
Q0xFX0dDDQorCVB5R0NfSW5zZXJ0KChQeU9iamVjdCAqKW9wKTsNCisjZW5kaWYNCiAJcmV0
dXJuIChQeU9iamVjdCAqKW9wOw0KIH0NCiANCkBAIC0xODYsMTIgKzE4OSwxNSBAQA0KIGZ1
bmNfZGVhbGxvYyhvcCkNCiAJUHlGdW5jdGlvbk9iamVjdCAqb3A7DQogew0KKyNpZmRlZiBX
SVRIX0NZQ0xFX0dDDQorCVB5R0NfUmVtb3ZlKChQeU9iamVjdCAqKW9wKTsNCisjZW5kaWYN
CiAJUHlfREVDUkVGKG9wLT5mdW5jX2NvZGUpOw0KIAlQeV9ERUNSRUYob3AtPmZ1bmNfZ2xv
YmFscyk7DQogCVB5X0RFQ1JFRihvcC0+ZnVuY19uYW1lKTsNCiAJUHlfWERFQ1JFRihvcC0+
ZnVuY19kZWZhdWx0cyk7DQogCVB5X1hERUNSRUYob3AtPmZ1bmNfZG9jKTsNCi0JUHlNZW1f
REVMKG9wKTsNCisJUHlPYmplY3RfRGVsKChQeU9iamVjdCAqKW9wKTsNCiB9DQogDQogc3Rh
dGljIFB5T2JqZWN0Kg0KQEAgLTIzOSw2ICsyNDUsMTkgQEANCiAJcmV0dXJuIGg7DQogfQ0K
IA0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorc3RhdGljIGludA0KK2Z1bmNfcmVjdXJzZShQ
eUZ1bmN0aW9uT2JqZWN0ICpmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmNsb3N1cmUpDQor
ew0KKwlpZiAoZi0+ZnVuY19jb2RlKSB2aXNpdChmLT5mdW5jX2NvZGUsIGNsb3N1cmUpOw0K
KwlpZiAoZi0+ZnVuY19nbG9iYWxzKSB2aXNpdChmLT5mdW5jX2dsb2JhbHMsIGNsb3N1cmUp
Ow0KKwlpZiAoZi0+ZnVuY19kZWZhdWx0cykgdmlzaXQoZi0+ZnVuY19kZWZhdWx0cywgY2xv
c3VyZSk7DQorCWlmIChmLT5mdW5jX2RvYykgdmlzaXQoZi0+ZnVuY19kb2MsIGNsb3N1cmUp
Ow0KKwlpZiAoZi0+ZnVuY19uYW1lKSB2aXNpdChmLT5mdW5jX25hbWUsIGNsb3N1cmUpOw0K
KwlyZXR1cm4gMTsNCit9DQorI2VuZGlmIC8qIFdJVEhfQ1lDTEVfR0MgKi8NCisNCiBQeVR5
cGVPYmplY3QgUHlGdW5jdGlvbl9UeXBlID0gew0KIAlQeU9iamVjdF9IRUFEX0lOSVQoJlB5
VHlwZV9UeXBlKQ0KIAkwLA0KQEAgLTI1NSw0ICsyNzQsMTQgQEANCiAJMCwJCS8qdHBfYXNf
c2VxdWVuY2UqLw0KIAkwLAkJLyp0cF9hc19tYXBwaW5nKi8NCiAJKGhhc2hmdW5jKWZ1bmNf
aGFzaCwgLyp0cF9oYXNoKi8NCisjaWZkZWYgV0lUSF9DWUNMRV9HQw0KKwkwLAkJLyp0cF9j
YWxsKi8NCisJMCwJCS8qdHBfc3RyKi8NCisJMCwJCS8qdHBfZ2V0YXR0cm8qLw0KKwkwLAkJ
Lyp0cF9zZXRhdHRybyovDQorCTAsCQkvKiB0cF9hc19idWZmZXIgKi8NCisJUHlfVFBGTEFH
U19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDSU5GTywgLyp0cF9mbGFncyovDQorCTAs
CQkvKiB0cF9kb2MgKi8NCisJKHJlY3Vyc2Vwcm9jKWZ1bmNfcmVjdXJzZSwJLyogdHBfcmVj
dXJzZSAqLw0KKyNlbmRpZg0KIH07DQotLS0gUHl0aG9uLWN2cy9PYmplY3RzL2xpc3RvYmpl
Y3QuYwlGcmkgTWFyIDI0IDIyOjMyOjMwIDIwMDANCisrKyBQeXRob24tZ2MvT2JqZWN0cy9s
aXN0b2JqZWN0LmMJTW9uIEFwciAyNCAyMToxNDo0MiAyMDAwDQpAQCAtNjEsMzQgKzYxLDM3
IEBADQogCWludCBpOw0KIAlQeUxpc3RPYmplY3QgKm9wOw0KIAlzaXplX3QgbmJ5dGVzOw0K
KwlQeU9iamVjdCAqKml0ZW07DQorDQogCWlmIChzaXplIDwgMCkgew0KIAkJUHlFcnJfQmFk
SW50ZXJuYWxDYWxsKCk7DQogCQlyZXR1cm4gTlVMTDsNCiAJfQ0KLQluYnl0ZXMgPSBzaXpl
ICogc2l6ZW9mKFB5T2JqZWN0ICopOw0KLQkvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8NCi0J
aWYgKG5ieXRlcyAvIHNpemVvZihQeU9iamVjdCAqKSAhPSAoc2l6ZV90KXNpemUpIHsNCi0J
CXJldHVybiBQeUVycl9Ob01lbW9yeSgpOw0KLQl9DQotCW9wID0gKFB5TGlzdE9iamVjdCAq
KSBtYWxsb2Moc2l6ZW9mKFB5TGlzdE9iamVjdCkpOw0KLQlpZiAob3AgPT0gTlVMTCkgew0K
LQkJcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7DQotCX0NCi0JaWYgKHNpemUgPD0gMCkgew0K
LQkJb3AtPm9iX2l0ZW0gPSBOVUxMOw0KLQl9DQorCWlmIChzaXplID09IDApDQorCQlpdGVt
ID0gTlVMTDsNCiAJZWxzZSB7DQotCQlvcC0+b2JfaXRlbSA9IChQeU9iamVjdCAqKikgbWFs
bG9jKG5ieXRlcyk7DQotCQlpZiAob3AtPm9iX2l0ZW0gPT0gTlVMTCkgew0KLQkJCWZyZWUo
KEFOWSAqKW9wKTsNCisJCW5ieXRlcyA9IHNpemUgKiBzaXplb2YoUHlPYmplY3QgKik7DQor
CQkvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8NCisJCWlmIChuYnl0ZXMgLyBzaXplb2YoUHlP
YmplY3QgKikgIT0gKHNpemVfdClzaXplKSB7DQogCQkJcmV0dXJuIFB5RXJyX05vTWVtb3J5
KCk7DQogCQl9DQorCQlpdGVtID0gKFB5T2JqZWN0ICoqKSBtYWxsb2MobmJ5dGVzKTsNCisJ
CWlmIChpdGVtID09IE5VTEwpDQorCQkJcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7DQorCX0N
CisJb3AgPSBQeU9iamVjdF9OZXcoUHlMaXN0T2JqZWN0LCAmUHlMaXN0X1R5cGUpOw0KKwlp
ZiAob3AgPT0gTlVMTCkgew0KKwkJaWYgKGl0ZW0gIT0gTlVMTCkNCisJCQlmcmVlKChBTlkg
KilpdGVtKTsNCisJCXJldHVybiBQeUVycl9Ob01lbW9yeSgpOw0KIAl9DQotCW9wLT5vYl90
eXBlID0gJlB5TGlzdF9UeXBlOw0KIAlvcC0+b2Jfc2l6ZSA9IHNpemU7DQorCW9wLT5vYl9p
dGVtID0gaXRlbTsNCiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykNCiAJCW9wLT5vYl9p
dGVtW2ldID0gTlVMTDsNCi0JX1B5X05ld1JlZmVyZW5jZSgoUHlPYmplY3QgKilvcCk7DQor
I2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisJUHlHQ19JbnNlcnQoKFB5T2JqZWN0ICopb3ApOw0K
KyNlbmRpZg0KIAlyZXR1cm4gKFB5T2JqZWN0ICopIG9wOw0KIH0NCiANCkBAIC0yMTYsNiAr
MjE5LDkgQEANCiB7DQogCWludCBpOw0KIAlQeV9UUkFTSENBTl9TQUZFX0JFR0lOKG9wKQ0K
KyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorCVB5R0NfUmVtb3ZlKChQeU9iamVjdCAqKW9wKTsN
CisjZW5kaWYNCiAJaWYgKG9wLT5vYl9pdGVtICE9IE5VTEwpIHsNCiAJCS8qIERvIGl0IGJh
Y2t3YXJkcywgZm9yIENocmlzdGlhbiBUaXNtZXIuDQogCQkgICBUaGVyZSdzIGEgc2ltcGxl
IHRlc3QgY2FzZSB3aGVyZSBzb21laG93IHRoaXMgcmVkdWNlcw0KQEAgLTIyNyw3ICsyMzMs
NyBAQA0KIAkJfQ0KIAkJZnJlZSgoQU5ZICopb3AtPm9iX2l0ZW0pOw0KIAl9DQotCWZyZWUo
KEFOWSAqKW9wKTsNCisJUHlPYmplY3RfRGVsKChQeU9iamVjdCAqKW9wKTsNCiAJUHlfVFJB
U0hDQU5fU0FGRV9FTkQob3ApDQogfQ0KIA0KQEAgLTEzOTksNiArMTQwNSwyOSBAQA0KIAly
ZXR1cm4gTlVMTDsNCiB9DQogDQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCitzdGF0aWMgaW50
DQorbGlzdF9yZWN1cnNlKFB5TGlzdE9iamVjdCAqbywgdmlzaXRwcm9jIHZpc2l0LCB2b2lk
ICpjbG9zdXJlKQ0KK3sNCisJaW50IGk7DQorCVB5T2JqZWN0ICp4Ow0KKw0KKwlmb3IgKGkg
PSBvLT5vYl9zaXplOyAtLWkgPj0gMDsgKSB7DQorCQl4ID0gby0+b2JfaXRlbVtpXTsNCisJ
CWlmICh4ICE9IE5VTEwgJiYgIXZpc2l0KHgsIGNsb3N1cmUpKQ0KKwkJCXJldHVybiAwOw0K
Kwl9DQorCXJldHVybiAxOw0KK30NCisNCitzdGF0aWMgaW50DQorbGlzdF9jbGVhcihQeUxp
c3RPYmplY3QgKmxwKQ0KK3sNCisJKHZvaWQpIFB5TGlzdF9TZXRTbGljZSgoUHlPYmplY3Qg
KilscCwgMCwgbHAtPm9iX3NpemUsIDApOw0KKwlyZXR1cm4gMDsNCit9DQorI2VuZGlmIC8q
IFdJVEhfQ1lDTEVfR0MgKi8NCisNCiBzdGF0aWMgY2hhciBhcHBlbmRfZG9jW10gPQ0KICJM
LmFwcGVuZChvYmplY3QpIC0tIGFwcGVuZCBvYmplY3QgdG8gZW5kIjsNCiBzdGF0aWMgY2hh
ciBleHRlbmRfZG9jW10gPQ0KQEAgLTE0NjQsNiArMTQ5MywxOCBAQA0KIAkwLAkJLyp0cF9h
c19udW1iZXIqLw0KIAkmbGlzdF9hc19zZXF1ZW5jZSwJLyp0cF9hc19zZXF1ZW5jZSovDQog
CTAsCQkvKnRwX2FzX21hcHBpbmcqLw0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorCTAsCQkv
KiB0cF9oYXNoICovDQorCTAsCQkvKiB0cF9jYWxsICovDQorCTAsCQkvKiB0cF9zdHIgKi8N
CisJMCwJCS8qIHRwX2dldGF0dHJvICovDQorCTAsCQkvKiB0cF9zZXRhdHRybyAqLw0KKwkw
LAkJLyogdHBfYXNfYnVmZmVyICovDQorCVB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxB
R1NfSEFWRV9HQ0lORk8sCS8qIHRwX2ZsYWdzICovDQorCTAsCQkvKiB0cF9kb2MgKi8NCisJ
KHJlY3Vyc2Vwcm9jKWxpc3RfcmVjdXJzZSwJLyogdHBfcmVjdXJzZSAqLw0KKwkoaW5xdWly
eSlsaXN0X2NsZWFyLAkvKiB0cF9jbGVhciAqLw0KKyNlbmRpZg0KIH07DQogDQogDQpAQCAt
MTUzMiw1ICsxNTczLDE2IEBADQogCTAsCQkvKnRwX2FzX251bWJlciovDQogCSZpbW11dGFi
bGVfbGlzdF9hc19zZXF1ZW5jZSwJLyp0cF9hc19zZXF1ZW5jZSovDQogCTAsCQkvKnRwX2Fz
X21hcHBpbmcqLw0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorCTAsCQkvKiB0cF9oYXNoICov
DQorCTAsCQkvKiB0cF9jYWxsICovDQorCTAsCQkvKiB0cF9zdHIgKi8NCisJMCwJCS8qIHRw
X2dldGF0dHJvICovDQorCTAsCQkvKiB0cF9zZXRhdHRybyAqLw0KKwkwLAkJLyogdHBfYXNf
YnVmZmVyICovDQorCVB5X1RQRkxBR1NfREVGQVVMVCwJLyogdHBfZmxhZ3MgKi8NCisJMCwJ
CS8qIHRwX2RvYyAqLw0KKwkocmVjdXJzZXByb2MpbGlzdF9yZWN1cnNlLAkvKiB0cF9yZWN1
cnNlICovDQorI2VuZGlmDQogfTsNCiANCi0tLSBQeXRob24tY3ZzL09iamVjdHMvb2JqZWN0
LmMJVHVlIE1hciAyOCAwODoxMTowOSAyMDAwDQorKysgUHl0aG9uLWdjL09iamVjdHMvb2Jq
ZWN0LmMJU2F0IEFwciAgOCAwMjoxMDowNiAyMDAwDQpAQCAtMTA3LDIwICsxMDcsMTIgQEAN
CiB9DQogI2VuZGlmDQogDQotI2lmbmRlZiBNU19DT1JFRExMDQotUHlPYmplY3QgKg0KLV9Q
eU9iamVjdF9OZXcodHApDQotCVB5VHlwZU9iamVjdCAqdHA7DQotI2Vsc2UNCisNCiBQeU9i
amVjdCAqDQotX1B5T2JqZWN0X05ldyh0cCxvcCkNCitfUHlPYmplY3RfRnJvbVR5cGUodHAs
b3ApDQogCVB5VHlwZU9iamVjdCAqdHA7DQogCVB5T2JqZWN0ICpvcDsNCi0jZW5kaWYNCiB7
DQotI2lmbmRlZiBNU19DT1JFRExMDQotCVB5T2JqZWN0ICpvcCA9IChQeU9iamVjdCAqKSBt
YWxsb2ModHAtPnRwX2Jhc2ljc2l6ZSk7DQotI2VuZGlmDQogCWlmIChvcCA9PSBOVUxMKQ0K
IAkJcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7DQogCW9wLT5vYl90eXBlID0gdHA7DQpAQCAt
MTI4LDI5ICsxMjAsNzggQEANCiAJcmV0dXJuIG9wOw0KIH0NCiANCi0jaWZuZGVmIE1TX0NP
UkVETEwNCi1QeVZhck9iamVjdCAqDQotX1B5T2JqZWN0X05ld1Zhcih0cCwgc2l6ZSkNCi0J
UHlUeXBlT2JqZWN0ICp0cDsNCi0JaW50IHNpemU7DQotI2Vsc2UNCiBQeVZhck9iamVjdCAq
DQotX1B5T2JqZWN0X05ld1Zhcih0cCwgc2l6ZSwgb3ApDQorX1B5T2JqZWN0X1ZhckZyb21U
eXBlKHRwLCBzaXplLCBvcCkNCiAJUHlUeXBlT2JqZWN0ICp0cDsNCiAJaW50IHNpemU7DQog
CVB5VmFyT2JqZWN0ICpvcDsNCi0jZW5kaWYNCiB7DQotI2lmbmRlZiBNU19DT1JFRExMDQot
CVB5VmFyT2JqZWN0ICpvcCA9IChQeVZhck9iamVjdCAqKQ0KLQkJbWFsbG9jKHRwLT50cF9i
YXNpY3NpemUgKyBzaXplICogdHAtPnRwX2l0ZW1zaXplKTsNCi0jZW5kaWYNCiAJaWYgKG9w
ID09IE5VTEwpDQogCQlyZXR1cm4gKFB5VmFyT2JqZWN0ICopUHlFcnJfTm9NZW1vcnkoKTsN
CiAJb3AtPm9iX3R5cGUgPSB0cDsNCiAJb3AtPm9iX3NpemUgPSBzaXplOw0KIAlfUHlfTmV3
UmVmZXJlbmNlKChQeU9iamVjdCAqKW9wKTsNCiAJcmV0dXJuIG9wOw0KK30NCisNCitQeU9i
amVjdCAqDQorX1B5T2JqZWN0X05ldyh0cCkNCisJUHlUeXBlT2JqZWN0ICp0cDsNCit7DQor
CVB5T2JqZWN0ICpvcDsNCisjaWZkZWYgV0lUSF9DWUNMRV9HQw0KKwlpZiAoUFlfVFlQRUlT
R0ModHApKSB7DQorCQlQeUdDSW5mbyAqZzsNCisJCWcgPSAoUHlHQ0luZm8gKikgbWFsbG9j
KHNpemVvZigqZykgKyB0cC0+dHBfYmFzaWNzaXplKTsNCisJCWlmIChnID09IE5VTEwpIHsN
CisJCQlvcCA9IE5VTEw7DQorCQl9IGVsc2Ugew0KKwkJCW9wID0gUFlfR0NPQkooZyk7DQor
CQl9DQorCX0gZWxzZQ0KKyNlbmRpZiAvKiBXSVRIX0NZQ0xFX0dDICovDQorCXsNCisJCW9w
ID0gKFB5T2JqZWN0ICopIG1hbGxvYyh0cC0+dHBfYmFzaWNzaXplKTsNCisJfQ0KKwlyZXR1
cm4gX1B5T2JqZWN0X0Zyb21UeXBlKHRwLCBvcCk7DQorfQ0KKw0KK1B5VmFyT2JqZWN0ICoN
CitfUHlPYmplY3RfTmV3VmFyKHRwLCBzaXplKQ0KKwlQeVR5cGVPYmplY3QgKnRwOw0KKwlp
bnQgc2l6ZTsNCit7DQorCVB5VmFyT2JqZWN0ICpvcDsNCisjaWZkZWYgV0lUSF9DWUNMRV9H
Qw0KKwlpZiAoUFlfVFlQRUlTR0ModHApKSB7DQorCQlQeUdDSW5mbyAqZzsNCisJCWcgPSAo
UHlHQ0luZm8gKikgbWFsbG9jKHNpemVvZigqZykgKyANCisJCQkJCXRwLT50cF9iYXNpY3Np
emUgKw0KKwkJCQkJc2l6ZSAqIHRwLT50cF9pdGVtc2l6ZSk7DQorCQlpZiAoZyA9PSBOVUxM
KSB7DQorCQkJb3AgPSBOVUxMOw0KKwkJfSBlbHNlIHsNCisJCQlvcCA9IChQeVZhck9iamVj
dCAqKVBZX0dDT0JKKGcpOw0KKwkJfQ0KKwl9IGVsc2UNCisjZW5kaWYgLyogV0lUSF9DWUNM
RV9HQyAqLw0KKwl7DQorCQlvcCA9IChQeVZhck9iamVjdCAqKQ0KKwkJCW1hbGxvYyh0cC0+
dHBfYmFzaWNzaXplICsgc2l6ZSAqIHRwLT50cF9pdGVtc2l6ZSk7DQorCX0NCisJcmV0dXJu
IF9QeU9iamVjdF9WYXJGcm9tVHlwZSh0cCwgc2l6ZSwgb3ApOw0KK30NCisNCit2b2lkDQor
UHlPYmplY3RfRGVsKG9wKQ0KKwlQeU9iamVjdCAqb3A7DQorew0KKyNpZmRlZiBXSVRIX0NZ
Q0xFX0dDDQorCWlmIChQWV9JU0dDKG9wKSkgew0KKwkJb3AgPSAoUHlPYmplY3QgKilQWV9H
Q0lORk9fVU5TQUZFKG9wKTsNCisJfQ0KKyNlbmRpZg0KKwlmcmVlKG9wKTsNCiB9DQogDQog
aW50DQotLS0gUHl0aG9uLWN2cy9PYmplY3RzL3R1cGxlb2JqZWN0LmMJRnJpIE1hciAyNCAy
MjozMjozMCAyMDAwDQorKysgUHl0aG9uLWdjL09iamVjdHMvdHVwbGVvYmplY3QuYwlNb24g
QXByIDI0IDIxOjIxOjU5IDIwMDANCkBAIC04Miw4ICs4Miw4IEBADQogI2VuZGlmDQogI2lm
ZGVmIFB5X1RSQUNFX1JFRlMNCiAJCW9wLT5vYl90eXBlID0gJlB5VHVwbGVfVHlwZTsNCi0J
CW9wLT5vYl9zaXplID0gc2l6ZTsNCiAjZW5kaWYNCisJCV9QeV9OZXdSZWZlcmVuY2UoKFB5
T2JqZWN0ICopb3ApOw0KIAl9DQogCWVsc2UNCiAjZW5kaWYNCkBAIC05NywyMyArOTcsMjMg
QEANCiAJCQlyZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsNCiAJCX0NCiAJCTsNCi0JCW9wID0g
KFB5VHVwbGVPYmplY3QgKikgbWFsbG9jKG5ieXRlcyk7DQorCQlvcCA9IFB5T2JqZWN0X05l
d1ZhcihQeVR1cGxlT2JqZWN0LCAmUHlUdXBsZV9UeXBlLCBzaXplKTsNCiAJCWlmIChvcCA9
PSBOVUxMKQ0KIAkJCXJldHVybiBQeUVycl9Ob01lbW9yeSgpOw0KIA0KLQkJb3AtPm9iX3R5
cGUgPSAmUHlUdXBsZV9UeXBlOw0KLQkJb3AtPm9iX3NpemUgPSBzaXplOw0KIAl9DQogCWZv
ciAoaSA9IDA7IGkgPCBzaXplOyBpKyspDQogCQlvcC0+b2JfaXRlbVtpXSA9IE5VTEw7DQot
CV9QeV9OZXdSZWZlcmVuY2UoKFB5T2JqZWN0ICopb3ApOw0KKw0KICNpZiBNQVhTQVZFU0la
RSA+IDANCiAJaWYgKHNpemUgPT0gMCkgew0KIAkJZnJlZV90dXBsZXNbMF0gPSBvcDsNCi0J
CSsrbnVtX2ZyZWVfdHVwbGVzWzBdOw0KIAkJUHlfSU5DUkVGKG9wKTsJLyogZXh0cmEgSU5D
UkVGIHNvIHRoYXQgdGhpcyBpcyBuZXZlciBmcmVlZCAqLw0KIAl9DQogI2VuZGlmDQorI2lm
ZGVmIFdJVEhfQ1lDTEVfR0MNCisJUHlHQ19JbnNlcnQoKFB5T2JqZWN0ICopb3ApOw0KKyNl
bmRpZg0KIAlyZXR1cm4gKFB5T2JqZWN0ICopIG9wOw0KIH0NCiANCkBAIC0xODAsNiArMTgw
LDkgQEANCiAJcmVnaXN0ZXIgaW50IGk7DQogCXJlZ2lzdGVyIGludCBsZW4gPSAgb3AtPm9i
X3NpemU7DQogCVB5X1RSQVNIQ0FOX1NBRkVfQkVHSU4ob3ApDQorI2lmZGVmIFdJVEhfQ1lD
TEVfR0MNCisJUHlHQ19SZW1vdmUoKFB5T2JqZWN0ICopb3ApOw0KKyNlbmRpZg0KIAlpZiAo
bGVuID4gMCkgew0KIAkJaSA9IGxlbjsNCiAJCXdoaWxlICgtLWkgPj0gMCkNCkBAIC0xOTMs
NyArMTk2LDcgQEANCiAJCX0NCiAjZW5kaWYNCiAJfQ0KLQlmcmVlKChBTlkgKilvcCk7DQor
CVB5T2JqZWN0X0RlbCgoUHlPYmplY3QgKilvcCk7DQogZG9uZToNCiAJUHlfVFJBU0hDQU5f
U0FGRV9FTkQob3ApDQogfQ0KQEAgLTQwMSw2ICs0MDQsMjIgQEANCiAJcmV0dXJuIChQeU9i
amVjdCAqKSBucDsNCiB9DQogDQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCitzdGF0aWMgaW50
DQordHVwbGVyZWN1cnNlKFB5VHVwbGVPYmplY3QgKm8sIHZpc2l0cHJvYyB2aXNpdCwgdm9p
ZCAqY2xvc3VyZSkNCit7DQorCWludCBpOw0KKwlQeU9iamVjdCAqeDsNCisNCisJZm9yIChp
ID0gby0+b2Jfc2l6ZTsgLS1pID49IDA7ICkgew0KKwkJeCA9IG8tPm9iX2l0ZW1baV07DQor
CQlpZiAoeCAhPSBOVUxMICYmICF2aXNpdCh4LCBjbG9zdXJlKSkNCisJCQlyZXR1cm4gMDsN
CisJfQ0KKwlyZXR1cm4gMTsNCit9DQorI2VuZGlmIC8qIFdJVEhfQ1lDTEVfR0MgKi8NCisN
CiBzdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgdHVwbGVfYXNfc2VxdWVuY2UgPSB7DQogCShp
bnF1aXJ5KXR1cGxlbGVuZ3RoLCAvKnNxX2xlbmd0aCovDQogCShiaW5hcnlmdW5jKXR1cGxl
Y29uY2F0LCAvKnNxX2NvbmNhdCovDQpAQCAtNDI3LDYgKzQ0NiwxNiBAQA0KIAkmdHVwbGVf
YXNfc2VxdWVuY2UsCS8qdHBfYXNfc2VxdWVuY2UqLw0KIAkwLAkJLyp0cF9hc19tYXBwaW5n
Ki8NCiAJKGhhc2hmdW5jKXR1cGxlaGFzaCwgLyp0cF9oYXNoKi8NCisjaWZkZWYgV0lUSF9D
WUNMRV9HQw0KKwkwLAkJLyogdHBfY2FsbCAqLw0KKwkwLAkJLyogdHBfc3RyICovDQorCTAs
CQkvKiB0cF9nZXRhdHRybyAqLw0KKwkwLAkJLyogdHBfc2V0YXR0cm8gKi8NCisJMCwJCS8q
IHRwX2FzX2J1ZmZlciAqLw0KKwlQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hB
VkVfR0NJTkZPLAkvKiB0cF9mbGFncyAqLw0KKwkwLAkJLyogdHBfZG9jICovDQorCShyZWN1
cnNlcHJvYyl0dXBsZXJlY3Vyc2UsCS8qIHRwX3JlY3Vyc2UgKi8NCisjZW5kaWYNCiB9Ow0K
IA0KIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gYnJlYWtzIHRoZSBub3Rpb24gdGhhdCB0
dXBsZXMgYXJlIGltbXV0YWJsZToNCkBAIC00NDksNiArNDc4LDkgQEANCiAJaW50IGk7DQog
CWludCBzaXplZGlmZjsNCiANCisjaWZkZWYgV0lUSF9DWUNMRV9HQw0KKwlQeUdDSW5mbyAq
ZyA9IFBZX0dDSU5GTygqcHYpOyANCisjZW5kaWYNCiAJdiA9IChQeVR1cGxlT2JqZWN0ICop
ICpwdjsNCiAJaWYgKHYgPT0gTlVMTCB8fCAhUHlUdXBsZV9DaGVjayh2KSB8fCB2LT5vYl9y
ZWZjbnQgIT0gMSkgew0KIAkJKnB2ID0gMDsNCkBAIC00NzksNyArNTExLDYgQEANCiAJfQ0K
ICNpZiBNQVhTQVZFU0laRSA+IDANCiAJaWYgKG5ld3NpemUgPT0gMCAmJiBmcmVlX3R1cGxl
c1swXSkgew0KLQkJbnVtX2ZyZWVfdHVwbGVzWzBdLS07DQogCQlzdiA9IGZyZWVfdHVwbGVz
WzBdOw0KIAkJc3YtPm9iX3NpemUgPSAwOw0KIAkJUHlfSU5DUkVGKHN2KTsNCkBAIC01MTEs
OSArNTQyLDIyIEBADQogCX0gZWxzZSANCiAjZW5kaWYJCQ0KIAl7DQorI2lmZGVmIFdJVEhf
Q1lDTEVfR0MNCisJCVB5R0NfUmVtb3ZlKChQeU9iamVjdCAqKXYpOw0KKw0KKwkJZyA9IChQ
eUdDSW5mbyAqKSByZWFsbG9jKChjaGFyICopZywgc2l6ZW9mKCpnKSArIA0KKwkJCQlzaXpl
b2YoUHlUdXBsZU9iamVjdCkgKyANCisJCQkJbmV3c2l6ZSAqIHNpemVvZihQeU9iamVjdCAq
KSk7DQorCQlpZiAoZyA9PSBOVUxMKSB7DQorCQkJc3YgPT0gTlVMTDsNCisJCX0gZWxzZSB7
DQorCQkJc3YgPSAoUHlUdXBsZU9iamVjdCAqKSBQWV9HQ09CSihnKTsNCisJCX0NCisjZWxz
ZQ0KIAkJc3YgPSAoUHlUdXBsZU9iamVjdCAqKQ0KIAkJCXJlYWxsb2MoKGNoYXIgKil2LA0K
IAkJCQlzaXplb2YoUHlUdXBsZU9iamVjdCkgKyBuZXdzaXplICogc2l6ZW9mKFB5T2JqZWN0
ICopKTsNCisjZW5kaWYNCiAJCSpwdiA9IChQeU9iamVjdCAqKSBzdjsNCiAJCWlmIChzdiA9
PSBOVUxMKSB7DQogCQkJUHlNZW1fREVMKHYpOw0KQEAgLTUyMiw2ICs1NjYsOSBAQA0KIAkJ
fQ0KIAl9DQogCV9QeV9OZXdSZWZlcmVuY2UoKFB5T2JqZWN0ICopc3YpOw0KKyNpZmRlZiBX
SVRIX0NZQ0xFX0dDDQorCVB5R0NfSW5zZXJ0KChQeU9iamVjdCAqKXN2KTsNCisjZW5kaWYN
CiAJZm9yIChpID0gc3YtPm9iX3NpemU7IGkgPCBuZXdzaXplOyBpKyspDQogCQlzdi0+b2Jf
aXRlbVtpXSA9IE5VTEw7DQogCWlmIChsYXN0X2lzX3N0aWNreSAmJiBzaXplZGlmZiA+IDAp
IHsNCkBAIC01NTEsNyArNTk4LDExIEBADQogCQl3aGlsZSAocCkgew0KIAkJCXEgPSBwOw0K
IAkJCXAgPSAoUHlUdXBsZU9iamVjdCAqKShwLT5vYl9pdGVtWzBdKTsNCi0JCQlQeU1lbV9E
RUwocSk7DQorI2lmZGVmIFB5X1RSQUNFX1JFRlMNCisJCQlxLT5vYl90eXBlID0gICZQeVR1
cGxlX1R5cGU7DQorI2VuZGlmDQorCQkJUHlPYmplY3RfRGVsKChQeU9iamVjdCAqKXEpOw0K
KwkJCQ0KIAkJfQ0KIAl9DQogI2VuZGlmDQotLS0gUHl0aG9uLWN2cy9QQy9jb25maWcuYwlG
cmkgQXByICA3IDE1OjI3OjA0IDIwMDANCisrKyBQeXRob24tZ2MvUEMvY29uZmlnLmMJU2F0
IEFwciAgOCAwMzoxMjo1OCAyMDAwDQpAQCAtNDEsNiArNDEsOSBAQA0KIGV4dGVybiB2b2lk
IGluaXRiaW5hc2NpaSgpOw0KIGV4dGVybiB2b2lkIGluaXRjbWF0aCgpOw0KIGV4dGVybiB2
b2lkIGluaXRlcnJubygpOw0KKyNpZmRlZiBXSVRIX0NZQ0xFX0dDDQorZXh0ZXJuIHZvaWQg
aW5pdGdjKCk7DQorI2VuZGlmDQogZXh0ZXJuIHZvaWQgaW5pdGltYWdlb3AoKTsNCiBleHRl
cm4gdm9pZCBpbml0bWF0aCgpOw0KIGV4dGVybiB2b2lkIGluaXRtZDUoKTsNCkBAIC04MCw2
ICs4Myw5IEBADQogICAgICAgICB7ImJpbmFzY2lpIiwgaW5pdGJpbmFzY2lpfSwNCiAgICAg
ICAgIHsiY21hdGgiLCBpbml0Y21hdGh9LA0KICAgICAgICAgeyJlcnJubyIsIGluaXRlcnJu
b30sDQorI2lmZGVmIFdJVEhfQ1lDTEVfR0MNCisgICAgICAgIHsiZ2MiLCBpbml0Z2N9LA0K
KyNlbmRpZg0KICAgICAgICAgeyJpbWFnZW9wIiwgaW5pdGltYWdlb3B9LA0KICAgICAgICAg
eyJtYXRoIiwgaW5pdG1hdGh9LA0KICAgICAgICAgeyJtZDUiLCBpbml0bWQ1fSwNCi0tLSBQ
eXRob24tY3ZzL1BDL2NvbmZpZy5oCVRodSBNYXIgMzAgMjI6MDI6NTMgMjAwMA0KKysrIFB5
dGhvbi1nYy9QQy9jb25maWcuaAlTYXQgQXByICA4IDAyOjI0OjAwIDIwMDANCkBAIC0zODEs
NiArMzgxLDkgQEANCiAvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBHTlUgcmVh
ZGxpbmUgbGlicmFyeSAqLw0KIC8qICNkZWZpbmUgV0lUSF9SRUFETElORSAxICovDQogDQor
LyogRGVmaW5lIGlmIHlvdSB3YW50IGN5Y2xlIGdhcmJhZ2UgY29sbGVjdGlvbiAqLw0KKyNk
ZWZpbmUgV0lUSF9DWUNMRV9HQyAxDQorDQogLyogRGVmaW5lIGlmIHlvdSBoYXZlIGNsb2Nr
LiAgKi8NCiAvKiAjZGVmaW5lIEhBVkVfQ0xPQ0sgKi8NCiANCi0tLSBQeXRob24tY3ZzL01h
a2VmaWxlLmluCVN1biBBcHIgIDIgMjI6NTY6MjUgMjAwMA0KKysrIFB5dGhvbi1nYy9NYWtl
ZmlsZS5pbglTYXQgQXByICA4IDAxOjM4OjI1IDIwMDANCkBAIC00MDEsNyArNDAxLDcgQEAN
CiAJCSQoSU5TVEFMTF9EQVRBKSBNb2R1bGVzL01ha2VmaWxlICQoTElCUEwpL01ha2VmaWxl
DQogCQkkKElOU1RBTExfREFUQSkgTW9kdWxlcy9TZXR1cCAkKExJQlBMKS9TZXR1cA0KIAkJ
JChJTlNUQUxMX0RBVEEpIE1vZHVsZXMvU2V0dXAubG9jYWwgJChMSUJQTCkvU2V0dXAubG9j
YWwNCi0JCSQoSU5TVEFMTF9EQVRBKSBNb2R1bGVzL1NldHVwLnRocmVhZCAkKExJQlBMKS9T
ZXR1cC50aHJlYWQNCisJCSQoSU5TVEFMTF9EQVRBKSBNb2R1bGVzL1NldHVwLmF1dG8gJChM
SUJQTCkvU2V0dXAuYXV0bw0KIAkJJChJTlNUQUxMX1BST0dSQU0pICQoc3JjZGlyKS9Nb2R1
bGVzL21ha2VzZXR1cCAkKExJQlBMKS9tYWtlc2V0dXANCiAJCSQoSU5TVEFMTF9QUk9HUkFN
KSAkKHNyY2RpcikvaW5zdGFsbC1zaCAkKExJQlBMKS9pbnN0YWxsLXNoDQogCQkkKElOU1RB
TExfREFUQSkgJChzcmNkaXIpL01pc2MvTWFrZWZpbGUucHJlLmluICQoTElCUEwpL01ha2Vm
aWxlLnByZS5pbg0KLS0tIFB5dGhvbi1jdnMvY29uZmlnLmguaW4JRnJpIE1hciAyNCAyMjoz
MTo0MiAyMDAwDQorKysgUHl0aG9uLWdjL2NvbmZpZy5oLmluCVNhdCBBcHIgIDggMDE6Mzg6
MjUgMjAwMA0KQEAgLTIwNCw2ICsyMDQsOSBAQA0KICAgIChzaGFyZWQgbGlicmFyeSBwbHVz
IGFjY2Vzc29yeSBmaWxlcykuICovDQogI3VuZGVmIFdJVEhfTkVYVF9GUkFNRVdPUksNCiAN
CisvKiBEZWZpbmUgaWYgeW91IHdhbnQgY3ljbGUgZ2FyYmFnZSBjb2xsZWN0aW9uICovDQor
I3VuZGVmIFdJVEhfQ1lDTEVfR0MNCisNCiAvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFu
IG9mZl90LiAqLw0KICN1bmRlZiBTSVpFT0ZfT0ZGX1QNCiANCi0tLSBQeXRob24tY3ZzL2Nv
bmZpZ3VyZS5pbglTdW4gQXByICAyIDIyOjU2OjI1IDIwMDANCisrKyBQeXRob24tZ2MvY29u
ZmlndXJlLmluCVNhdCBBcHIgIDggMDE6Mzg6MjUgMjAwMA0KQEAgLTEwNjksMTAgKzEwNjks
MjEgQEANCiBmaV0sDQogW0FDX01TR19SRVNVTFQobm8pXSkNCiANCitBQ19TVUJTVChVU0Vf
R0NfTU9EVUxFKQ0KK1VTRV9HQ19NT0RVTEU9IiMiDQorDQorQUNfTVNHX0NIRUNLSU5HKGZv
ciAtLXdpdGgtY3ljbGUtZ2MpDQorQUNfQVJHX1dJVEgoY3ljbGUtZ2MsIFstLXdpdGgtY3lj
bGUtZ2MgICAgICAgICAgIGVuYWJsZSBnYXJiYWdlIGNvbGxlY3Rpb25dLCBbDQorQUNfTVNH
X1JFU1VMVCgkd2l0aHZhbCkNCitBQ19ERUZJTkUoV0lUSF9DWUNMRV9HQykNCitVU0VfR0Nf
TU9EVUxFPQ0KK10sDQorQUNfTVNHX1JFU1VMVChubykpDQorDQogIyBnZW5lcmF0ZSBvdXRw
dXQgZmlsZXMNCiBBQ19PVVRQVVQoTWFrZWZpbGUgXA0KICBPYmplY3RzL01ha2VmaWxlIFwN
CiAgUGFyc2VyL01ha2VmaWxlIFwNCiAgUHl0aG9uL01ha2VmaWxlIFwNCiAgTW9kdWxlcy9N
YWtlZmlsZS5wcmUgXA0KLSBNb2R1bGVzL1NldHVwLnRocmVhZCkNCisgTW9kdWxlcy9TZXR1
cC5hdXRvKQ0KLS0tIFB5dGhvbi1jdnMvTWlzYy9NYWtlZmlsZS5wcmUuaW4JV2VkIERlYyAg
OSAxMDowNTozMyAxOTk4DQorKysgUHl0aG9uLWdjL01pc2MvTWFrZWZpbGUucHJlLmluCVNh
dCBBcHIgIDggMDE6Mzg6MjUgMjAwMA0KQEAgLTE2OCw3ICsxNjgsNyBAQA0KIE1BS0VGSUxF
PQkkKExJQlBMKS9NYWtlZmlsZQ0KIENPTkZJR0M9CSQoTElCUEwpL2NvbmZpZy5jDQogQ09O
RklHQ0lOPQkkKExJQlBMKS9jb25maWcuYy5pbg0KLVNFVFVQPQkJJChMSUJQTCkvU2V0dXAu
dGhyZWFkICQoTElCUEwpL1NldHVwLmxvY2FsICQoTElCUEwpL1NldHVwDQorU0VUVVA9CQkk
KExJQlBMKS9TZXR1cC5hdXRvICQoTElCUEwpL1NldHVwLmxvY2FsICQoTElCUEwpL1NldHVw
DQogDQogU1lTTElCUz0JJChMSUJNKSAkKExJQkMpDQogDQotLS0gUHl0aG9uLWN2cy9Nb2R1
bGVzL01ha2VmaWxlLnByZS5pbglGcmkgTWFyIDI0IDIyOjMyOjI1IDIwMDANCisrKyBQeXRo
b24tZ2MvTW9kdWxlcy9NYWtlZmlsZS5wcmUuaW4JU2F0IEFwciAgOCAwMTozODoyNSAyMDAw
DQpAQCAtMTQ3LDEwICsxNDcsMTAgQEANCiAjIGdldHMgcmVtYWRlIGZyb20gc2NyYXRjaDsg
dGhpcyBlbnN1cmVzIHRvIHJlbW92ZSBtb2R1bGVzIHRoYXQgYXJlIG5vDQogIyBsb25nZXIg
cGVydGluZW50IChidXQgdGhhdCB3ZXJlIGluIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiku
DQogY29uZmlnLmMgTWFrZWZpbGU6IE1ha2VmaWxlLnByZSBjb25maWcuYy5pbiAkKE1BS0VT
RVRVUCkNCi1jb25maWcuYyBNYWtlZmlsZTogU2V0dXAudGhyZWFkIFNldHVwIFNldHVwLmxv
Y2FsDQorY29uZmlnLmMgTWFrZWZpbGU6IFNldHVwLmF1dG8gU2V0dXAgU2V0dXAubG9jYWwN
CiBjb25maWcuYyBNYWtlZmlsZToNCiAJCS1ybSAtZiAkKExJQlJBUlkpDQotCQkkKFNIRUxM
KSAkKE1BS0VTRVRVUCkgU2V0dXAudGhyZWFkIFNldHVwLmxvY2FsIFNldHVwDQorCQkkKFNI
RUxMKSAkKE1BS0VTRVRVUCkgU2V0dXAuYXV0byBTZXR1cC5sb2NhbCBTZXR1cA0KIA0KIGhh
c3NpZ25hbDoNCiAJCS1ybSAtZiBoYXNzaWduYWwNCi0tLSBQeXRob24tY3ZzL01vZHVsZXMv
U2V0dXAuaW4JU3VuIEFwciAgMiAyMjo1NjozNyAyMDAwDQorKysgUHl0aG9uLWdjL01vZHVs
ZXMvU2V0dXAuaW4JU2F0IEFwciAgOCAwMTozODoyNSAyMDAwDQpAQCAtMTAwLDcgKzEwMCw3
IEBADQogR0xIQUNLPS1EY2xlYXI9X19HTGNsZWFyDQogI2dsIGdsbW9kdWxlLmMgY2dlbnN1
cHBvcnQuYyAtSSQoc3JjZGlyKSAkKEdMSEFDSykgLWxnbCAtbFgxMQ0KIA0KLSMgVGhlIHRo
cmVhZCBtb2R1bGUgaXMgbm93IGF1dG9tYXRpY2FsbHkgZW5hYmxlZCwgc2VlIFNldHVwLnRo
cmVhZC4NCisjIFRoZSB0aHJlYWQgbW9kdWxlIGlzIG5vdyBhdXRvbWF0aWNhbGx5IGVuYWJs
ZWQsIHNlZSBTZXR1cC5hdXRvLg0KIA0KICMgUHVyZSBtb2R1bGUuICBDYW5ub3QgYmUgbGlu
a2VkIGR5bmFtaWNhbGx5Lg0KICMgLURXSVRIX1FVQU5USUZZLCAtRFdJVEhfUFVSSUZZLCBv
ciAtRFdJVEhfQUxMX1BVUkUNCi0tLSBQeXRob24tY3ZzL01vZHVsZXMvU2V0dXAuYXV0by5p
bg0KKysrIFB5dGhvbi1nYy9Nb2R1bGVzL1NldHVwLmF1dG8uaW4JU2F0IEFwciAgOCAwMToz
ODoyNSAyMDAwDQpAQCAtMCwwICsxLDE2IEBADQorIyBUaGlzIGZpbGUgaXMgdHJhbnNtb2dy
aWZpZWQgaW50byBTZXR1cC5hdXRvIGJ5IGNvbmZpZy5zdGF0dXMuICBJdHMNCisjIHB1cnBv
c2UgaXMgdG8gYXV0b21hdGljYWxseSBlbmFibGUgbW9kdWxlcyBnaXZlbiB3aGVuIGNlcnRh
aW4NCisjIGFyZ3VtZW50cyBhcmUgZ2l2ZW4gdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuICBJ
dCByZXBsYWNlcyB0aGUgb2xkDQorIyBTZXR1cC50aHJlYWQuaW4gZmlsZS4NCisNCisjIElu
Y2x1ZGUgdGhlIHRocmVhZCBtb2R1bGUgd2hlbiB0aGUgLS13aXRoLXRocmVhZCBhcmd1bWVu
dCBpcyBnaXZlbiB0bw0KKyMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuDQorIw0KKyMgKk5PVEUq
OiBpZiB0aGUgY29uZmlndXJlIHNjcmlwdCBkZWNpZGVzIGl0IGNhbid0IHN1cHBvcnQgdGhy
ZWFkcywgdGhlDQorIyB0aHJlYWQgbW9kdWxlIHdpbGwgc3RpbGwgYmUgZW5hYmxlZCBhbmQg
Y2F1c2UgY29tcGlsZSBlcnJvcnMuICBUaGUNCisjIHNvbHV0aW9uIGlzIG5vdCB0byB1c2Ug
LS13aXRoLXRocmVhZCBvbiBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0DQorIyB0aHJl
YWRzLg0KK0BVU0VfVEhSRUFEX01PRFVMRUB0aHJlYWQgdGhyZWFkbW9kdWxlLmMNCisNCisj
IEdhcmJhZ2UgY29sbGVjdGlvbiBlbmFibGVkIHdpdGggLS13aXRoLWN5Y2xlLWdjDQorQFVT
RV9HQ19NT0RVTEVAZ2MgZ2Ntb2R1bGUuYw0KLS0tIFB5dGhvbi1jdnMvTGliL3Rlc3QvdGVz
dF9nYy5weQ0KKysrIFB5dGhvbi1nYy9MaWIvdGVzdC90ZXN0X2djLnB5CVNhdCBBcHIgIDgg
MDM6MjU6MjUgMjAwMA0KQEAgLTAsMCArMSw5MCBAQA0KK2ltcG9ydCBnYw0KKw0KK2RlZiB0
ZXN0X2xpc3QoKToNCisgICAgbCA9IFtdDQorICAgIGwuYXBwZW5kKGwpDQorICAgIHByaW50
ICdsaXN0IDB4JXgnICUgaWQobCkNCisgICAgZ2MuY29sbGVjdCgpDQorICAgIGRlbCBsDQor
ICAgIGFzc2VydCBnYy5jb2xsZWN0KCkgPT0gMQ0KKw0KK2RlZiB0ZXN0X2RpY3QoKToNCisg
ICAgZCA9IHt9DQorICAgIGRbMV0gPSBkDQorICAgIHByaW50ICdkaWN0IDB4JXgnICUgaWQo
ZCkNCisgICAgZ2MuY29sbGVjdCgpDQorICAgIGRlbCBkDQorICAgIGFzc2VydCBnYy5jb2xs
ZWN0KCkgPT0gMQ0KKw0KK2RlZiB0ZXN0X3R1cGxlKCk6DQorICAgIGwgPSBbXQ0KKyAgICB0
ID0gKGwsKQ0KKyAgICBsLmFwcGVuZCh0KQ0KKyAgICBwcmludCAnbGlzdCAweCV4JyAlIGlk
KGwpDQorICAgIHByaW50ICd0dXBsZSAweCV4JyAlIGlkKHQpDQorICAgIGdjLmNvbGxlY3Qo
KQ0KKyAgICBkZWwgdA0KKyAgICBkZWwgbA0KKyAgICBhc3NlcnQgZ2MuY29sbGVjdCgpID09
IDINCisNCitkZWYgdGVzdF9jbGFzcygpOg0KKyAgICBjbGFzcyBBOg0KKyAgICAgICAgcGFz
cw0KKyAgICBBLmEgPSBBDQorICAgIHByaW50ICdjbGFzcyAweCV4JyAlIGlkKEEpDQorICAg
IGdjLmNvbGxlY3QoKQ0KKyAgICBkZWwgQQ0KKyAgICBhc3NlcnQgZ2MuY29sbGVjdCgpID09
IDINCisNCitkZWYgdGVzdF9pbnN0YW5jZSgpOg0KKyAgICBjbGFzcyBBOg0KKyAgICAgICAg
cGFzcw0KKyAgICBhID0gQSgpDQorICAgIGEuYSA9IGENCisgICAgcHJpbnQgcmVwcihhKQ0K
KyAgICBnYy5jb2xsZWN0KCkNCisgICAgZGVsIGENCisgICAgYXNzZXJ0IGdjLmNvbGxlY3Qo
KSA9PSAyDQorDQorZGVmIHRlc3RfZmluYWxpemVyKCk6DQorICAgIGNsYXNzIEE6DQorICAg
ICAgICBkZWYgX19kZWxfXyhzZWxmKTogcGFzcw0KKyAgICBjbGFzcyBCOg0KKyAgICAgICAg
cGFzcw0KKyAgICBhID0gQSgpDQorICAgIGEuYSA9IGENCisgICAgaWRfYSA9IGlkKGEpDQor
ICAgIGIgPSBCKCkNCisgICAgYi5iID0gYg0KKyAgICBwcmludCAnYScsIHJlcHIoYSkNCisg
ICAgcHJpbnQgJ2InLCByZXByKGIpDQorICAgIGdjLmNvbGxlY3QoKQ0KKyAgICBnYy5nYXJi
YWdlWzpdID0gW10NCisgICAgZGVsIGENCisgICAgZGVsIGINCisgICAgYXNzZXJ0IGdjLmNv
bGxlY3QoKSA9PSA0DQorICAgIGFzc2VydCBpZChnYy5nYXJiYWdlWzBdKSA9PSBpZF9hDQor
DQorZGVmIHRlc3RfZnVuY3Rpb24oKToNCisgICAgZCA9IHt9DQorICAgIGV4ZWMoImRlZiBm
KCk6IHBhc3NcbiIpIGluIGQNCisgICAgcHJpbnQgJ2RpY3QgMHgleCcgJSBpZChkKQ0KKyAg
ICBwcmludCAnZnVuYyAweCV4JyAlIGlkKGRbJ2YnXSkNCisgICAgZ2MuY29sbGVjdCgpDQor
ICAgIGRlbCBkDQorICAgIGFzc2VydCBnYy5jb2xsZWN0KCkgPT0gMg0KKw0KKw0KK2RlZiB0
ZXN0X2FsbCgpOg0KKyAgICBkZWJ1ZyA9IGdjLmdldF9kZWJ1ZygpDQorICAgIGdjLnNldF9k
ZWJ1ZyhnYy5ERUJVR19MRUFLIHwgZ2MuREVCVUdfU1RBVFMpDQorICAgIHRlc3RfbGlzdCgp
DQorICAgIHRlc3RfZGljdCgpDQorICAgIHRlc3RfdHVwbGUoKQ0KKyAgICB0ZXN0X2NsYXNz
KCkNCisgICAgdGVzdF9pbnN0YW5jZSgpDQorICAgIHRlc3RfZmluYWxpemVyKCkNCisgICAg
dGVzdF9mdW5jdGlvbigpDQorICAgIGdjLnNldF9kZWJ1ZyhkZWJ1ZykNCisNCit0ZXN0X2Fs
bCgpDQotLS0gUHl0aG9uLWN2cy9QQ2J1aWxkL3B5dGhvbjE2LmRzcAlGcmkgQXByICA3IDE1
OjI3OjA0IDIwMDANCisrKyBQeXRob24tZ2MvUENidWlsZC9weXRob24xNi5kc3AJU2F0IEFw
ciAgOCAwMjoyMjo0OCAyMDAwDQpAQCAtNjQ1LDYgKzY0NSwyMSBAQA0KICMgRW5kIFNvdXJj
ZSBGaWxlDQ0KICMgQmVnaW4gU291cmNlIEZpbGUNDQogDQ0KK1NPVVJDRT0uLlxNb2R1bGVz
XGdjbW9kdWxlLmMNDQorDQ0KKyFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbjE2IC0gV2luMzIg
UmVsZWFzZSINDQorDQ0KKyFFTFNFSUYgICIkKENGRykiID09ICJweXRob24xNiAtIFdpbjMy
IERlYnVnIg0NCisNDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbjE2IC0gV2luMzIg
QWxwaGEgRGVidWciDQ0KKw0NCishRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9uMTYgLSBX
aW4zMiBBbHBoYSBSZWxlYXNlIg0NCisNDQorIUVORElGIA0NCisNDQorIyBFbmQgU291cmNl
IEZpbGUNDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0NCisNDQogU09VUkNFPS4uXFB5dGhvblxn
ZXRhcmdzLmMNDQogDQ0KICFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbjE2IC0gV2luMzIgUmVs
ZWFzZSIN