[Bf-committers] Hello and a patch for your consideration

bf-committers@blender.org bf-committers@blender.org
Tue, 06 Apr 2004 19:03:04 -0500


--Message-Boundary-4262
Content-type: Multipart/Alternative; boundary="Alt-Boundary-18557.1732320"

--Alt-Boundary-18557.1732320
Content-type: text/plain; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Mail message body

Hello,

My name is Jeremy Wall. Some of you may know me from IRC as 
Zaphar_ps. I have been tinkering with the blender source code and 
finally got around to doing something productive in it. :-)

I noticed while poking around header_oops.c that the code to set 
the direction that menu's rolled out was the exact same code for all 
the menu's. I thought it might be useful to abstract that out into a 
single function. and reduce the number of lines you have to type 
when adding a menu to the header. I am attaching my patch to this 
email. All in all I added a new function to interface.c called 
uiBlockAutoDirectionSet which automatically 
decides whether the menu should go up or down. and 
changed the header_oops.c to use that function. 
Let me know if you like the idea or not. I tested 
it on my machine and had some friends test also.

Jeremy Wall aka Zaphar_ps

--Alt-Boundary-18557.1732320
Content-type: text/html; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Mail message body

<?xml  version="1.0" ?><html>
<head>
<title></title>
</head>
<body>
<div align="left"><font face="Arial"><span style="font-size:10pt">Hello,</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">My name is Jeremy Wall. Some of you may know me from IRC as 
Zaphar_ps. I have been tinkering with the blender source code and 
finally got around to doing something productive in it. :-)</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">I noticed while poking around header_oops.c that the code to set 
the direction that menu's rolled out was the exact same code for all 
the menu's. I thought it might be useful to abstract that out into a 
single function. and reduce the number of lines you have to type 
when adding a menu to the header. I am attaching my patch to this 
email. All in all I added a new function to interface.c called 
</span></font><font face="Courier New"><span style="font-size:10pt">uiBlockAutoDirectionSet which automatically 
decides whether the menu should go up or down. and 
changed the header_oops.c to use that function. 
Let me know if you like the idea or not. I tested 
it on my machine and had some friends test also.</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Courier New"><span style="font-size:10pt">Jeremy Wall aka Zaphar_ps</span></font></div>
</body>
</html>

--Alt-Boundary-18557.1732320--

--Message-Boundary-4262
Content-type: text/plain; charset=US-ASCII
Content-disposition: inline
Content-description: Attachment information.

The following section of this message contains a file attachment
prepared for transmission using the Internet MIME message format.
If you are using Pegasus Mail, or any other MIME-compliant system,
you should be able to save it or view it from within your mailer.
If you cannot, please ask your system administrator for assistance.

   ---- File information -----------
     File:  patch.txt
     Date:  6 Apr 2004, 18:53
     Size:  21338 bytes.
     Type:  Text

--Message-Boundary-4262
Content-type: Application/Octet-stream; name="patch.txt"; type=Text
Content-disposition: attachment; filename="patch.txt"
Content-transfer-encoding: BASE64

