From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9763 invoked by alias); 2 Apr 2007 14:48:51 -0000 Received: (qmail 9752 invoked by uid 22791); 2 Apr 2007 14:48:47 -0000 X-Spam-Status: No, hits=0.8 required=5.0 tests=BAYES_50,DK_SIGNED,SARE_MSGID_LONG40,SPF_PASS,TW_DC,TW_TX X-Spam-Check-By: sourceware.org Received: from nz-out-0506.google.com (HELO nz-out-0506.google.com) (64.233.162.233) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 02 Apr 2007 15:48:37 +0100 Received: by nz-out-0506.google.com with SMTP id f1so988572nzc for ; Mon, 02 Apr 2007 07:48:31 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type; b=oSLqjKjAh0DSGHiDhwWCt3FmJRDsyKRkKqe5jRe6ZMARNS9JKyBZsLP/1JlfTQP1437X2rnUSzwXpmIw4nQhdi+aNiAlfJhhuX2jb/KS94RLn4u8e9BoDkWo1ENyliW8Oh0sF6+d4tzqxmzhIpYbzHXc+foHz7W6zFOG1mxXTFc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type; b=VhW/r3IiFtOZhWBbkHCDDkn7/qbSaY/mSDs9BU91P/xfo9tP4q55GIpErHl91ZLyHCVIBB5Iw5l/HG5Wg57O00JXxGKUaCfijA/qdIRznZMYaBEnO0NvJLy9AEcoePQeNyDh6nhL94F7dMKnSkSNNvpoLSW7NvZhymHgJOWkWJg= Received: by 10.115.93.16 with SMTP id v16mr1834888wal.1175525310582; Mon, 02 Apr 2007 07:48:30 -0700 (PDT) Received: by 10.114.120.15 with HTTP; Mon, 2 Apr 2007 07:48:30 -0700 (PDT) Message-ID: <2f5d26900704020748o27c10be1s20f9d452f78b67@mail.gmail.com> Date: Mon, 02 Apr 2007 14:48:00 -0000 From: Jhoberg To: ecos-maintainers@ecos.sourceware.org Subject: Electrical Energy Meter Using eCos with Driver ADC 16bits, two Chanels, embeded WebServer and LwIp MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_8604_21853421.1175525310255" X-Virus-Checked: Checked by ClamAV on sourceware.org Mailing-List: contact ecos-maintainers-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: ecos-maintainers-owner@ecos.sourceware.org X-SW-Source: 2007-04/txt/msg00000.txt.bz2 ------=_Part_8604_21853421.1175525310255 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 467 Development that it captures by means of driver for ADC of two channels a signal of electrical current another one of voltage, Driver for ADC_7654, calculate the value of the consumed electrical energy and drive a load connected to triac, this information is visualized by Web server that show values the current and voltaje, and power factor and control of the load. * Driver for ADC_7654 the 16 bits. * Lwip * WebServer embedded * Control of load using a Triac. ------=_Part_8604_21853421.1175525310255 Content-Type: text/x-csrc; name=WebEnergyCounter.c; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f011d212 Content-Disposition: attachment; filename="WebEnergyCounter.c" Content-length: 20875 I0RldmVscCBieSBKaG9iZXJnIFF1ZXZlZG8KI2VtYWlsOiBqcnF1ZXZlZG9y QGdtYWlsLmNvbQoKCiNpbmNsdWRlICJsd2lwL2RlYnVnLmgiCiNpbmNsdWRl ICJsd2lwL3N0YXRzLmgiCiNpbmNsdWRlICJsd2lwL3RjcC5oIgoKCiNpbmNs dWRlIDxwa2djb25mL2lvX3NlcmlhbC5oPgojaW5jbHVkZSA8cGtnY29uZi9s aWJjLmg+CiNpbmNsdWRlIDxjeWcvaW8vaW8uaD4KI2luY2x1ZGUgPGN5Zy9o YWwvaGFsX2lvLmg+CiNpbmNsdWRlIDxjeWcvaGFsL2hhbF9pbnRyLmg+CiNp bmNsdWRlIDxjeWcvaW8vc2VyaWFsLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4K I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRl IDxmbG9hdC5oPgojaW5jbHVkZSA8c3RkbGliLmg+CgojaW5jbHVkZSAiaHRt bC5oIgoKI2RlZmluZSBNQVhTSVpFVENQIDIwNDgKCgovLyA8aW1nIHNyYz1n bnUuYm1wID48L2ltZz4KLy8gPGFwcGxldCBjb2RlPUdyYXBoQXBwbGV0LmNs YXNzIHdpZHRoPTMwMCBoZWlnaHQ9MTIwPgovLyA8L2FwcGxldD4Kdm9sYXRp bGUgY2hhciAqIGNhZGVuYWluZm87CnZvbGF0aWxlIGNoYXIgKiBhcGNvbWFu ZG87CgpjaGFyIHR4ZGF0YSBbTUFYU0laRVRDUF07CmNoYXIgaW5mb1s1MTJd OwoKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KipEZWZpbmljaW9uIHZhcmlhYmxlcyBlQ29zIAojZGVmaW5lIFNUQUNLX1NJ WkUgMHg4MDAKY3lnX2FsYXJtX3QgdGVzdF90aW1lcjE7CnN0YXRpYyBjeWdf dGhyZWFkIHRocmVhZF9zWzFdOwpjeWdfdGhyZWFkX2VudHJ5X3Qgc2FtcGxl c19wcm9ncmFtOwpjeWdfaGFuZGxlX3Qgc2FtcGxlc190aHJlYWQ7CmN5Z19o YW5kbGVfdCBodHRwX3RocmVhZDsKc3RhdGljIGNoYXIgc3RhY2tbMV1bU1RB Q0tfU0laRV07CmN5Z19tdXRleF90IGFkY2Jsb2NrOwpjeWdfaGFuZGxlX3Qg aGFuZGxlX0FEQ19JU1IwOwpjeWdfaW50ZXJydXB0IGludHJBREM7CmN5Z19z ZW1fdCBzZW1hZm9yb19BREMsc2VtYWZvcm9fbnNhbXBsZXM7CmN5Z19pb19o YW5kbGVfdCBoYW5kbGVfSU87CmludCBhdXg9MDsKCi8vKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqZmluIERlZmluaWNpb24g dmFyaWFibGVzIGVDb3MgCgoKCiNkZWZpbmUgTEVEXzEJKDE8PDE2KQojZGVm aW5lIExFRF8yCSgxPDwxNykKI2RlZmluZSBMRURfMwkoMTw8MTgpCgoKICBp bnQgIGF4Z25kPTA7CiAgaW50ICBheGduZGk9MDsKICBpbnQgYXhtaW49MDsK ICBpbnQgYXhtYXg9MDsKICBkb3VibGUgKnRvcHB3OwogIGRvdWJsZSBheGVu ZXJneTsKCiAgZmxvYXQgamg9MDsKICBmbG9hdCBqaDI9MDsKICBmbG9hdCBq aDM9MDsKICBmbG9hdCBheGpoPTA7CgovLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKmRlZmluaWNpb24gZGUgbGEgY2xhc2Ug QURDIEFOQUxPRyBERVZJQ0UgZW4gQwojZGVmaW5lIE5TQU1QTEVTIDY0CiNk ZWZpbmUgRkFNUExFUyAgMzg0MAoKCnN0YXRpYyBjeWdfdWludDMyIEFEUk1F TU9SWUs9MHgyOTc7CmludCAgIE1hcGVhcih2b2lkKTsKYm9vbCAgQ29udmVy dGlvblN0YXJ0KHZvaWQpOwpib29sICBSZWFkQWRjKHVuc2lnbmVkIHNob3J0 ICosY3lnX3VpbnQzMiAqKTsKYm9vbCAgc2V0Q2hhbmVsKGludCk7CmJvb2wg ZnBjYWxjKGZsb2F0IGF4bnRmcHYsZmxvYXQgYXhudGZwaSk7CgoKCmludCBN YXBlYXIodm9pZCkKewogIEhBTF9XUklURV9VSU5UMzIoQVQ5MV9QSU8gKyBB VDkxX1BJT19QRFIgLEFUOTFfUElPX1BTUl9OQ1MzKTsKICBIQUxfV1JJVEVf VUlOVDMyKEFUOTFfRUJJICsgQVQ5MV9FQklfTUNSLEFUOTFfRUJJX01DUl9B TEVfOE18KDA8PDQpICk7CiAgSEFMX1dSSVRFX1VJTlQzMihBVDkxX0VCSSAr IEFUOTFfRUJJX0NTUjEsIEFUOTFfRUJJX0NTUl9EQldfMTYgfCBBVDkxX0VC SV9DU1JfTldTXzggfCBBVDkxX0VCSV9DU1JfV1NFICAKCQkgICB8IEFUOTFf RUJJX0NTUl9QQUdFU18xTSB8IEFUOTFfRUJJX0NTUl9UREZfMSB8IEFUOTFf RUJJX0NTUl9DU0VOIHwgKEFEUk1FTU9SWUs8PDIwKSAgKTsKICBIQUxfV1JJ VEVfVUlOVDMyKEFUOTFfUElPICsgQVQ5MV9QSU9fUEVSICwgIEFUOTFfUElP X1BTUl9USU9BMXxBVDkxX1BJT19QU1JfUDIzfEFUOTFfUElPX1BTUl9QMjQg KTsKICBIQUxfV1JJVEVfVUlOVDMyKEFUOTFfUElPICsgQVQ5MV9QSU9fT0VS LCBBVDkxX1BJT19QU1JfVElPQTF8QVQ5MV9QSU9fUFNSX1AyM3xBVDkxX1BJ T19QU1JfUDI0ICk7CiAgSEFMX1dSSVRFX1VJTlQzMihBVDkxX1BJTyArIEFU OTFfUElPX1NPRFIsIEFUOTFfUElPX1BTUl9USU9BMSk7IAogIC8vZGVmaW5p Y2lvbiBkZSBsb3MgcGluZXMgcGFyYSBlc2NvamVyIHVuIGNhbmFsIGRlIGNv bnZlcnNpb24gZGVmYXVsIGNoMwogIEhBTF9XUklURV9VSU5UMzIoQVQ5MV9Q SU8gKyBBVDkxX1BJT19TT0RSLCBBVDkxX1BJT19QU1JfUDIzKTsgCiAgSEFM X1dSSVRFX1VJTlQzMihBVDkxX1BJTyArIEFUOTFfUElPX0NPRFIsIEFUOTFf UElPX1BTUl9QMjQpOyAKICByZXR1cm4gMTsKICAvLzAsMCAtPiBCCiAgLy8x LDAgLT4gVm9sdGFqZSAKCgp9CmJvb2wgQ29udmVydGlvblN0YXJ0KHZvaWQp ICAKeyAKICBIQUxfV1JJVEVfVUlOVDMyKEFUOTFfUElPICsgQVQ5MV9QSU9f Q09EUiwgQVQ5MV9QSU9fUFNSX1RJT0ExKTsgCiAgSEFMX1dSSVRFX1VJTlQz MihBVDkxX1BJTyArIEFUOTFfUElPX1NPRFIsIEFUOTFfUElPX1BTUl9USU9B MSk7IAogIHJldHVybiAxOyAKfQpib29sIFJlYWRBZGMoY3lnX3VpbnQxNiAq RGF0b2F4LCBjeWdfdWludDMyICphZGRyZXNzKQp7CiAgSEFMX1JFQURfVUlO VDE2KCgqYWRkcmVzczw8MjApICwqRGF0b2F4ICk7CiAgcmV0dXJuIDE7Cn0K Ym9vbCBzZXRDaGFuZWwoaW50IGNob3ApCnsKICBzd2l0Y2goY2hvcCkKICAg IHsKICAgIGNhc2UgMDp7ICBIQUxfV1JJVEVfVUlOVDMyKEFUOTFfUElPICsg QVQ5MV9QSU9fQ09EUiwgQVQ5MV9QSU9fUFNSX1AyMyk7IAogICAgICAgICAg ICAgIEhBTF9XUklURV9VSU5UMzIoQVQ5MV9QSU8gKyBBVDkxX1BJT19DT0RS LCBBVDkxX1BJT19QU1JfUDI0KTsKCSAgICAgIC8vdm9sdGFqZSAKCSAgICAg IGJyZWFrO30KICAgIGNhc2UgMTp7ICBIQUxfV1JJVEVfVUlOVDMyKEFUOTFf UElPICsgQVQ5MV9QSU9fQ09EUiwgQVQ5MV9QSU9fUFNSX1AyMyk7IAogICAg ICAgICAgICAgIEhBTF9XUklURV9VSU5UMzIoQVQ5MV9QSU8gKyBBVDkxX1BJ T19TT0RSLCBBVDkxX1BJT19QU1JfUDI0KTsKCSAgICAgIGJyZWFrO30KICAg IGNhc2UgMjp7ICBIQUxfV1JJVEVfVUlOVDMyKEFUOTFfUElPICsgQVQ5MV9Q SU9fU09EUiwgQVQ5MV9QSU9fUFNSX1AyMyk7IAogICAgSEFMX1dSSVRFX1VJ TlQzMihBVDkxX1BJTyArIEFUOTFfUElPX0NPRFIsIEFUOTFfUElPX1BTUl9Q MjQpOwoJICAgICAgLy9jb3JyaWVudGUKCSAgICAgIGJyZWFrO30KICAgIGNh c2UgMzp7ICBIQUxfV1JJVEVfVUlOVDMyKEFUOTFfUElPICsgQVQ5MV9QSU9f U09EUiwgQVQ5MV9QSU9fUFNSX1AyMyk7IAogICAgICAgICAgICAgIEhBTF9X UklURV9VSU5UMzIoQVQ5MV9QSU8gKyBBVDkxX1BJT19TT0RSLCBBVDkxX1BJ T19QU1JfUDI0KTsKCSAgICAgIGJyZWFrO30KICAgIH0KICByZXR1cm4gMTsK fQoKCgp0eXBlZGVmIHN0cnVjdCBhZGNfNzY1NAp7CiAgdm9sYXRpbGUgY3ln X3VpbnQzMiBBRFJNRU1PUlk7CiAgdm9sYXRpbGUgY3lnX3VpbnQxNiBEYXRv OwogIHZvbGF0aWxlIGludCBzYW1wbGVzSFtOU0FNUExFU107CiAgaW50ICpp OwogIHZvbGF0aWxlIGludCAqU2FtcGxlc1tOU0FNUExFU107CiAgY2hhciAq Y0RhdG87CiAgY2hhciAqY1NhbXBsZXM7CiAgaW50IHRvcHNhbXBsZXM7CiAg aW50IG51bXNhbXBsZTsKCiAgdW5zaWduZWQgbG9uZyBlbmVyZ3lzYW1wbGU7 CiAgZmxvYXQgZW5lcmd5dG9wOwogIGRvdWJsZSAqRW5lcmd5RGF0bzsKICBp bnQgcmF0ZWVuZXJneTsKICBpbnQgTWF4VjsKICBpbnQgTWluVjsKICB2b2xh dGlsZSB1bnNpZ25lZCBpbnQgKk1heEk7CiAgdm9sYXRpbGUgdW5zaWduZWQg aW50ICpNaW5JOwogIAogIHZvbGF0aWxlIGZsb2F0IGluc3RhbnRWb2w7CiAg dm9sYXRpbGUgZmxvYXQgaW5zdGFudEN1cjsKICBpbnQgQ29tZGF0bzsKICBp bnQgbnRmcHY7CiAgaW50IG50ZnBpOwogIGZsb2F0IGZwOwogIGludCBDb21h bmRvOwogIGludCBwcm9tZWRpb0g7CiAgaW50IHByb21lZGlvVjsKICAKICBp bnQgKCogYXBNYXBlYXIpKHZvaWQpOwogIGJvb2wgKCogYXBDb252ZXJ0aW9u U3RhcnQpKHZvaWQpOwogIGJvb2wgKCogYXBSZWFkQWRjKShjeWdfdWludDE2 ICosY3lnX3VpbnQzMiAqKTsKICBib29sICgqIGFwc2V0Q2hhbmVsKShpbnQp OwoKfTsKCgoKCnZvbGF0aWxlIHN0cnVjdCBhZGNfNzY1NCBhZGMsYXhhZGM7 IApib29sIGZwY2FsYyhmbG9hdCBheG50ZnB2LGZsb2F0IGF4bnRmcGkpCnsK IAogIGlmKGF4bnRmcHY+YXhudGZwaSkgewogICAgYXhudGZwdj1heG50ZnB2 LWF4bnRmcGk7CiAgICBheG50ZnBpPWF4bnRmcHYqOTgxNzQ3N0UtODsKICAg IGF4bnRmcHY9Y29zKGF4bnRmcGkpOwogICAgYXhhZGMuZnA9YXhudGZwdjsK CiAgfQogIGVsc2V7CiAgICBheG50ZnB2PWF4bnRmcGktYXhudGZwdjsKICAg IGF4bnRmcGk9YXhudGZwdio5ODE3NDc3RS04OwogICAgYXhudGZwdj1jb3Mo YXhudGZwaSk7CiAgICBheGFkYy5mcD1heG50ZnB2OwogIH0KICAKICByZXR1 cm4gMTsKfQoKCgpjeWdfdWludDMyIGZ1bl9pc3IwIChjeWdfdmVjdG9yX3Qg dmVjdG9yLCBjeWdfYWRkcndvcmRfdCBkYXRhICkKewoKICBjeWdfdWludDMy IHJlc3VsdFBJTzsKCiAgLy8gIEhBTF9XUklURV9VSU5UMzIoIEFUOTFfUElP ICsgQVQ5MV9QSU9fU09EUiAsTEVEXzIgICk7IAogIEhBTF9SRUFEX1VJTlQz MihBVDkxX1BJTyArIEFUOTFfUElPX0lTUiwgcmVzdWx0UElPKTsKICBjeWdf aW50ZXJydXB0X21hc2sodmVjdG9yKTsKICBjeWdfaW50ZXJydXB0X2Fja25v d2xlZGdlKHZlY3Rvcik7CiAgcmV0dXJuIChDWUdfSVNSX0hBTkRMRUQgfCBD WUdfSVNSX0NBTExfRFNSKTsKCn0Kdm9pZCBmdW5fZHNyMChjeWdfdmVjdG9y X3QgdmVjdG9yLCBjeWdfdWNvdW50MzIgY291bnQsIGN5Z19hZGRyd29yZF90 IGRhdGEpewoKICBjeWdfaW50ZXJydXB0X3VubWFzayh2ZWN0b3IpOyAKfQoK Ly8gZnVuY2lvbiBkZSBtdWVzdHJlbywgY29uIGZyZWN1ZW5jaWEgdmFyaWFi bGUKCnZvaWQgYml0QWRjX2FsYXJtX2Z1bmMoY3lnX2hhbmRsZV90IGFsYXJt SCwgY3lnX2FkZHJ3b3JkX3QgZGF0YSkKeyAKICAKIAoKICBheG1heD0wOwog IGF4bWluPTA7CiAgYXhnbmQ9MDsKICBqaD0wOwogIGpoMj0wOwogIGpoMz0w OwogSEFMX1dSSVRFX1VJTlQzMiggQVQ5MV9QSU8gKyBBVDkxX1BJT19TT0RS ICxMRURfMiApOyAKCiBjeWdfc2NoZWR1bGVyX2xvY2soKTsKIGN5Z19tdXRl eF9sb2NrKCZhZGNibG9jayk7CiAKIGlmKGFkYy5udW1zYW1wbGU+TlNBTVBM RVMpCiAgICB7IAogICAgICBIQUxfV1JJVEVfVUlOVDMyKCBBVDkxX1BJTyAr IEFUOTFfUElPX0NPRFIgLExFRF8yICk7IAogICAgICAKICAgICAgaWYoYXhh ZGMuQ29tYW5kbz09MCkKCWF4YWRjPShzdHJ1Y3QgIGFkY183NjU0KWFkYzsK ICAgICAgCiAgICAgIGN5Z19zZW1hcGhvcmVfcG9zdCgmc2VtYWZvcm9fbnNh bXBsZXMpOwogICAgCWlmKCgqYWRjLkVuZXJneURhdG8pPGFkYy5lbmVyZ3l0 b3ApCgkgIHsKCSAgICBheG1heD1hZGMuTWF4VjsJCgkgICAgYXhtaW49YWRj Lk1pblY7CgkgICAgLy9heGduZD1hZGMucHJvbWVkaW9WOwoJICAgIC8vIGF4 Z25kPShpbnQpKGF4Z25kL05TQU1QTEVTKTsKCSAgICAgYXhnbmQ9YXhtaW4r KCgoYXhtYXgpLShheG1pbikpLzIgKTsKCSAgICBqaDI9KGZsb2F0KShheG1h eC1heGduZCk7CgkgICAgamg9MUUzLzY1NTM1RTA7CgkgICAgaWYoamgyPjAp CgkgICAgICBhZGMuaW5zdGFudFZvbD1qaDIqamg7CgkgICAgZWxzZQoJICAg ICAgYWRjLmluc3RhbnRWb2w9MTIwRTA7CgoKCSAgICBheG1heD0oKmFkYy5N YXhJKTsJCgkgICAgYXhtaW49KCphZGMuTWluSSk7CgkgICAgLy8gYXhnbmQ9 YWRjLnByb21lZGlvSDsKCSAgICAvL2F4Z25kPShpbnQpKGF4Z25kL05TQU1Q TEVTKTsKCSAgICBheGduZD1heG1pbisoKChheG1heCktKGF4bWluKSkvMiAp OwoJICAgIC8vcGFyYSBjYWxjdWFyIGNvbiBkY2duZCB2YXJpYWJsZQoJICAg ICBqaDI9KGZsb2F0KSggYXhtYXggLSBheGduZCk7CgkgICAgCgkgICAgamg9 NDU2NUUtNjsKCSAgICBpZiggamgyID4gMCkKCSAgICAgIGpoMz1qaDIqamg7 CgkgICAgZWxzZQoJICAgICAgamgzPTA7CgoJICAgIGlmKGpoMz4wKQoJICAg ICAgewoJCWFkYy5pbnN0YW50Q3VyPWpoMzsKCQlqaD0oYWRjLmluc3RhbnRW b2wqKGpoMykpOwoJCgkJKnRvcHB3Kz1qaDsKICAgICAgIAkJKmFkYy5FbmVy Z3lEYXRvPSp0b3BwdzsKCQoJCgkgICAgICB9CgkgICAgZWxzZXsKCSAgICAg IGFkYy5pbnN0YW50Q3VyPTBFMDsKCSAgICAgIGFkYy5pbnN0YW50Vm9sPTEy MEUwOwoKCSAgICB9CgkgICAgCgkgICAgYWRjLk1heFY9MDsKCSAgICAqYWRj Lk1pbkk9MHhGRkZGOwoJICAgICphZGMuTWF4ST0wOwoJICAgIGFkYy5NaW5W PTB4RkZGRjsKCSAgICBhZGMubnVtc2FtcGxlPTA7CgkgICAgYWRjLnByb21l ZGlvSD0wOwoJICAgIGFkYy5wcm9tZWRpb1Y9MDsKCSAgICBhZGMuZW5lcmd5 c2FtcGxlKys7CgkgIH1lbHNlewoJICAgIGFkYy5Db21kYXRvPTE7CgkgIH0K CQoJCiAgICB9ZWxzZQogICAgICB7CgkvL2RhdG8gZGUgQgoJCglhZGMuYXBz ZXRDaGFuZWwoMik7CglhZGMuYXBDb252ZXJ0aW9uU3RhcnQoKTsKCWFkYy5h cFJlYWRBZGMoJmFkYy5EYXRvLGFkYy5BRFJNRU1PUlkpOyAKCWFkYy5zYW1w bGVzSFthZGMubnVtc2FtcGxlXT1hZGMuRGF0bzsKCWFkYy5wcm9tZWRpb0gr PWFkYy5zYW1wbGVzSFthZGMubnVtc2FtcGxlXTsKCWlmKCphZGMuTWF4STxh ZGMuc2FtcGxlc0hbYWRjLm51bXNhbXBsZV0pCgkgIHsKCSAgICAqYWRjLk1h eEk9YWRjLnNhbXBsZXNIW2FkYy5udW1zYW1wbGVdOwoJICAgIGFkYy5udGZw aT1hZGMubnVtc2FtcGxlOwoJICAgIAoJICB9CglpZigqYWRjLk1pbkk+YWRj LnNhbXBsZXNIW2FkYy5udW1zYW1wbGVdKQoJICAqYWRjLk1pbkk9KHVuc2ln bmVkIGludClhZGMuc2FtcGxlc0hbYWRjLm51bXNhbXBsZV07CgkKCWFkYy5p PTc7CgkKICAgICAgICAvL2RhdG8gZGUgVgoJYWRjLmFwc2V0Q2hhbmVsKDAp OwoJYWRjLmFwQ29udmVydGlvblN0YXJ0KCk7ICAgCglhZGMuYXBSZWFkQWRj KCZhZGMuRGF0byxhZGMuQURSTUVNT1JZKTsgCglhZGMuU2FtcGxlc1thZGMu bnVtc2FtcGxlXT1hZGMuRGF0bzsKCWFkYy5wcm9tZWRpb1YrPSgqYWRjLlNh bXBsZXNbYWRjLm51bXNhbXBsZV0pOwoJaWYoYWRjLk1heFY8YWRjLlNhbXBs ZXNbYWRjLm51bXNhbXBsZV0pCgkgIHsKCSAgYWRjLk1heFY9YWRjLlNhbXBs ZXNbYWRjLm51bXNhbXBsZV07CgkgIGFkYy5udGZwaT1hZGMubnVtc2FtcGxl OwoJICB9CglpZihhZGMuTWluVj5hZGMuU2FtcGxlc1thZGMubnVtc2FtcGxl XSkKCSAgewoJICBhZGMuTWluVj1hZGMuU2FtcGxlc1thZGMubnVtc2FtcGxl XTsJCgkgIGFkYy5udGZwdj1hZGMubnVtc2FtcGxlOwoJICB9CglhZGMubnVt c2FtcGxlKys7CiAgICAgIH0KCgogY3lnX211dGV4X3VubG9jaygmYWRjYmxv Y2spOwogY3lnX3NjaGVkdWxlcl91bmxvY2soKTsKfQoKCnZvaWQgc2FtcGxl c19wcm9ncmFtKGN5Z19hZGRyd29yZF90IGRhdGEpCnsKICBpbnQgbWVzc2Fn ZSA9IChpbnQpIGRhdGE7CiAgaW50IGRlbGF5OwogIGludCBuLHg7CiAgY2hh ciBvdXRwdXQ7CiAgY3lnX2hhbmRsZV90IHRlc3RfY291bnRlckgsIHN5c3Rl bV9jbG9ja0gsIHRlc3RfYWxhcm1IOwogIGN5Z190aWNrX2NvdW50X3QgdGlj a3M7CiAgY3lnX2FsYXJtIHRlc3RfYWxhcm07CiAgY3lnX2hhbmRsZV90IHRp ZW1wb19yZWFsOwogIHVuc2lnbmVkIGhvd19tYW55X2FsYXJtcyA9IDAsIHBy ZXZfYWxhcm1zID0gMCwgdG1wX2hvd19tYW55OwogIHN5c3RlbV9jbG9ja0gg PSBjeWdfcmVhbF90aW1lX2Nsb2NrKCk7CiAgY3lnX2Nsb2NrX3RvX2NvdW50 ZXIoc3lzdGVtX2Nsb2NrSCwgJnRlc3RfY291bnRlckgpOwogIGN5Z19hbGFy bV9jcmVhdGUodGVzdF9jb3VudGVySCwgYml0QWRjX2FsYXJtX2Z1bmMsCgkJ ICAgKGN5Z19hZGRyd29yZF90KSAmaG93X21hbnlfYWxhcm1zICwKCQkgICAm dGVzdF9hbGFybUgsICZ0ZXN0X2FsYXJtKTsKICBjeWdfYWxhcm1faW5pdGlh bGl6ZSh0ZXN0X2FsYXJtSCwgY3lnX2N1cnJlbnRfdGltZSgpKzEsIDIpOwog IGZvciAoOzspCiAgICB7CiAgCgogICAgfQoKICAKfQoKLy8gZmluIGZyZWN1 ZW5jaWEgZGUgbXVlc3RyZW8KCgoKCi8vKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqZmluIGRlIGxhIGNsYXNlIEFEQyBkZSBB TkFMT0cgREVWSUNFIGVuIEMKCgoKc3RydWN0IGh0dHBfc3RhdGUgewogIGNo YXIgKmZpbGU7CiAgdTMyX3QgbGVmdDsKICB1OF90IHJldHJpZXM7Cn07CgoK CgoKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K c3RhdGljIHZvaWQgY29ubl9lcnIodm9pZCAqYXJnLCBlcnJfdCBlcnIpCnsK ICBzdHJ1Y3QgaHR0cF9zdGF0ZSAqaHM7CgogIGhzID0gYXJnOwogIG1lbV9m cmVlKGhzKTsKfQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCnN0YXRpYyB2b2lkIGNsb3NlX2Nvbm4oc3RydWN0IHRjcF9wY2Ig KnBjYiwgc3RydWN0IGh0dHBfc3RhdGUgKmhzKQp7CiAgdGNwX2FyZyhwY2Is IE5VTEwpOwogIHRjcF9zZW50KHBjYiwgTlVMTCk7CiAgdGNwX3JlY3YocGNi LCBOVUxMKTsKICBtZW1fZnJlZShocyk7CiAgdGNwX2Nsb3NlKHBjYik7Cn0K Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdGF0 aWMgdm9pZCBzZW5kX2RhdGEoc3RydWN0IHRjcF9wY2IgKnBjYiwgc3RydWN0 IGh0dHBfc3RhdGUgKmhzKQp7CiAgZXJyX3QgZXJyOwogIHUxNl90IGxlbjsK CiAgLy8gV2UgY2Fubm90IHNlbmQgbW9yZSBkYXRhIHRoYW4gc3BhY2UgYXZh aWxhYmxlIGluIHRoZSBzZW5kCiAgLy8gYnVmZmVyLiAKICBpZih0Y3Bfc25k YnVmKHBjYikgPCBocy0+bGVmdCkgewogICAgbGVuID0gdGNwX3NuZGJ1Zihw Y2IpOwogIH0gZWxzZSB7CiAgICBsZW4gPSBocy0+bGVmdDsKICB9CgogIGRv IHsKICAgIGVyciA9IHRjcF93cml0ZShwY2IsIGhzLT5maWxlLCBsZW4sIDAp OwogICAgaWYoZXJyID09IEVSUl9NRU0pIHsKICAgICAgbGVuIC89IDI7CiAg ICB9CiAgfSB3aGlsZShlcnIgPT0gRVJSX01FTSAmJiBsZW4gPiAxKTsgIAog IAogIGlmKGVyciA9PSBFUlJfT0spIHsKICAgIGhzLT5maWxlICs9IGxlbjsK ICAgIGhzLT5sZWZ0IC09IGxlbjsKICB9Cn0KLy8tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdGF0aWMgZXJyX3QgaHR0cF9wb2xs KHZvaWQgKmFyZywgc3RydWN0IHRjcF9wY2IgKnBjYikKewogIHN0cnVjdCBo dHRwX3N0YXRlICpoczsKCiAgaHMgPSBhcmc7CiAgCiAgLy8gIHByaW50Zigi UG9sbGxcbiIpOwogIGlmKGhzID09IE5VTEwpIHsKICAgIC8vICAgIHByaW50 ZigiTnVsbCwgY2xvc2VcbiIpOwogICAgdGNwX2Fib3J0KHBjYik7CiAgICBy ZXR1cm4gRVJSX0FCUlQ7CiAgfSBlbHNlIHsKICAgICsraHMtPnJldHJpZXM7 CiAgICBpZihocy0+cmV0cmllcyA9PSA0KSB7CiAgICAgIHRjcF9hYm9ydChw Y2IpOwogICAgICByZXR1cm4gRVJSX0FCUlQ7CiAgICB9CiAgICBzZW5kX2Rh dGEocGNiLCBocyk7CiAgfQoKICByZXR1cm4gRVJSX09LOwp9Ci8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3RhdGljIGVycl90 IGh0dHBfc2VudCh2b2lkICphcmcsIHN0cnVjdCB0Y3BfcGNiICpwY2IsIHUx Nl90IGxlbikKewogIHN0cnVjdCBodHRwX3N0YXRlICpoczsKICBocyA9IGFy ZzsKICBocy0+cmV0cmllcyA9IDA7CiAgaWYoaHMtPmxlZnQgPiAwKSB7ICAg IAogICAgc2VuZF9kYXRhKHBjYiwgaHMpOwogIH0gZWxzZSB7CiAgICBjbG9z ZV9jb25uKHBjYiwgaHMpOwogIH0KCiAgcmV0dXJuIEVSUl9PSzsKCn0KCi8v CgoKCgppbnQgcmVxdHlwZWh0dHAoY2hhciAqZGF0YSkKewoKICBpbnQgaSxh dXgsajsKICBjaGFyIHRpcG9bMjBdOwogIGludCB2YXJ0b3AsdmFybWVtLHZh cjsKCiAgaWYoc3RybmNtcCgiR0VUIC8gIixkYXRhLDYpKQogICAgewogICAg ICBhdXg9MDsKICAgICAgd2hpbGUoIGRhdGFbYXV4KzVdICE9IE5VTEwgKQoJ ewoJICBpZiggKChjaGFyICopZGF0YSs1KVthdXhdPT0nICcgKQoJICAgIGJy ZWFrOwoJICBlbHNlICAKCSAgICB0aXBvW2F1eF09KChjaGFyICopZGF0YSs1 KVthdXhdOyAgCgoJICBhdXgrKzsgCgl9CgkgIAoJICAgCiAgICB9ZWxzZQog ICAgICB7CgoJY3lnX3NlbWFwaG9yZV93YWl0KCZzZW1hZm9yb19uc2FtcGxl cyk7CglheGFkYy5Db21hbmRvPTE7CglqPXNpemVvZih2cGFnZV9pbmRleCk7 CgltZW1jcHkodHhkYXRhLHZwYWdlX2luZGV4LGopOwoJaj1zdHJsZW4odHhk YXRhKTsKCWZwY2FsYyhheGFkYy5udGZwdixheGFkYy5udGZwaSk7CgkvLwlh eGVuZXJneT0oZG91YmxlKSpheGFkYy5FbmVyZ3lEYXRvOwoJLy9heGVuZXJn eT1heGVuZXJneS8yMUU2OwoJc3ByaW50ZihpbmZvLCI8SDM+RGF0b3MgcmVt b3RvczwvSDM+PFA+PHRhYmxlIGFsaWduPVwibGVmdFwiIGJvcmRlcj1cIjNc IiB2YWxpZ249XCJib3R0b21cIiBiZ2NvbG9yPVwibGlnaHRHcmF5XCI+PFRS PjxURD5FbmVyZ2lhPC9URD48VEQ+JWZfS3cqaDwvVEQ+PC9UUj48VFI+PFRE PlZpbnN0YTo8L1REPjxURD4lZl9WPC9UUj48L1REPjxUUj48VEQ+SWluc3Rh OjwvVEQ+PFREPiVmX0E8L1REPjwvVFI+PFRSPjxURD5GLlA8L1REPjxURD4l ZjwvVEQ+PC9UUj48VFI+PFREPkNpY2xvczwvVEQ+PFREPiVsdTwvVEQ+PC9U Uj48VFI+PEZPUk0gbmFtZT1cImNvbWFuZG9cIiBtZXRob2Q9XCJQT1NUXCI+ PFREPjxJTlBVVCB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJDb25lY3Rhclwi PjwvVEQ+PFREPjxJTlBVVCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJBcGFn YXJcIj48L1REPjwvRk9STT48L1RSPjwvVEFCTEU+PC9QPiIsKmF4YWRjLkVu ZXJneURhdG8sYXhhZGMuaW5zdGFudEN1cixheGFkYy5pbnN0YW50Vm9sLGF4 YWRjLmZwLGF4YWRjLmVuZXJneXNhbXBsZSk7CglqPXN0cmxlbih0eGRhdGEp OwoJaT1zdHJsZW4oaW5mbyk7CgltZW1jcHkoJih0eGRhdGFbal0pLGluZm8s aSk7CQkKCgkvKgoJdmFydG9wPTA7Cglmb3IodmFyPTA7dmFyPE5TQU1QTEVT O3ZhcisrKQoJICB7CgkgICAgc3ByaW50ZihhcGNvbWFuZG8sIiVkLCBcbiIs YXhhZGMuU2FtcGxlc1t2YXJdKTsKCSAgICB2YXJtZW09MDsKCSAgICB3aGls ZSgodmFybWVtPDYpJiYoKGNoYXIgKilhcGNvbWFuZG8pW3Zhcm1lbV0hPScg JykKCSAgICAgIHsKCQkoKGNoYXIgKiljYWRlbmFpbmZvK3ZhcnRvcClbdmFy bWVtXT0oY2hhciAqKWFwY29tYW5kb1t2YXJtZW1dOwoJCXZhcm1lbSsrOwoJ ICAgICAgfQoJICAgIHZhcnRvcD12YXJ0b3ArdmFybWVtOwoJICAgIAoJICB9 CgkKCWo9c3RybGVuKHR4ZGF0YSk7CglpPXNpemVvZih2cGFnZV9jaWVycmUp OwoJbWVtY3B5KCYodHhkYXRhW2pdKSx2cGFnZV9jaWVycmUsaSk7CgkKCglq PXN0cmxlbih0eGRhdGEpOwoJaT1zaXplb2YoY2llcnJlKTsJICAKCW1lbWNw eSgmKHR4ZGF0YVtqXSksY2llcnJlLGkpOwoJKi8KCglheGFkYy5Db21hbmRv PTA7CgkKCglyZXR1cm4gc2l6ZW9mKHR4ZGF0YSk7CiAgICAgIH0KCgogIHJl dHVybiAxOwp9CgoKLy8KCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCgpzdGF0aWMgZXJyX3QgaHR0cF9yZWN2KHZvaWQgKmFy Zywgc3RydWN0IHRjcF9wY2IgKnBjYiwgc3RydWN0IHBidWYgKnAsIGVycl90 IGVycikKewogIGludCBpOwogIGNoYXIgKmRhdGE7CiAgc3RydWN0IGh0dHBf c3RhdGUgKmhzOwogIGhzID0gYXJnOwogIGludCBzaXpldHg7CgoKICBpZihl cnIgPT0gRVJSX09LICYmIHAgIT0gTlVMTCkgewoKICAgIC8vIEluZm9ybSBU Q1AgdGhhdCB3ZSBoYXZlIHRha2VuIHRoZSBkYXRhLiAKICAgIHRjcF9yZWN2 ZWQocGNiLCBwLT50b3RfbGVuKTsKICAgIAogICAgaWYoaHMtPmZpbGUgPT0g TlVMTCkgewogICAgICBkYXRhID0gcC0+cGF5bG9hZDsgICAgCiAgICAgIHNp emV0eD1yZXF0eXBlaHR0cChkYXRhKTsKICAgICAgaHMtPmZpbGUgPSAmdHhk YXRhOyAKICAgICAgaHMtPmxlZnQgPSBzaXpldHg7CiAgICAgIHBidWZfZnJl ZShwKTsKICAgICAgc2VuZF9kYXRhKHBjYiwgaHMpOwoKICAgICAgdGNwX3Nl bnQocGNiLCBodHRwX3NlbnQpOwoKICB9IGVsc2UgewogICAgICBwYnVmX2Zy ZWUocCk7CiAgICAgIGNsb3NlX2Nvbm4ocGNiLCBocyk7CiAgICB9CiAgfSBl bHNlIHsKICAgIHBidWZfZnJlZShwKTsKICB9CiAgCgogIGlmKGVyciA9PSBF UlJfT0sgJiYgcCA9PSBOVUxMKSB7CiAgICBjbG9zZV9jb25uKHBjYiwgaHMp OwogIH0KICByZXR1cm4gRVJSX09LOwp9Ci8vLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3RhdGljIGVycl90IGh0dHBfYWNjZXB0 KHZvaWQgKmFyZywgc3RydWN0IHRjcF9wY2IgKnBjYiwgZXJyX3QgZXJyKQp7 CiAgc3RydWN0IGh0dHBfc3RhdGUgKmhzOwoKICB0Y3Bfc2V0cHJpbyhwY2Is IFRDUF9QUklPX01JTik7CiAgCiAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0 aGUgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIG9mIHRoZQogIC8v ICAgY29ubmVjdGlvbi4gCiAgaHMgPSBtZW1fbWFsbG9jKHNpemVvZihzdHJ1 Y3QgaHR0cF9zdGF0ZSkpOwoKICBpZihocyA9PSBOVUxMKSB7CiAgICByZXR1 cm4gRVJSX01FTTsKICB9CiAgCiAgLy8gSW5pdGlhbGl6ZSB0aGUgc3RydWN0 dXJlLiAKICBocy0+ZmlsZSA9IE5VTEw7CiAgaHMtPmxlZnQgPSAwOwogIGhz LT5yZXRyaWVzID0gMDsKICAKICAvLyBUZWxsIFRDUCB0aGF0IHRoaXMgaXMg dGhlIHN0cnVjdHVyZSB3ZSB3aXNoIHRvIGJlIHBhc3NlZCBmb3Igb3VyCiAg Ly8gICBjYWxsYmFja3MuIAogIHRjcF9hcmcocGNiLCBocyk7CgogIC8vIFRl bGwgVENQIHRoYXQgd2Ugd2lzaCB0byBiZSBpbmZvcm1lZCBvZiBpbmNvbWlu ZyBkYXRhIGJ5IGEgY2FsbAogIC8vICAgdG8gdGhlIGh0dHBfcmVjdigpIGZ1 bmN0aW9uLiAKICB0Y3BfcmVjdihwY2IsIGh0dHBfcmVjdik7CgogIHRjcF9l cnIocGNiLCBjb25uX2Vycik7CiAgCiAgdGNwX3BvbGwocGNiLCBodHRwX3Bv bGwsIDQpOwogIHJldHVybiBFUlJfT0s7Cn0KCi8vLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kdm9pZCBodHRwZF9pbml0KHZvaWQg KmFyZykKewogIHN0cnVjdCB0Y3BfcGNiICpwY2I7CgogIHBjYiA9IHRjcF9u ZXcoKTsKICB0Y3BfYmluZChwY2IsIElQX0FERFJfQU5ZLCA4MCk7CiAgcGNi ID0gdGNwX2xpc3RlbihwY2IpOwogIHRjcF9hY2NlcHQocGNiLCBodHRwX2Fj Y2VwdCk7CiAgd2hpbGUoMSkKICAgIGN5Z190aHJlYWRfZGVsYXkoMTAwMCk7 Cn0KCi8vIGZ1bmNpbiBwcmluY2lwYWwKCnZvaWQgd2Vic2VydmVyKGN5Z19h ZGRyd29yZF90IHApCnsKICBsd2lwX2luaXQoKTsJCiAgc3lzX3RocmVhZF9u ZXcoaHR0cGRfaW5pdCwgKHZvaWQqKSJodHRwZCIsNyk7ICAKfQoKCnZvaWQg Y3lnX3VzZXJfc3RhcnQodm9pZCkKewogIAoKICAvL2luaWNpYWxpemFjaW8g ZGUgbGEgY2xhc2UKIGFkYy50b3BzYW1wbGVzPU5TQU1QTEVTOwogIGFkYy5u dW1zYW1wbGU9MDsgCiAgYWRjLmVuZXJneXNhbXBsZT0wOwogIGFkYy5lbmVy Z3l0b3A9MjE2RTY7ICAvLzFLVy9oCiAgYWRjLmNEYXRvPShjaGFyICopbWFs bG9jKHNpemVvZihjaGFyIFs0XSkpOwogIGFkYy5hcE1hcGVhcj1NYXBlYXI7 CiAgYWRjLmFwQ29udmVydGlvblN0YXJ0PUNvbnZlcnRpb25TdGFydDsKICBh ZGMuYXBSZWFkQWRjPVJlYWRBZGM7CiAgYWRjLmFwc2V0Q2hhbmVsPXNldENo YW5lbDsKICBhZGMuQURSTUVNT1JZPSZBRFJNRU1PUllLOwogIGFkYy5hcE1h cGVhcigpOwogIGFkYy5Db21kYXRvPTA7CiAgYWRjLkVuZXJneURhdG89bWFs bG9jKHNpemVvZihkb3VibGUgKikpOzsKICBhZGMucmF0ZWVuZXJneT0xMDsK ICBhZGMuTWF4ST1tYWxsb2Moc2l6ZW9mKGludCAqKSk7CiAgYWRjLk1pbkk9 bWFsbG9jKHNpemVvZihpbnQgKikpOwogICphZGMuTWF4ST0wOwogICphZGMu TWluST0weEZGRkY7CiAgYWRjLmluc3RhbnRWb2w9MDsKICBhZGMuaW5zdGFu dEN1cj0wOwogIGFkYy5udGZwaT0wOwogIGFkYy5udGZwdj0wOwogIGFkYy5m cD0xOwogIGFkYy5Db21hbmRvPTA7CiAgYWRjLnByb21lZGlvSD0wOwogIGFk Yy5wcm9tZWRpb1Y9MDsKCiAgdG9wcHc9bWFsbG9jKHNpemVvZihmbG9hdCAq KSk7CiAgKnRvcHB3PTA7CgogIGFwY29tYW5kbz1tYWxsb2Moc2l6ZW9mKGNo YXIgKls4XSkpOwogIGNhZGVuYWluZm89bWFsbG9jKHNpemVvZihjaGFyICpb MTAwXSkpOwogIC8vZmluIGRlIGluaWNpYWxpemFjaW9uCgogIGN5Z19tdXRl eF9pbml0KCZhZGNibG9jayk7CiAgY3lnX3NlbWFwaG9yZV9pbml0KCZzZW1h Zm9yb19uc2FtcGxlcywwKTsKICBjeWdfc2VtYXBob3JlX2luaXQoJnNlbWFm b3JvX0FEQywwKTsKCiAgY3lnX3RocmVhZF9jcmVhdGUoMTAsIHNhbXBsZXNf cHJvZ3JhbSwgKGN5Z19hZGRyd29yZF90KSAwLAoJCSAgICAgICJIaWxvIHBh cmEgQUQ3NjU0IGRlIEFOQUxPRyIsICh2b2lkICopIHN0YWNrWzBdLFNUQUNL X1NJWkUsCgkJICAgICAgJnNhbXBsZXNfdGhyZWFkLCZ0aHJlYWRfc1swXSk7 IAogIGN5Z190aHJlYWRfY3JlYXRlKDEwLHdlYnNlcnZlciwwLAoJCSAgICAi dGhyZWFkIiwgJnN0YWNrWzFdLFNUQUNLX1NJWkUsCgkJICAgICZodHRwX3Ro cmVhZCwmdGhyZWFkX3NbMV0pOwoKICBjeWdfdGhyZWFkX3Jlc3VtZShodHRw X3RocmVhZCk7IAogIGN5Z190aHJlYWRfcmVzdW1lKHNhbXBsZXNfdGhyZWFk KTsKCn0KCg== ------=_Part_8604_21853421.1175525310255 Content-Type: text/x-chdr; name=html.h; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f011dk9h Content-Disposition: attachment; filename="html.h" Content-length: 1639 CgpjaGFyIHZwYWdlX2luZGV4W109IjxIVE1MPjxIRUFEPiA8dGl0bGU+Q29u dGFkb3IgZGUgRW5lcmdpYSBFbGVjdHJpY2EgdjEuMSA8L3RpdGxlPiA8L0hF QUQ+IDxCT0RZPgo8U0NSSVBUPmRvY3VtZW50LndyaXRlKFwiPEg1PlRpcG8g ZGUgbmF2ZWdhZG9yIDogW1wiKyBuYXZpZ2F0b3IuYXBwTmFtZSArXCIsICBW ZXJzaW9uXCIrbmF2aWdhdG9yLmFwcFZlcnNpb24rXCJdPC9INT5cIik8L1ND UklQVD48SDE+Q29udGFkb3IgZGUgRW5lcmdpYSByZW1vdG88L0gxPjxURD48 QSBocmVmPVwibWFpbHRvOmpycXVldmVkb3JAZ21haWwuY29tP3N1YmplY3Q9 aW5mb3JtYWNpb25cIiB0aXRsZT1cInBydWViYVwiIGhyZWY9XCJJbmZvcm1h Y2lvbjogXCI+anJxdWV2ZWRvckBnbWFpbC5jb208L0E+PC9URD48UD5DYXJn YSBkZSBwcnVlYmEgY29uZmlndXJhZGEgYSAxS3cqaCwgdW5hIHZleiBzZSBh IHV0aWxpemFkbyBsYSBlbmVyZ2lhIGVsIGVxdWlwbyBhcGFnYSBsYSBjYXJn YSByZW1vdGE8L1A+PC9CT0RZPjwvSFRNTD4iOwoKY2hhciB2cGFnZV9mb3Jt W109Igo8dGFibGUgYWxpZ249XCJsZWZ0XCI+IDxURCBhbGlnbj1cImxlZnRc Ij48Rk9STSBvblN1Ym1pdD1cInJldHVybiBmYWxzZVwiICBuYW1lPVwiZm9y bXBydWViYVwiPiA8dHI+PHRkPkVudHJlIG5vbWJyZSA6IDwvdGQ+IDx0ZD48 SU5QVVQgVFlQRT1cInRleHRcIiBOQU1FPVwibm9tYnJlXCIgU0laRT0gMTA+ PC90ZD48L3RyPjx0cj48dGQ+RXF1aXRvczwvdGQ+PHRkPjxTRUxFQ1QgbmFt ZT1cImVxdWlwb3NcIj48T1BUSU9OIHZhbHVlPVwiMVwiPjE5Mi4xNjguMi4x PC9PUFRJT04+IDxPUFRJT04gdmFsdWU9XCIyXCIgPjE5Mi4xNjguMi4yPC9P UFRJT04+PC90ZD48L3RyPiA8dHI+IDx0ZD5Nb2R1bG8gMTwvdGQ+IDx0ZD48 SU5QVVQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm9wY2lvbjFcIiBhbGln bj1cInRvcFwiPjwvdGQ+PC90cj48VFI+IDxURD5SZWdpc3RyYXI8L1REPjxU RD48SU5QVVQgVFlQRT1cImJ1dHRvblwiIHZhbHVlPVwiUmVnaXN0ZXJcIiBv bkNsaWNrPVwicmVnaXN0ZXIoZG9jdW1lbnQuZm9ybXBydWViYS5ub21icmUu dmFsdWUpXCI+PC9URD48L1RSPgogPC9GT1JNPiAgPFRSPjxURD48SDMgYWxp Z249XCJsZWZ0XCI+TGlua3M8L0gzPjwvVEQ+PC9UUj48L3RhYmxlPgoiOwoK Y2hhciB2cGFnZV9jaWVycmVbXT0KIjwvQk9EWT48L0hUTUw+IjsK ------=_Part_8604_21853421.1175525310255--