SW5kZXg6IHNvdXJjZS9ibGVuZGVyL2luY2x1ZGUvQklGX2ludGVyZmFjZS5oDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3QvYmYtYmxlbmRlci9ibGVuZGVyL3NvdXJjZS9i
bGVuZGVyL2luY2x1ZGUvQklGX2ludGVyZmFjZS5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yNg0KZGlmZiAtdSAtcjEuMjYgQklGX2ludGVyZmFjZS5oDQotLS0gc291cmNlL2JsZW5k
ZXIvaW5jbHVkZS9CSUZfaW50ZXJmYWNlLmgJOCBKYW4gMjAwNCAxOTo1MzoxNiAtMDAwMAkx
LjI2DQorKysgc291cmNlL2JsZW5kZXIvaW5jbHVkZS9CSUZfaW50ZXJmYWNlLmgJNiBBcHIg
MjAwNCAyMzo0ODo0NiAtMDAwMA0KQEAgLTI1Miw2ICsyNTIsNyBAQA0KIHZvaWQJdWlCbG9j
a1NldENvbAkJKHVpQmxvY2sgKmJsb2NrLCBpbnQgY29sKTsNCiB2b2lkCXVpQmxvY2tTZXRF
bWJvc3MJKHVpQmxvY2sgKmJsb2NrLCBpbnQgZW1ib3NzKTsNCiB2b2lkCXVpQmxvY2tTZXRE
aXJlY3Rpb24JKHVpQmxvY2sgKmJsb2NrLCBpbnQgZGlyZWN0aW9uKTsNCit2b2lkCXVpQmxv
Y2tBdXRvRGlyZWN0aW9uU2V0ICh1aUJsb2NrICpibG9jayk7DQogdm9pZCAJdWlCbG9ja0Zs
aXBPcmRlcgkodWlCbG9jayAqYmxvY2spOw0KIHZvaWQJdWlCbG9ja1NldEZsYWcJCSh1aUJs
b2NrICpibG9jaywgaW50IGZsYWcpOw0KIHZvaWQJdWlCbG9ja1NldFhPZnMJCSh1aUJsb2Nr
ICpibG9jaywgaW50IHhvZnMpOw0KSW5kZXg6IHNvdXJjZS9ibGVuZGVyL3NyYy9oZWFkZXJf
b29wcy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3QvYmYtYmxlbmRlci9i
bGVuZGVyL3NvdXJjZS9ibGVuZGVyL3NyYy9oZWFkZXJfb29wcy5jLHYNCnJldHJpZXZpbmcg
cmV2aXNpb24gMS43DQpkaWZmIC11IC1yMS43IGhlYWRlcl9vb3BzLmMNCi0tLSBzb3VyY2Uv
YmxlbmRlci9zcmMvaGVhZGVyX29vcHMuYwkyNiBNYXIgMjAwNCAwMToxMjo0NSAtMDAwMAkx
LjcNCisrKyBzb3VyY2UvYmxlbmRlci9zcmMvaGVhZGVyX29vcHMuYwk2IEFwciAyMDA0IDIz
OjQ4OjU1IC0wMDAwDQpAQCAtNTcsNiArNTcsNyBAQA0KICNpbmNsdWRlICJETkFfb29wc190
eXBlcy5oIg0KICNpbmNsdWRlICJETkFfc2NyZWVuX3R5cGVzLmgiDQogI2luY2x1ZGUgIkRO
QV9zcGFjZV90eXBlcy5oIg0KKyNpbmNsdWRlICJETkFfb2JqZWN0X3R5cGVzLmgiDQogDQog
I2luY2x1ZGUgIkJJRl9nbC5oIg0KICNpbmNsdWRlICJCSUZfaW50ZXJmYWNlLmgiDQpAQCAt
MTAxLDIwOSArMTAyLDI4MCBAQA0KIAkJYnJlYWs7DQogCX0NCiB9DQotDQotc3RhdGljIHZv
aWQgZG9fb29wc192aWV3bWVudSh2b2lkICphcmcsIGludCBldmVudCkNCi17DQotDQotCXN3
aXRjaChldmVudCkgew0KLQljYXNlIDA6IC8qIFNodWZmbGUgU2VsZWN0ZWQgQmxvY2tzICov
DQotCQlzaHVmZmxlX29vcHMoKTsNCi0JCWJyZWFrOw0KLQljYXNlIDE6IC8qIFNocmluayBT
ZWxlY3RlZCBCbG9ja3MgKi8NCi0gICAgCXNocmlua19vb3BzKCk7DQotICAgICAgICBicmVh
azsNCi0gICAgY2FzZSAyOiAvKiBWaWV3IEFsbCAqLw0KLQkJZG9fb29wc19idXR0b25zKEJf
T09QU0hPTUUpOw0KLQkJYnJlYWs7DQotCWNhc2UgMzogLyogTWF4aW1pemUgV2luZG93ICov
DQotCQkvKiB1c2luZyBldmVudCBCX0ZVTEwgKi8NCi0JCWJyZWFrOw0KLQl9DQotfQkJCQ0K
LQ0KLXN0YXRpYyB1aUJsb2NrICpvb3BzX3ZpZXdtZW51KHZvaWQgKmFyZ191bnVzZWQpDQot
ew0KLS8qCXN0YXRpYyBzaG9ydCB0b2c9MDsgKi8NCi0JdWlCbG9jayAqYmxvY2s7DQotCXNo
b3J0IHljbz0gMCwgbWVudXdpZHRoPTEyMDsNCi0JDQotCWJsb2NrPSB1aU5ld0Jsb2NrKCZj
dXJhcmVhLT51aWJsb2NrcywgIm9vcHNfdmlld21lbnUiLCBVSV9FTUJPU1NQLCBVSV9IRUxW
LCBjdXJhcmVhLT5oZWFkd2luKTsNCi0JdWlCbG9ja1NldEJ1dG1GdW5jKGJsb2NrLCBkb19v
b3BzX3ZpZXdtZW51LCBOVUxMKTsNCi0JCQ0KLQl1aURlZkljb25UZXh0QnV0KGJsb2NrLCBC
VVRNLCAxLCBJQ09OX0JMQU5LMSwgIlNodWZmbGUgU2VsZWN0ZWQgQmxvY2tzfFNoaWZ0IFMi
LCAwLCB5Y28tPTIwLCBtZW51d2lkdGgsIDE5LCBOVUxMLCAwLjAsIDAuMCwgMSwgMCwgIiIp
Ow0KLSAgICB1aURlZkljb25UZXh0QnV0KGJsb2NrLCBCVVRNLCAxLCBJQ09OX0JMQU5LMSwg
IlNocmluayBTZWxlY3RlZCBCbG9ja3N8QWx0IFMiLCAwLCB5Y28tPTIwLCBtZW51d2lkdGgs
IDE5LCBOVUxMLCAwLjAsIDAuMCwgMSwgMSwgIiIpOw0KKw0KK3N0YXRpYyB2b2lkIGRvX29v
cHNfdmlld21lbnUodm9pZCAqYXJnLCBpbnQgZXZlbnQpDQorew0KKw0KKwlzd2l0Y2goZXZl
bnQpIHsNCisJY2FzZSAwOiAvKiBTaHVmZmxlIFNlbGVjdGVkIEJsb2NrcyAqLw0KKwkJc2h1
ZmZsZV9vb3BzKCk7DQorCQlicmVhazsNCisJY2FzZSAxOiAvKiBTaHJpbmsgU2VsZWN0ZWQg
QmxvY2tzICovDQorICAgIAlzaHJpbmtfb29wcygpOw0KKyAgICAgICAgYnJlYWs7DQorICAg
IGNhc2UgMjogLyogVmlldyBBbGwgKi8NCisJCWRvX29vcHNfYnV0dG9ucyhCX09PUFNIT01F
KTsNCisJCWJyZWFrOw0KKwljYXNlIDM6IC8qIE1heGltaXplIFdpbmRvdyAqLw0KKwkJLyog
dXNpbmcgZXZlbnQgQl9GVUxMICovDQorCQlicmVhazsNCisJfQ0KK30NCisNCitzdGF0aWMg
dWlCbG9jayAqb29wc192aWV3bWVudSh2b2lkICphcmdfdW51c2VkKQ0KK3sNCisvKglzdGF0
aWMgc2hvcnQgdG9nPTA7ICovDQorCXVpQmxvY2sgKmJsb2NrOw0KKwlzaG9ydCB5Y289IDAs
IG1lbnV3aWR0aD0xMjA7DQorCQ0KKwlibG9jaz0gdWlOZXdCbG9jaygmY3VyYXJlYS0+dWli
bG9ja3MsICJvb3BzX3ZpZXdtZW51IiwgVUlfRU1CT1NTUCwgVUlfSEVMViwgY3VyYXJlYS0+
aGVhZHdpbik7DQorCXVpQmxvY2tTZXRCdXRtRnVuYyhibG9jaywgZG9fb29wc192aWV3bWVu
dSwgTlVMTCk7DQorCQkNCisJdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNP
Tl9CTEFOSzEsICJTaHVmZmxlIFNlbGVjdGVkIEJsb2Nrc3xTaGlmdCBTIiwgMCwgeWNvLT0y
MCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDEsIDAsICIiKTsNCisgICAgdWlE
ZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFOSzEsICJTaHJpbmsgU2Vs
ZWN0ZWQgQmxvY2tzfEFsdCBTIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwg
MC4wLCAwLjAsIDEsIDEsICIiKTsNCiANCiAJdWlEZWZCdXQoYmxvY2ssIFNFUFIsIDAsICIi
LCAgICAgICAgMCwgeWNvLT02LCBtZW51d2lkdGgsIDYsIE5VTEwsIDAuMCwgMC4wLCAwLCAw
LCAiIik7ICANCi0NCi0JdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9C
TEFOSzEsICJWaWV3IEFsbHxIb21lIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVM
TCwgMC4wLCAwLjAsIDEsIDIsICIiKTsNCi0JCQ0KLQlpZighY3VyYXJlYS0+ZnVsbCkgdWlE
ZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgQl9GVUxMLCBJQ09OX0JMQU5LMSwgIk1heGlt
aXplIFdpbmRvd3xDdHJsIFVwQXJyb3ciLCAwLCB5Y28tPTIwLCBtZW51d2lkdGgsIDE5LCBO
VUxMLCAwLjAsIDAuMCwgMCwgMywgIiIpOw0KLQllbHNlIHVpRGVmSWNvblRleHRCdXQoYmxv
Y2ssIEJVVE0sIEJfRlVMTCwgSUNPTl9CTEFOSzEsICJUaWxlIFdpbmRvd3xDdHJsIERvd25B
cnJvdyIsIDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAwLCAz
LCAiIik7DQotCQ0KLQlpZihjdXJhcmVhLT5oZWFkZXJ0eXBlPT1IRUFERVJUT1ApIHsNCi0J
CXVpQmxvY2tTZXREaXJlY3Rpb24oYmxvY2ssIFVJX0RPV04pOw0KLQl9DQotCWVsc2Ugew0K
LQkJdWlCbG9ja1NldERpcmVjdGlvbihibG9jaywgVUlfVE9QKTsNCi0JCXVpQmxvY2tGbGlw
T3JkZXIoYmxvY2spOw0KLQl9DQotDQotCXVpVGV4dEJvdW5kc0Jsb2NrKGJsb2NrLCA1MCk7
DQotCQ0KLQlyZXR1cm4gYmxvY2s7DQotfQ0KLQ0KLQ0KLXN0YXRpYyB2b2lkIGRvX29vcHNf
c2VsZWN0bWVudSh2b2lkICphcmcsIGludCBldmVudCkNCi17CQ0KLQ0KLQlzd2l0Y2goZXZl
bnQpDQotCXsNCi0JY2FzZSAwOiAvKiBCb3JkZXIgU2VsZWN0ICovDQotCQlib3JkZXJzZWxl
Y3Rfb29wcygpOw0KLQkJYnJlYWs7DQotCWNhc2UgMTogLyogU2VsZWN0L0Rlc2VsZWN0IEFs
bCAqLw0KLQkJc3dhcF9zZWxlY3RfYWxsX29vcHMoKTsNCi0JCWJyZWFrOw0KLQljYXNlIDI6
IC8qIExpbmtlZCB0byBTZWxlY3RlZCAqLw0KLQkJc2VsZWN0X2xpbmtlZF9vb3BzKCk7DQot
CQlicmVhazsNCi0JY2FzZSAzOiAvKiBVc2VycyBvZiBTZWxlY3RlZCAqLw0KLQkJc2VsZWN0
X2JhY2tsaW5rZWRfb29wcygpOw0KLQkJYnJlYWs7DQotCX0NCi19DQotDQotc3RhdGljIHVp
QmxvY2sgKm9vcHNfc2VsZWN0bWVudSh2b2lkICphcmdfdW51c2VkKQ0KLXsNCi0JdWlCbG9j
ayAqYmxvY2s7DQotCXNob3J0IHljbz0gMCwgbWVudXdpZHRoPTEyMDsNCi0NCi0JYmxvY2s9
IHVpTmV3QmxvY2soJmN1cmFyZWEtPnVpYmxvY2tzLCAib29wc19zZWxlY3RtZW51IiwgVUlf
RU1CT1NTUCwgVUlfSEVMViwgY3VyYXJlYS0+aGVhZHdpbik7DQotCXVpQmxvY2tTZXRCdXRt
RnVuYyhibG9jaywgZG9fb29wc19zZWxlY3RtZW51LCBOVUxMKTsNCi0NCi0JdWlEZWZJY29u
VGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFOSzEsICJCb3JkZXIgU2VsZWN0fEIi
LCAwLCB5Y28tPTIwLCBtZW51d2lkdGgsIDE5LCBOVUxMLCAwLjAsIDAuMCwgMCwgMCwgIiIp
Ow0KLQkNCi0JdWlEZWZCdXQoYmxvY2ssIFNFUFIsIDAsICIiLCAgICAgICAgMCwgeWNvLT02
LCBtZW51d2lkdGgsIDYsIE5VTEwsIDAuMCwgMC4wLCAwLCAwLCAiIik7DQotDQotCXVpRGVm
SWNvblRleHRCdXQoYmxvY2ssIEJVVE0sIDEsIElDT05fQkxBTksxLCAiU2VsZWN0L0Rlc2Vs
ZWN0IEFsbHxBIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAs
IDAsIDEsICIiKTsNCi0NCi0JdWlEZWZCdXQoYmxvY2ssIFNFUFIsIDAsICIiLCAgICAgICAg
MCwgeWNvLT02LCBtZW51d2lkdGgsIDYsIE5VTEwsIDAuMCwgMC4wLCAwLCAwLCAiIik7ICAg
IA0KLQ0KLQl1aURlZkljb25UZXh0QnV0KGJsb2NrLCBCVVRNLCAxLCBJQ09OX0JMQU5LMSwg
IkxpbmtlZCB0byBTZWxlY3RlZHxMIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVM
TCwgMC4wLCAwLjAsIDAsIDIsICIiKTsNCi0JdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVU
TSwgMSwgSUNPTl9CTEFOSzEsICJVc2VycyBvZiBTZWxlY3RlZHxTaGlmdCBMIiwgMCwgeWNv
LT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDAsIDMsICIiKTsNCi0NCi0J
aWYoY3VyYXJlYS0+aGVhZGVydHlwZT09SEVBREVSVE9QKSB7DQotCQl1aUJsb2NrU2V0RGly
ZWN0aW9uKGJsb2NrLCBVSV9ET1dOKTsNCi0JfQ0KLQllbHNlIHsNCi0JCXVpQmxvY2tTZXRE
aXJlY3Rpb24oYmxvY2ssIFVJX1RPUCk7DQotCQl1aUJsb2NrRmxpcE9yZGVyKGJsb2NrKTsN
Ci0JfQ0KLQ0KLQl1aVRleHRCb3VuZHNCbG9jayhibG9jaywgNTApOw0KLQ0KLQlyZXR1cm4g
YmxvY2s7DQotfQ0KLQ0KLQ0KLXZvaWQgb29wc19idXR0b25zKHZvaWQpDQotewkNCi0JU3Bh
Y2VPb3BzICpzb29wczsNCi0JT29wcyAqb29wczsNCi0JdWlCbG9jayAqYmxvY2s7DQotCXNo
b3J0IHhjbywgeG1heDsNCi0JY2hhciBuYWFtWzI1Nl07DQotDQotCXNvb3BzPSBjdXJhcmVh
LT5zcGFjZWRhdGEuZmlyc3Q7DQotDQotCXNwcmludGYobmFhbSwgImhlYWRlciAlZCIsIGN1
cmFyZWEtPmhlYWR3aW4pOw0KLQlibG9jaz0gdWlOZXdCbG9jaygmY3VyYXJlYS0+dWlibG9j
a3MsIG5hYW0sIFVJX0VNQk9TUywgVUlfSEVMViwgY3VyYXJlYS0+aGVhZHdpbik7DQotDQot
CWlmKGFyZWFfaXNfYWN0aXZlX2FyZWEoY3VyYXJlYSkpIHVpQmxvY2tTZXRDb2woYmxvY2ss
IFRIX0hFQURFUik7DQotCWVsc2UgdWlCbG9ja1NldENvbChibG9jaywgVEhfSEVBREVSREVT
RUwpOw0KLQ0KLQljdXJhcmVhLT5idXRzcGFjZXR5cGU9IFNQQUNFX09PUFM7DQotDQotCXhj
byA9IDg7DQotCQ0KLQl1aURlZkljb25UZXh0QnV0QyhibG9jaywgSUNPTlRFWFRST1csQl9O
RVdTUEFDRSwgSUNPTl9WSUVXM0QsIHdpbmRvd3R5cGVfcHVwKCksIHhjbywwLFhJQysxMCxZ
SUMsICYoY3VyYXJlYS0+YnV0c3BhY2V0eXBlKSwgMS4wLCBTUEFDRUlDT05NQVgsIDAsIDAs
ICJEaXNwbGF5cyBDdXJyZW50IFdpbmRvdyBUeXBlLiBDbGljayBmb3IgbWVudSBvZiBhdmFp
bGFibGUgdHlwZXMuIik7DQotDQotCXhjbys9IFhJQysxNDsNCi0NCi0JdWlCbG9ja1NldEVt
Ym9zcyhibG9jaywgVUlfRU1CT1NTTik7DQotCWlmKGN1cmFyZWEtPmZsYWcgJiBIRUFERVJf
Tk9fUFVMTERPV04pIHsNCi0JCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8MCwgQl9G
TElQSU5GT01FTlUsIElDT05fRElTQ0xPU1VSRV9UUklfUklHSFQsDQotCQkJCXhjbywyLFhJ
QyxZSUMtMiwNCi0JCQkJJihjdXJhcmVhLT5mbGFnKSwgMCwgMCwgMCwgMCwgIlNob3cgcHVs
bGRvd24gbWVudXMiKTsNCi0JfSBlbHNlIHsNCi0JCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRP
R3xCSVR8MCwgQl9GTElQSU5GT01FTlUsIElDT05fRElTQ0xPU1VSRV9UUklfRE9XTiwNCi0J
CQkJeGNvLDIsWElDLFlJQy0yLA0KLQkJCQkmKGN1cmFyZWEtPmZsYWcpLCAwLCAwLCAwLCAw
LCAiSGlkZSBwdWxsZG93biBtZW51cyIpOw0KLQl9DQotCXVpQmxvY2tTZXRFbWJvc3MoYmxv
Y2ssIFVJX0VNQk9TUyk7DQotCXhjbys9WElDOw0KLQ0KLQlpZigoY3VyYXJlYS0+ZmxhZyAm
IEhFQURFUl9OT19QVUxMRE9XTik9PTApIHsNCi0JLyogcHVsbCBkb3duIG1lbnVzICovDQot
CQl1aUJsb2NrU2V0RW1ib3NzKGJsb2NrLCBVSV9FTUJPU1NQKTsNCi0JDQotCQl4bWF4PSBH
ZXRCdXRTdHJpbmdMZW5ndGgoIlZpZXciKTsNCi0JCXVpRGVmQmxvY2tCdXQoYmxvY2ssIG9v
cHNfdmlld21lbnUsIE5VTEwsICJWaWV3IiwgeGNvLCAtMiwgeG1heC0zLCAyNCwgIiIpOw0K
LQkJeGNvKz0geG1heDsNCi0JCQ0KLQkJeG1heD0gR2V0QnV0U3RyaW5nTGVuZ3RoKCJTZWxl
Y3QiKTsNCi0JCXVpRGVmQmxvY2tCdXQoYmxvY2ssIG9vcHNfc2VsZWN0bWVudSwgTlVMTCwg
IlNlbGVjdCIsIHhjbywgLTIsIHhtYXgtMywgMjQsICIiKTsNCi0JCXhjbys9IHhtYXg7DQot
DQotCX0NCi0NCi0JdWlCbG9ja1NldEVtYm9zcyhibG9jaywgVUlfRU1CT1NTWCk7DQorDQor
CXVpRGVmSWNvblRleHRCdXQoYmxvY2ssIEJVVE0sIDEsIElDT05fQkxBTksxLCAiVmlldyBB
bGx8SG9tZSIsIDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAx
LCAyLCAiIik7DQorCQkNCisJaWYoIWN1cmFyZWEtPmZ1bGwpIHVpRGVmSWNvblRleHRCdXQo
YmxvY2ssIEJVVE0sIEJfRlVMTCwgSUNPTl9CTEFOSzEsICJNYXhpbWl6ZSBXaW5kb3d8Q3Ry
bCBVcEFycm93IiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAs
IDAsIDMsICIiKTsNCisJZWxzZSB1aURlZkljb25UZXh0QnV0KGJsb2NrLCBCVVRNLCBCX0ZV
TEwsIElDT05fQkxBTksxLCAiVGlsZSBXaW5kb3d8Q3RybCBEb3duQXJyb3ciLCAwLCB5Y28t
PTIwLCBtZW51d2lkdGgsIDE5LCBOVUxMLCAwLjAsIDAuMCwgMCwgMywgIiIpOw0KKwkNCisJ
dWlCbG9ja0F1dG9EaXJlY3Rpb25TZXQoYmxvY2spOw0KKwkNCisJdWlUZXh0Qm91bmRzQmxv
Y2soYmxvY2ssIDUwKTsNCisJDQorCXJldHVybiBibG9jazsNCit9DQorDQorDQorc3RhdGlj
IHZvaWQgZG9fb29wc19zZWxlY3RtZW51KHZvaWQgKmFyZywgaW50IGV2ZW50KQ0KK3sJDQor
DQorCXN3aXRjaChldmVudCkNCisJew0KKwljYXNlIDA6IC8qIEJvcmRlciBTZWxlY3QgKi8N
CisJCWJvcmRlcnNlbGVjdF9vb3BzKCk7DQorCQlicmVhazsNCisJY2FzZSAxOiAvKiBTZWxl
Y3QvRGVzZWxlY3QgQWxsICovDQorCQlzd2FwX3NlbGVjdF9hbGxfb29wcygpOw0KKwkJYnJl
YWs7DQorCWNhc2UgMjogLyogTGlua2VkIHRvIFNlbGVjdGVkICovDQorCQlzZWxlY3RfbGlu
a2VkX29vcHMoKTsNCisJCWJyZWFrOw0KKwljYXNlIDM6IC8qIFVzZXJzIG9mIFNlbGVjdGVk
ICovDQorCQlzZWxlY3RfYmFja2xpbmtlZF9vb3BzKCk7DQorCQlicmVhazsNCisJfQ0KK30N
CisNCisNCitzdGF0aWMgdWlCbG9jayAqb29wc19zZWxlY3RtZW51KHZvaWQgKmFyZ191bnVz
ZWQpDQorew0KKwl1aUJsb2NrICpibG9jazsNCisJc2hvcnQgeWNvPSAwLCBtZW51d2lkdGg9
MTIwOw0KKwkNCisJYmxvY2s9IHVpTmV3QmxvY2soJmN1cmFyZWEtPnVpYmxvY2tzLCAib29w
c19zZWxlY3RtZW51IiwgVUlfRU1CT1NTUCwgVUlfSEVMViwgY3VyYXJlYS0+aGVhZHdpbik7
DQorCXVpQmxvY2tTZXRCdXRtRnVuYyhibG9jaywgZG9fb29wc19zZWxlY3RtZW51LCBOVUxM
KTsNCisNCisJdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFOSzEs
ICJCb3JkZXIgU2VsZWN0fEIiLCAwLCB5Y28tPTIwLCBtZW51d2lkdGgsIDE5LCBOVUxMLCAw
LjAsIDAuMCwgMCwgMCwgIiIpOw0KKwkNCisJdWlEZWZCdXQoYmxvY2ssIFNFUFIsIDAsICIi
LCAgICAgICAgMCwgeWNvLT02LCBtZW51d2lkdGgsIDYsIE5VTEwsIDAuMCwgMC4wLCAwLCAw
LCAiIik7DQorDQorCXVpRGVmSWNvblRleHRCdXQoYmxvY2ssIEJVVE0sIDEsIElDT05fQkxB
TksxLCAiU2VsZWN0L0Rlc2VsZWN0IEFsbHxBIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAx
OSwgTlVMTCwgMC4wLCAwLjAsIDAsIDEsICIiKTsNCisNCisJdWlEZWZCdXQoYmxvY2ssIFNF
UFIsIDAsICIiLCAgICAgICAgMCwgeWNvLT02LCBtZW51d2lkdGgsIDYsIE5VTEwsIDAuMCwg
MC4wLCAwLCAwLCAiIik7ICAgIA0KKw0KKwl1aURlZkljb25UZXh0QnV0KGJsb2NrLCBCVVRN
LCAxLCBJQ09OX0JMQU5LMSwgIkxpbmtlZCB0byBTZWxlY3RlZHxMIiwgMCwgeWNvLT0yMCwg
bWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDAsIDIsICIiKTsNCisJdWlEZWZJY29u
VGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFOSzEsICJVc2VycyBvZiBTZWxlY3Rl
ZHxTaGlmdCBMIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAs
IDAsIDMsICIiKTsNCisNCisJdWlCbG9ja0F1dG9EaXJlY3Rpb25TZXQoYmxvY2spOw0KKwkN
CisJdWlUZXh0Qm91bmRzQmxvY2soYmxvY2ssIDUwKTsNCisNCisJcmV0dXJuIGJsb2NrOw0K
K30NCisNCisvKiBoYW5kbGUgYWRkbWVudSBldmVudHMgaGVyZSAqLw0KK3N0YXRpYyB2b2lk
IGRvX29vcHNfQWRkbWVudSh2b2lkICphcmcsIGludCBldmVudCkNCit7DQorCXN3aXRjaChl
dmVudCkgew0KKwljYXNlIDA6IC8qIE1lc2ggICovDQorCQlpZiAoRy5vYmVkaXQpIGV4aXRf
ZWRpdG1vZGUoMSk7IC8qdW5saWtlbHkgYnV0IGp1c3QgaW4gY2FzZSAqLw0KKwkJRy5vYmVk
aXQgPSBhZGRfb2JqZWN0KE9CX01FU0gpOyAvKmNyZWF0ZSBhbiBlbXB0eSBtZXNoIG9iamVj
dCAqLw0KKwkJcHJpbnRmICgiSmVyZW15IC0gd2UganVzdCBhZGRlZCBhIE1lc2ggb2JqZWN0
XG4iKTsNCisJCWJyZWFrOw0KKwljYXNlIDE6IC8qIFN1cmYgKi8NCisgICAgCWlmIChHLm9i
ZWRpdCkgZXhpdF9lZGl0bW9kZSgxKTsgLyp1bmxpa2VseSBidXQganVzdCBpbiBjYXNlICov
DQorCQlHLm9iZWRpdCA9IGFkZF9vYmplY3QoT0JfU1VSRik7IC8qY3JlYXRlIGFuIGVtcHR5
IHN1cmYgb2JqZWN0ICovDQorCQlwcmludGYgKCJKZXJlbXkgLSB3ZSBqdXN0IGFkZGVkIGEg
U3VyZmFjZSBvYmplY3RcbiIpOw0KKwkJYnJlYWs7DQorCWNhc2UgMjogLyogTUJhbGwgKi8N
CisgICAgCWlmIChHLm9iZWRpdCkgZXhpdF9lZGl0bW9kZSgxKTsgLyp1bmxpa2VseSBidXQg
anVzdCBpbiBjYXNlICovDQorCQlHLm9iZWRpdCA9IGFkZF9vYmplY3QoT0JfTUJBTEwpOyAv
KmNyZWF0ZSBhbiBlbXB0eSBNQmFsbCBvYmplY3QgKi8NCisJCXByaW50ZiAoIkplcmVteSAt
IHdlIGp1c3QgYWRkZWQgYSBNZXRhYmFsbCBvYmplY3RcbiIpOw0KKwkJYnJlYWs7DQorCWNh
c2UgMzogLyogQ3VydmUgKi8NCisgICAgCWlmIChHLm9iZWRpdCkgZXhpdF9lZGl0bW9kZSgx
KTsgLyp1bmxpa2VseSBidXQganVzdCBpbiBjYXNlICovDQorCQlHLm9iZWRpdCA9IGFkZF9v
YmplY3QoT0JfQ1VSVkUpOyAvKmNyZWF0ZSBhbiBlbXB0eSBDdXJ2ZSBvYmplY3QgKi8NCisJ
CXByaW50ZiAoIkplcmVteSAtIHdlIGp1c3QgYWRkZWQgYSBDdXJ2ZSBvYmplY3RcbiIpOw0K
KwkJYnJlYWs7DQorCWNhc2UgNDogLyogTGFtcCAqLw0KKyAgICAJaWYgKEcub2JlZGl0KSBl
eGl0X2VkaXRtb2RlKDEpOyAvKnVubGlrZWx5IGJ1dCBqdXN0IGluIGNhc2UgKi8NCisJCUcu
b2JlZGl0ID0gYWRkX29iamVjdChPQl9MQU1QKTsgLypjcmVhdGUgYW4gZW1wdHkgTGFtcCBv
YmplY3QgKi8NCisJCWV4aXRfZWRpdG1vZGUoMSk7DQorCQlwcmludGYgKCJKZXJlbXkgLSB3
ZSBqdXN0IGFkZGVkIGEgTGFtcCBvYmplY3RcbiIpOw0KKwkJYnJlYWs7DQorCWNhc2UgNTog
LyogQ2FtZXJhICovDQorICAgIAlpZiAoRy5vYmVkaXQpIGV4aXRfZWRpdG1vZGUoMSk7IC8q
dW5saWtlbHkgYnV0IGp1c3QgaW4gY2FzZSAqLw0KKwkJRy5vYmVkaXQgPSBhZGRfb2JqZWN0
KE9CX0NBTUVSQSk7IC8qY3JlYXRlIGFuIGVtcHR5IENhbWVyYSBvYmplY3QgKi8NCisJCWV4
aXRfZWRpdG1vZGUoMSk7DQorCQlwcmludGYgKCJKZXJlbXkgLSB3ZSBqdXN0IGFkZGVkIGEg
Q2FtZXJhIG9iamVjdFxuIik7DQorCQlicmVhazsNCisJY2FzZSA2OiAvKiBBcm1hdHVyZSAq
Lw0KKyAgICAJaWYgKEcub2JlZGl0KSBleGl0X2VkaXRtb2RlKDEpOyAvKnVubGlrZWx5IGJ1
dCBqdXN0IGluIGNhc2UgKi8NCisJCUcub2JlZGl0ID0gYWRkX29iamVjdChPQl9BUk1BVFVS
RSk7IC8qY3JlYXRlIGFuIGVtcHR5IEFybWF0dXJlIG9iamVjdCAqLw0KKwkJcHJpbnRmICgi
SmVyZW15IC0gd2UganVzdCBhZGRlZCBhbiBBcm1hdHVyZSBvYmplY3RcbiIpOw0KKwkJYnJl
YWs7DQorCWNhc2UgNzogLyogTGF0dGljZSAqLw0KKyAgICAJaWYgKEcub2JlZGl0KSBleGl0
X2VkaXRtb2RlKDEpOyAvKnVubGlrZWx5IGJ1dCBqdXN0IGluIGNhc2UgKi8NCisJCUcub2Jl
ZGl0ID0gYWRkX29iamVjdChPQl9MQVRUSUNFKTsgLypjcmVhdGUgYW4gZW1wdHkgTGF0dGlj
ZSBvYmplY3QgKi8NCisJCXByaW50ZiAoIkplcmVteSAtIHdlIGp1c3QgYWRkZWQgYSBMYXR0
aWNlIG9iamVjdFxuIik7DQorCQlicmVhazsNCisJCQ0KKwl9DQorfQ0KKw0KKw0KKy8qIGNy
ZWF0ZSBvdXIgb29vcHMgYWRkbWVudSBibG9jayAqLwkJDQorc3RhdGljIHVpQmxvY2sgKm9v
cHNfQWRkbWVudSh2b2lkICphcmdfdW51c2VkKQ0KK3sNCisJdWlCbG9jayAqYmxvY2s7DQor
CXNob3J0IHljbz0gMCwgbWVudXdpZHRoPTEyMDsNCisJDQorCWJsb2NrPSB1aU5ld0Jsb2Nr
KCZjdXJhcmVhLT51aWJsb2NrcywgIm9vcHNfQWRkbWVudSIsIFVJX0VNQk9TU1AsIFVJX0hF
TFYsIGN1cmFyZWEtPmhlYWR3aW4pOw0KKwl1aUJsb2NrU2V0QnV0bUZ1bmMoYmxvY2ssIGRv
X29vcHNfQWRkbWVudSwgTlVMTCk7IC8qIGFzc2lnbnMgdGhlIGV2ZW50IGhhbmRsZXIgZm9y
IG91ciBhZGQgbWVudSkgKi8NCisJdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwg
SUNPTl9CTEFOSzEsICJBZGQgTWVzaCIsIDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5V
TEwsIDAuMCwgMC4wLCAxLCAwLCAiIik7IC8qIGFkZHMgb3VyIGZpcnN0IGJ1dHRvbiAqLw0K
Kwl1aURlZkljb25UZXh0QnV0KGJsb2NrLCBCVVRNLCAxLCBJQ09OX0JMQU5LMSwgIkFkZCBT
dXJmIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDEsIDEs
ICIiKTsgLyogYWRkcyBvdXIgZmlyc3QgYnV0dG9uICovDQorCXVpRGVmSWNvblRleHRCdXQo
YmxvY2ssIEJVVE0sIDEsIElDT05fQkxBTksxLCAiQWRkIE1CYWxsIiwgMCwgeWNvLT0yMCwg
bWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDEsIDIsICIiKTsgLyogYWRkcyBvdXIg
Zmlyc3QgYnV0dG9uICovDQorCXVpRGVmSWNvblRleHRCdXQoYmxvY2ssIEJVVE0sIDEsIElD
T05fQkxBTksxLCAiQWRkIEN1cnZlIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVM
TCwgMC4wLCAwLjAsIDEsIDMsICIiKTsgLyogYWRkcyBvdXIgZmlyc3QgYnV0dG9uICovDQor
CQ0KKwl1aURlZkJ1dChibG9jaywgU0VQUiwgMCwgIiIsICAgICAgICAwLCB5Y28tPTYsIG1l
bnV3aWR0aCwgNiwgTlVMTCwgMC4wLCAwLjAsIDAsIDAsICIiKTsNCisJdWlEZWZJY29uVGV4
dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFOSzEsICJBZGQgTGFtcCIsIDAsIHljby09
MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAxLCA0LCAiIik7IC8qIGFkZHMg
b3VyIGZpcnN0IGJ1dHRvbiAqLw0KKwl1aURlZkljb25UZXh0QnV0KGJsb2NrLCBCVVRNLCAx
LCBJQ09OX0JMQU5LMSwgIkFkZCBDYW1lcmEiLCAwLCB5Y28tPTIwLCBtZW51d2lkdGgsIDE5
LCBOVUxMLCAwLjAsIDAuMCwgMSwgNSwgIiIpOyAvKiBhZGRzIG91ciBmaXJzdCBidXR0b24g
Ki8NCisJDQorCXVpRGVmQnV0KGJsb2NrLCBTRVBSLCAwLCAiIiwgICAgICAgIDAsIHljby09
NiwgbWVudXdpZHRoLCA2LCBOVUxMLCAwLjAsIDAuMCwgMCwgMCwgIiIpOw0KKwl1aURlZklj
b25UZXh0QnV0KGJsb2NrLCBCVVRNLCAxLCBJQ09OX0JMQU5LMSwgIkFkZCBBcm1hdHVyZSIs
IDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAxLCA2LCAiIik7
IC8qIGFkZHMgb3VyIGZpcnN0IGJ1dHRvbiAqLw0KKwkNCisJdWlCbG9ja0F1dG9EaXJlY3Rp
b25TZXQoYmxvY2spOw0KKwkNCisJdWlUZXh0Qm91bmRzQmxvY2soYmxvY2ssIDUwKTsNCisJ
DQorCXJldHVybiBibG9jazsgICAgDQorfQ0KKw0KK3ZvaWQgb29wc19idXR0b25zKHZvaWQp
DQorewkNCisJU3BhY2VPb3BzICpzb29wczsNCisJT29wcyAqb29wczsNCisJdWlCbG9jayAq
YmxvY2s7DQorCXNob3J0IHhjbywgeG1heDsNCisJY2hhciBuYWFtWzI1Nl07DQorDQorCXNv
b3BzPSBjdXJhcmVhLT5zcGFjZWRhdGEuZmlyc3Q7DQorDQorCXNwcmludGYobmFhbSwgImhl
YWRlciAlZCIsIGN1cmFyZWEtPmhlYWR3aW4pOw0KKwlibG9jaz0gdWlOZXdCbG9jaygmY3Vy
YXJlYS0+dWlibG9ja3MsIG5hYW0sIFVJX0VNQk9TUywgVUlfSEVMViwgY3VyYXJlYS0+aGVh
ZHdpbik7DQorDQorCWlmKGFyZWFfaXNfYWN0aXZlX2FyZWEoY3VyYXJlYSkpIHVpQmxvY2tT
ZXRDb2woYmxvY2ssIFRIX0hFQURFUik7DQorCWVsc2UgdWlCbG9ja1NldENvbChibG9jaywg
VEhfSEVBREVSREVTRUwpOw0KKw0KKwljdXJhcmVhLT5idXRzcGFjZXR5cGU9IFNQQUNFX09P
UFM7DQorDQorCXhjbyA9IDg7DQorCQ0KKwl1aURlZkljb25UZXh0QnV0QyhibG9jaywgSUNP
TlRFWFRST1csQl9ORVdTUEFDRSwgSUNPTl9WSUVXM0QsIHdpbmRvd3R5cGVfcHVwKCksIHhj
bywwLFhJQysxMCxZSUMsICYoY3VyYXJlYS0+YnV0c3BhY2V0eXBlKSwgMS4wLCBTUEFDRUlD
T05NQVgsIDAsIDAsICJEaXNwbGF5cyBDdXJyZW50IFdpbmRvdyBUeXBlLiBDbGljayBmb3Ig
bWVudSBvZiBhdmFpbGFibGUgdHlwZXMuIik7DQorDQorCXhjbys9IFhJQysxNDsNCisNCisJ
dWlCbG9ja1NldEVtYm9zcyhibG9jaywgVUlfRU1CT1NTTik7DQorCWlmKGN1cmFyZWEtPmZs
YWcgJiBIRUFERVJfTk9fUFVMTERPV04pIHsNCisJCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRP
R3xCSVR8MCwgQl9GTElQSU5GT01FTlUsIElDT05fRElTQ0xPU1VSRV9UUklfUklHSFQsDQor
CQkJCXhjbywyLFhJQyxZSUMtMiwNCisJCQkJJihjdXJhcmVhLT5mbGFnKSwgMCwgMCwgMCwg
MCwgIlNob3cgcHVsbGRvd24gbWVudXMiKTsNCisJfSBlbHNlIHsNCisJCXVpRGVmSWNvbkJ1
dFMoYmxvY2ssIFRPR3xCSVR8MCwgQl9GTElQSU5GT01FTlUsIElDT05fRElTQ0xPU1VSRV9U
UklfRE9XTiwNCisJCQkJeGNvLDIsWElDLFlJQy0yLA0KKwkJCQkmKGN1cmFyZWEtPmZsYWcp
LCAwLCAwLCAwLCAwLCAiSGlkZSBwdWxsZG93biBtZW51cyIpOw0KKwl9DQorCXVpQmxvY2tT
ZXRFbWJvc3MoYmxvY2ssIFVJX0VNQk9TUyk7DQorCXhjbys9WElDOw0KKw0KKwlpZigoY3Vy
YXJlYS0+ZmxhZyAmIEhFQURFUl9OT19QVUxMRE9XTik9PTApIHsNCisJLyogcHVsbCBkb3du
IG1lbnVzICovDQorCQl1aUJsb2NrU2V0RW1ib3NzKGJsb2NrLCBVSV9FTUJPU1NQKTsNCisJ
DQorCQl4bWF4PSBHZXRCdXRTdHJpbmdMZW5ndGgoIlZpZXciKTsNCisJCXVpRGVmQmxvY2tC
dXQoYmxvY2ssIG9vcHNfdmlld21lbnUsIE5VTEwsICJWaWV3IiwgeGNvLCAtMiwgeG1heC0z
LCAyNCwgIiIpOw0KKwkJeGNvKz0geG1heDsNCisJCQ0KKwkJeG1heD0gR2V0QnV0U3RyaW5n
TGVuZ3RoKCJTZWxlY3QiKTsNCisJCXVpRGVmQmxvY2tCdXQoYmxvY2ssIG9vcHNfc2VsZWN0
bWVudSwgTlVMTCwgIlNlbGVjdCIsIHhjbywgLTIsIHhtYXgtMywgMjQsICIiKTsNCisJCXhj
bys9IHhtYXg7DQorCQkNCisJCS8qIGFkZCBvdXIgYWRkIG1lbnUgdG8gdGhlIGhlYWRlciAq
Lw0KKwkJeG1heD0gR2V0QnV0U3RyaW5nTGVuZ3RoKCJBZGQgT2JqZWN0Iik7DQorCQl1aURl
ZkJsb2NrQnV0KGJsb2NrLCBvb3BzX0FkZG1lbnUsIE5VTEwsICJBZGQgT2JqZWN0IiwgeGNv
LCAtMiwgeG1heC0zLCAyNCwgIiIpOw0KKwkJeGNvKz0geG1heDsNCisNCisJfQ0KKw0KKwl1
aUJsb2NrU2V0RW1ib3NzKGJsb2NrLCBVSV9FTUJPU1NYKTsNCiANCiAJeGNvKz0gODsNCi0J
DQorCQ0KIAkvKiBaT09NIGFuZCBCT1JERVIgKi8NCi0gICAgdWlCbG9ja0JlZ2luQWxpZ24o
YmxvY2spOw0KLQl1aURlZkljb25CdXRJKGJsb2NrLCBUT0csIEJfVklFVzJEWk9PTSwgSUNP
Tl9WSUVXWk9PTSwJKHNob3J0KSh4Y28pLDAsWElDLFlJQywgJnZpZXdtb3ZldGVtcCwgMCwg
MCwgMCwgMCwgIlpvb21zIHZpZXcgKEN0cmwgTWlkZGxlTW91c2UpIik7DQotCXVpRGVmSWNv
bkJ1dChibG9jaywgQlVULCBCX0lQT0JPUkRFUiwgSUNPTl9CT1JERVJNT1ZFLAkoc2hvcnQp
KHhjbys9WElDKSwwLFhJQyxZSUMsIDAsIDAsIDAsIDAsIDAsICJab29tcyB2aWV3IHRvIGFy
ZWEiKTsNCi0gICAgdWlCbG9ja0VuZEFsaWduKGJsb2NrKTsNCi0gICAgDQorICAgIHVpQmxv
Y2tCZWdpbkFsaWduKGJsb2NrKTsNCisJdWlEZWZJY29uQnV0SShibG9jaywgVE9HLCBCX1ZJ
RVcyRFpPT00sIElDT05fVklFV1pPT00sCShzaG9ydCkoeGNvKSwwLFhJQyxZSUMsICZ2aWV3
bW92ZXRlbXAsIDAsIDAsIDAsIDAsICJab29tcyB2aWV3IChDdHJsIE1pZGRsZU1vdXNlKSIp
Ow0KKwl1aURlZkljb25CdXQoYmxvY2ssIEJVVCwgQl9JUE9CT1JERVIsIElDT05fQk9SREVS
TU9WRSwJKHNob3J0KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAwLCAwLCAwLCAwLCAwLCAiWm9v
bXMgdmlldyB0byBhcmVhIik7DQorICAgIHVpQmxvY2tFbmRBbGlnbihibG9jayk7DQorICAg
IA0KIAl4Y28rPSA4Ow0KLSAgICANCi0JLyogVklTSUJMRSAqLw0KLQl1aUJsb2NrQmVnaW5B
bGlnbihibG9jayk7DQotCXVpRGVmQnV0UyhibG9jaywgVE9HfEJJVHwxMCxCX05FV09PUFMs
ICJMYXllciIsCQkoc2hvcnQpKHhjbys9WElDKSwwLFhJQysyMCxZSUMsICZzb29wcy0+dmlz
aWZsYWcsIDAsIDAsIDAsIDAsICJPbmx5IHNob3cgb2JqZWN0IGRhdGFibG9ja3Mgb24gdmlz
aWJsZSBsYXllcnMiKTsNCi0gICAgeGNvKz0gMjA7DQotCXVpRGVmSWNvbkJ1dFMoYmxvY2ss
IFRPR3xCSVR8MCwgQl9ORVdPT1BTLCBJQ09OX1NDRU5FX0hMVCwJKHNob3J0KSh4Y28rPVhJ
QyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiRGlzcGxheXMg
U2NlbmUgZGF0YWJsb2NrcyIpOw0KLQl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDEs
IEJfTkVXT09QUywgSUNPTl9PQkpFQ1RfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZ
SUMsICZzb29wcy0+dmlzaWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBPYmplY3QgZGF0
YWJsb2NrcyIpOw0KLQl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDIsIEJfTkVXT09Q
UywgSUNPTl9NRVNIX0hMVCwJKHNob3J0KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMt
PnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiRGlzcGxheXMgTWVzaCBkYXRhYmxvY2tzIik7DQot
CXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8MywgQl9ORVdPT1BTLCBJQ09OX0NVUlZF
X0hMVCwJKHNob3J0KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAw
LCAwLCAwLCAwLCAiRGlzcGxheXMgQ3VydmUvU3VyZmFjZS9Gb250IGRhdGFibG9ja3MiKTsN
Ci0JdWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHw0LCBCX05FV09PUFMsIElDT05fTUJB
TExfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlzaWZsYWcs
IDAsIDAsIDAsIDAsICJEaXNwbGF5cyBNZXRhYmFsbCBkYXRhYmxvY2tzIik7DQotCXVpRGVm
SWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8NSwgQl9ORVdPT1BTLCBJQ09OX0xBVFRJQ0VfSExU
LAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlzaWZsYWcsIDAsIDAs
IDAsIDAsICJEaXNwbGF5cyBMYXR0aWNlIGRhdGFibG9ja3MiKTsNCi0JdWlEZWZJY29uQnV0
UyhibG9jaywgVE9HfEJJVHw2LCBCX05FV09PUFMsIElDT05fTEFNUF9ITFQsCShzaG9ydCko
eGNvKz1YSUMpLDAsWElDLFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRp
c3BsYXlzIExhbXAgZGF0YWJsb2NrcyIpOw0KLQl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8
QklUfDcsIEJfTkVXT09QUywgSUNPTl9NQVRFUklBTF9ITFQsCShzaG9ydCkoeGNvKz1YSUMp
LDAsWElDLFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIE1h
dGVyaWFsIGRhdGFibG9ja3MiKTsNCi0JdWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHw4
LCBCX05FV09PUFMsIElDT05fVEVYVFVSRV9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElD
LFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIFRleHR1cmUg
ZGF0YWJsb2NrcyIpOw0KLQl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDksIEJfTkVX
T09QUywgSUNPTl9JUE9fSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29w
cy0+dmlzaWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBJcG8gZGF0YWJsb2NrcyIpOw0K
LQl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDEyLCBCX05FV09PUFMsIElDT05fSU1B
R0VfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlzaWZsYWcs
IDAsIDAsIDAsIDAsICJEaXNwbGF5cyBJbWFnZSBkYXRhYmxvY2tzIik7DQotCXVpRGVmSWNv
bkJ1dFMoYmxvY2ssIFRPR3xCSVR8MTEsIEJfTkVXT09QUywgSUNPTl9MSUJSQVJZX0hMVCwJ
KHNob3J0KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAw
LCAwLCAiRGlzcGxheXMgTGlicmFyeSBkYXRhYmxvY2tzIik7DQotDQotICAgIHVpQmxvY2tF
bmRBbGlnbihibG9jayk7DQotICANCi0JLyogbmFtZSAqLw0KLQlpZihHLnNvb3BzLT5sb2Nr
cG9pbikgew0KLQkJb29wcz0gRy5zb29wcy0+bG9ja3BvaW47DQotCQlpZihvb3BzLT50eXBl
PT1JRF9MSSkgc3RyY3B5KG5hYW0sICgoTGlicmFyeSAqKW9vcHMtPmlkKS0+bmFtZSk7DQot
CQllbHNlIHN0cmNweShuYWFtLCBvb3BzLT5pZC0+bmFtZSk7DQotCQkNCi0JCWNwYWNrKDB4
MCk7DQotCQlnbFJhc3RlclBvczJpKHhjbys9WElDKzEwLAk1KTsNCi0JCUJNRl9EcmF3U3Ry
aW5nKHVpQmxvY2tHZXRDdXJGb250KGJsb2NrKSwgbmFhbSk7DQotDQotCX0NCisgICAgDQor
CS8qIFZJU0lCTEUgKi8NCisJdWlCbG9ja0JlZ2luQWxpZ24oYmxvY2spOw0KKwl1aURlZkJ1
dFMoYmxvY2ssIFRPR3xCSVR8MTAsQl9ORVdPT1BTLCAiTGF5ZXIiLAkJKHNob3J0KSh4Y28r
PVhJQyksMCxYSUMrMjAsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiT25s
eSBzaG93IG9iamVjdCBkYXRhYmxvY2tzIG9uIHZpc2libGUgbGF5ZXJzIik7DQorICAgIHhj
bys9IDIwOw0KKwl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDAsIEJfTkVXT09QUywg
SUNPTl9TQ0VORV9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDLFlJQywgJnNvb3BzLT52
aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIFNjZW5lIGRhdGFibG9ja3MiKTsNCisJ
dWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHwxLCBCX05FV09PUFMsIElDT05fT0JKRUNU
X0hMVCwJKHNob3J0KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAw
LCAwLCAwLCAwLCAiRGlzcGxheXMgT2JqZWN0IGRhdGFibG9ja3MiKTsNCisJdWlEZWZJY29u
QnV0UyhibG9jaywgVE9HfEJJVHwyLCBCX05FV09PUFMsIElDT05fTUVTSF9ITFQsCShzaG9y
dCkoeGNvKz1YSUMpLDAsWElDLFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwg
IkRpc3BsYXlzIE1lc2ggZGF0YWJsb2NrcyIpOw0KKwl1aURlZkljb25CdXRTKGJsb2NrLCBU
T0d8QklUfDMsIEJfTkVXT09QUywgSUNPTl9DVVJWRV9ITFQsCShzaG9ydCkoeGNvKz1YSUMp
LDAsWElDLFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIEN1
cnZlL1N1cmZhY2UvRm9udCBkYXRhYmxvY2tzIik7DQorCXVpRGVmSWNvbkJ1dFMoYmxvY2ss
IFRPR3xCSVR8NCwgQl9ORVdPT1BTLCBJQ09OX01CQUxMX0hMVCwJKHNob3J0KSh4Y28rPVhJ
QyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiRGlzcGxheXMg
TWV0YWJhbGwgZGF0YWJsb2NrcyIpOw0KKwl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklU
fDUsIEJfTkVXT09QUywgSUNPTl9MQVRUSUNFX0hMVCwJKHNob3J0KSh4Y28rPVhJQyksMCxY
SUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiRGlzcGxheXMgTGF0dGlj
ZSBkYXRhYmxvY2tzIik7DQorCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8NiwgQl9O
RVdPT1BTLCBJQ09OX0xBTVBfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZz
b29wcy0+dmlzaWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBMYW1wIGRhdGFibG9ja3Mi
KTsNCisJdWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHw3LCBCX05FV09PUFMsIElDT05f
TUFURVJJQUxfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlz
aWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBNYXRlcmlhbCBkYXRhYmxvY2tzIik7DQor
CXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8OCwgQl9ORVdPT1BTLCBJQ09OX1RFWFRV
UkVfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlzaWZsYWcs
IDAsIDAsIDAsIDAsICJEaXNwbGF5cyBUZXh0dXJlIGRhdGFibG9ja3MiKTsNCisJdWlEZWZJ
Y29uQnV0UyhibG9jaywgVE9HfEJJVHw5LCBCX05FV09PUFMsIElDT05fSVBPX0hMVCwJKHNo
b3J0KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAw
LCAiRGlzcGxheXMgSXBvIGRhdGFibG9ja3MiKTsNCisJdWlEZWZJY29uQnV0UyhibG9jaywg
VE9HfEJJVHwxMiwgQl9ORVdPT1BTLCBJQ09OX0lNQUdFX0hMVCwJKHNob3J0KSh4Y28rPVhJ
QyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiRGlzcGxheXMg
SW1hZ2UgZGF0YWJsb2NrcyIpOw0KKwl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDEx
LCBCX05FV09PUFMsIElDT05fTElCUkFSWV9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElD
LFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIExpYnJhcnkg
ZGF0YWJsb2NrcyIpOw0KKw0KKyAgICB1aUJsb2NrRW5kQWxpZ24oYmxvY2spOw0KKyAgDQor
CS8qIG5hbWUgKi8NCisJaWYoRy5zb29wcy0+bG9ja3BvaW4pIHsNCisJCW9vcHM9IEcuc29v
cHMtPmxvY2twb2luOw0KKwkJaWYob29wcy0+dHlwZT09SURfTEkpIHN0cmNweShuYWFtLCAo
KExpYnJhcnkgKilvb3BzLT5pZCktPm5hbWUpOw0KKwkJZWxzZSBzdHJjcHkobmFhbSwgb29w
cy0+aWQtPm5hbWUpOw0KKwkJDQorCQljcGFjaygweDApOw0KKwkJZ2xSYXN0ZXJQb3MyaSh4
Y28rPVhJQysxMCwJNSk7DQorCQlCTUZfRHJhd1N0cmluZyh1aUJsb2NrR2V0Q3VyRm9udChi
bG9jayksIG5hYW0pOw0KKw0KKwl9DQogDQotCS8qIGFsd2F5cyBkbyBhcyBsYXN0ICovDQot
CWN1cmFyZWEtPmhlYWRidXRsZW49IHhjbysyKlhJQzsNCisJLyogYWx3YXlzIGRvIGFzIGxh
c3QgKi8NCisJY3VyYXJlYS0+aGVhZGJ1dGxlbj0geGNvKzIqWElDOw0KIA0KLQl1aURyYXdC
bG9jayhibG9jayk7DQorCXVpRHJhd0Jsb2NrKGJsb2NrKTsNCiB9DQogDQpJbmRleDogc291
cmNlL2JsZW5kZXIvc3JjL2ludGVyZmFjZS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog
L2N2c3Jvb3QvYmYtYmxlbmRlci9ibGVuZGVyL3NvdXJjZS9ibGVuZGVyL3NyYy9pbnRlcmZh
Y2UuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA5DQpkaWZmIC11IC1yMS4xMDkgaW50
ZXJmYWNlLmMNCi0tLSBzb3VyY2UvYmxlbmRlci9zcmMvaW50ZXJmYWNlLmMJMjUgTWFyIDIw
MDQgMTM6MzA6MjAgLTAwMDAJMS4xMDkNCisrKyBzb3VyY2UvYmxlbmRlci9zcmMvaW50ZXJm
YWNlLmMJNiBBcHIgMjAwNCAyMzo0OToxMiAtMDAwMA0KQEAgLTQwMjUsNiArNDAyNSwxNiBA
QA0KIHsNCiAJYmxvY2stPmR0PSBlbWJvc3M7DQogfQ0KK3ZvaWQgdWlCbG9ja0F1dG9EaXJl
Y3Rpb25TZXQodWlCbG9jayAqYmxvY2spDQorew0KKwlpZihjdXJhcmVhLT5oZWFkZXJ0eXBl
PT1IRUFERVJUT1ApIHsNCisJCWJsb2NrLT5kaXJlY3Rpb249IFVJX0RPV047DQorCX0NCisJ
ZWxzZSB7DQorCQlibG9jay0+ZGlyZWN0aW9uPSBVSV9UT1A7DQorCQl1aUJsb2NrRmxpcE9y
ZGVyKGJsb2NrKTsNCisJfQ0KK30NCiB2b2lkIHVpQmxvY2tTZXREaXJlY3Rpb24odWlCbG9j
ayAqYmxvY2ssIGludCBkaXJlY3Rpb24pDQogew0KIAlibG9jay0+ZGlyZWN0aW9uPSBkaXJl
Y3Rpb247DQo=

--Message-Boundary-4262--