add %ram% device support
"david zuhn" <[email protected]> Sat, 30 Sep 2006 21:58:58 -0500
| Newsgroups | gmane.comp.printing.ghostscript.patches |
|---|---|
| Message-ID | <[email protected]> |
------=_Part_9768_1366625.1159671538533 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Here is a set of patches that is a start at implementing the %ram*% family of devices. These follow the suggestion of using a directory in /tmp (or other suitable location) and real files on disk rather then a filesystem implemented solely in-memory. These patches address bug 226943, http://bugs.ghostscript.com/show_bug.cgi?id=226943 These are not yet complete, for the known reasons listed below. However, I think they're far enough along to allow me to ask a couple of questions about how to proceed. 1. This is only tested on Linux/x86 and Linux/AMD64. Those are the only platforms that I have development access to these days. The code uses mkdtemp, the status of which on Windows & MacOS I do not know. I don't think anything else is horribly non-portable. See gp_unifs.c/gp_create_scratch_directory. 2. There is OS level code in the gsioram.c file (which implements the %ram*% devices. This is opendir/readdir, plus unlink and rmdir. Again, I don't know if this is sufficiently portable for Win32 & Mac, or if I need to abstract that code out of gsio* files and into some compatibility layer. See gsioram.c/ramdisk_delete_all_files 3. The put_params code is needed by my reading of the PS Supplement, since InitializeAction is required to erase all existing files. 4. This device always creates a gsram-XXXXXX temporary directory when initialized. From what I can tell, this introduces a need for a shutdown process for devices. I've added the field to the device structure, and to all of the rest of the devices (which clearly don't need one). But I'm having trouble following the end-of-process code to figure out the best place to call a proposed new gs_iodev_shutdown function that will call the shutdown hook from procs. I think that an explicit call to a new gs_iodev_shutdown is better than playing games with atexit. Agreed? 5. BlockSize and LogicalSize have no real meaning in this code. I have a start at some real in-ram based code which do make use of these values. Suggested alternatives for the current defaults are welcome. See gsioram.c/ramdisk_get_params This patches have been developed against GS 8.54. Brief examinations of the SVN trunk lead me to believe that updating this patchset will be little trouble. ------=_Part_9768_1366625.1159671538533 Content-Type: text/x-patch; name="ramdisk-v8.54.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ramdisk-v8.54.patch" X-Attachment-Id: f_esquhebu SGVyZSBpcyBhIHNldCBvZiBwYXRjaGVzIHRoYXQgaXMgYSBzdGFydCBhdCBpbXBsZW1lbnRpbmcg dGhlICVyYW0qJSAKZmFtaWx5IG9mIGRldmljZXMuICAgVGhlc2UgZm9sbG93IHRoZSBzdWdnZXN0 aW9uIG9mIHVzaW5nIGEgZGlyZWN0b3J5CmluIC90bXAgKG9yIG90aGVyIHN1aXRhYmxlIGxvY2F0 aW9uKSBhbmQgcmVhbCBmaWxlcyBvbiBkaXNrIHJhdGhlcgp0aGVuIGEgZmlsZXN5c3RlbSBpbXBs ZW1lbnRlZCBzb2xlbHkgaW4tbWVtb3J5LiAgCgpUaGVzZSBwYXRjaGVzIGFkZHJlc3MgYnVnIDIy Njk0MywKCmh0dHA6Ly9idWdzLmdob3N0c2NyaXB0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MjI2OTQz CgpUaGVzZSBhcmUgbm90IHlldCBjb21wbGV0ZSwgZm9yIHRoZSBrbm93biByZWFzb25zIGxpc3Rl ZCBiZWxvdy4KSG93ZXZlciwgSSB0aGluayB0aGV5J3JlIGZhciBlbm91Z2ggYWxvbmcgdG8gYWxs b3cgbWUgdG8gYXNrIGEgY291cGxlCm9mIHF1ZXN0aW9ucyBhYm91dCBob3cgdG8gcHJvY2VlZC4K CjEuICBUaGlzIGlzIG9ubHkgdGVzdGVkIG9uIExpbnV4L3g4NiBhbmQgTGludXgvQU1ENjQuICBU aG9zZSBhcmUgdGhlCiAgICBvbmx5IHBsYXRmb3JtcyB0aGF0IEkgaGF2ZSBkZXZlbG9wbWVudCBh Y2Nlc3MgdG8gdGhlc2UgZGF5cy4KICAgIFRoZSBjb2RlIHVzZXMgbWtkdGVtcCwgdGhlIHN0YXR1 cyBvZiB3aGljaCBvbiBXaW5kb3dzICYgTWFjT1MKICAgIEkgZG8gbm90IGtub3cuICAgSSBkb24n dCB0aGluayBhbnl0aGluZyBlbHNlIGlzIGhvcnJpYmx5IG5vbi1wb3J0YWJsZS4KICAgIFNlZSBn cF91bmlmcy5jL2dwX2NyZWF0ZV9zY3JhdGNoX2RpcmVjdG9yeS4gCgoyLiAgVGhlcmUgaXMgT1Mg bGV2ZWwgY29kZSBpbiB0aGUgZ3Npb3JhbS5jIGZpbGUgKHdoaWNoIGltcGxlbWVudHMgdGhlCiAg ICAlcmFtKiUgZGV2aWNlcy4gICBUaGlzIGlzIG9wZW5kaXIvcmVhZGRpciwgcGx1cyB1bmxpbmsg YW5kIHJtZGlyLgogICAgQWdhaW4sIEkgZG9uJ3Qga25vdyBpZiB0aGlzIGlzIHN1ZmZpY2llbnRs eSBwb3J0YWJsZSBmb3IgV2luMzIgJgogICAgTWFjLCBvciBpZiBJIG5lZWQgdG8gYWJzdHJhY3Qg dGhhdCBjb2RlIG91dCBvZiBnc2lvKiBmaWxlcyBhbmQgaW50bwogICAgc29tZSBjb21wYXRpYmls aXR5IGxheWVyLgogICAgU2VlIGdzaW9yYW0uYy9yYW1kaXNrX2RlbGV0ZV9hbGxfZmlsZXMKCjMu ICBUaGUgcHV0X3BhcmFtcyBjb2RlIGlzIG5lZWRlZCBieSBteSByZWFkaW5nIG9mIHRoZSBQUyBT dXBwbGVtZW50LAogICAgc2luY2UgSW5pdGlhbGl6ZUFjdGlvbiBpcyByZXF1aXJlZCB0byBlcmFz ZSBhbGwgZXhpc3RpbmcgZmlsZXMuCgo0LiAgVGhpcyBkZXZpY2UgYWx3YXlzIGNyZWF0ZXMgYSBn c3JhbS1YWFhYWFggdGVtcG9yYXJ5IGRpcmVjdG9yeQogICAgd2hlbiBpbml0aWFsaXplZC4gICBG cm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBpbnRyb2R1Y2VzIGEgbmVlZAogICAgZm9yIGEgc2h1 dGRvd24gcHJvY2VzcyBmb3IgZGV2aWNlcy4gIEkndmUgYWRkZWQgdGhlIGZpZWxkIHRvIHRoZQog ICAgZGV2aWNlIHN0cnVjdHVyZSwgYW5kIHRvIGFsbCBvZiB0aGUgcmVzdCBvZiB0aGUgZGV2aWNl cyAod2hpY2gKICAgIGNsZWFybHkgZG9uJ3QgbmVlZCBvbmUpLiAgIEJ1dCBJJ20gaGF2aW5nIHRy b3VibGUgZm9sbG93aW5nIHRoZQogICAgZW5kLW9mLXByb2Nlc3MgY29kZSB0byBmaWd1cmUgb3V0 IHRoZSBiZXN0IHBsYWNlIHRvIGNhbGwgYSAKICAgIHByb3Bvc2VkIG5ldyBnc19pb2Rldl9zaHV0 ZG93biBmdW5jdGlvbiB0aGF0IHdpbGwgY2FsbCB0aGUgc2h1dGRvd24gCiAgICBob29rIGZyb20g cHJvY3MuICAKCiAgICBJIHRoaW5rIHRoYXQgYW4gZXhwbGljaXQgY2FsbCB0byBhIG5ldyBnc19p b2Rldl9zaHV0ZG93biBpcyBiZXR0ZXIKICAgIHRoYW4gcGxheWluZyBnYW1lcyB3aXRoIGF0ZXhp dC4gICBBZ3JlZWQ/Cgo1LiAgQmxvY2tTaXplIGFuZCBMb2dpY2FsU2l6ZSBoYXZlIG5vIHJlYWwg bWVhbmluZyBpbiB0aGlzIGNvZGUuICBJIGhhdmUKICAgIGEgc3RhcnQgYXQgc29tZSByZWFsIGlu LXJhbSBiYXNlZCBjb2RlIHdoaWNoIGRvIG1ha2UgdXNlIG9mIHRoZXNlCiAgICB2YWx1ZXMuICAg U3VnZ2VzdGVkIGFsdGVybmF0aXZlcyBmb3IgdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIHdlbGNv bWUuCiAgICBTZWUgZ3Npb3JhbS5jL3JhbWRpc2tfZ2V0X3BhcmFtcwoKClRoaXMgcGF0Y2hlcyBo YXZlIGJlZW4gZGV2ZWxvcGVkIGFnYWluc3QgR1MgOC41NC4gIEJyaWVmIGV4YW1pbmF0aW9ucyBv Zgp0aGUgU1ZOIHRydW5rIGxlYWQgbWUgdG8gYmVsaWV2ZSB0aGF0IHVwZGF0aW5nIHRoaXMgcGF0 Y2hzZXQgd2lsbCBiZSBsaXR0bGUKdHJvdWJsZS4KCgpQYXRjaCBSb2FkbWFwOgoKTXVjaCBvZiBn c2lvZGlzay5jIHdhcyB1c2VkIGFzIGluc3BpcmF0aW9uIGZvciBnc2lvcmFtLmMsIHdoaWNoIGlz IHRoZSBmaWxlCndoaWNoIGltcGxlbWVudHMgdGhlIG5ldyBkZXZpY2UuICBUaGUgbWFwIGZpbGUg Y29kZSB3YXMgZ29pbmcgdG8gYmUgdXNlZnVsCmZvciBib3RoIGdzaW9kaXNrIGFuZCBnc2lvcmFt LCBzbyBJIG1vdmVkIGl0IGludG8gbmV3IGZpbGVzIG5hbWVkCmdzaW9tYXAuW2NoXS4KCmxpYi5t YWssIGludC5tYWsgYW5kIGdzLm1hayBhbGwgaGFkIGVudHJpZXMgYWRkZWQgZm9yIGdzaW9yYW0u YywgcGx1cyB0aGUgCmFkZGl0aW9uIG9mIGRlcGVuZGVuY2llcyBmb3IgZ3Npb21hcC5bY2hdCgpn cF91bmlmcy5jIGdldHMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGdwX2NyZWF0ZV9zY3JhdGNoX2Rp cmVjdG9yeS4gIGdwLmgKZ2V0cyB0aGUgcHJvdG90eXBlLiAgY29uZmlndXJlLmFjIGdldHMgYSBu ZXcgdGVzdCBmb3IgbWtkdGVtcCwgYW5kCk1ha2VmaWxlLmluIGdldHMgYSBuZXcgY2FwYWJpbGl0 eSBkZWZpbmUuICBJZiBhbGwgcGxhdGZvcm1zIGNhbiBiZSBleHBlY3RlZAp0byBoYXZlIHRoaXMg ZnVuY3Rpb24sIHRoZXNlIHRlc3RzIGFyZW4ndCBzbyB1c2VmdWwuICAKCnRlc3RzL3JhbS1pbml0 LnBzIGFuZCB0ZXN0cy9yYW0td3JpdGUxLnBzIGFyZSB0aGUgY29kZSBJIHVzZWQgdG8gdGVzdCB0 aGF0CnRoaXMgc3R1ZmYgYWN0dWFsbHkgd29ya3MuICAgCgpUaGUgcmVtYWluZGVyIG9mIHRoZSBw YXRjaGVzIGFyZSBhZGRpbmcgdGhlIGlvZGV2IHByb2NzIGVudHJ5IGZvciB0aGUKc2h1dGRvd24g ZnVuY3Rpb24gcGlvaW50ZXIuCgoKCkFwcGx5IHdpdGggInBhdGNoIC1wMCA8IHRoaXMtZmlsZSIK CgpJbmRleDogc3JjL2dzaW9kaXNrLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3JjL2dzaW9kaXNrLmMJKC4u Li90YWdzL2dzOC41NCkJKHJldmlzaW9uIDIyKQorKysgc3JjL2dzaW9kaXNrLmMJKC4uLi90cnVu ay9ncykJKHJldmlzaW9uIDIyKQpAQCAtMzQsNjUgKzM0LDggQEAKICAqIGxvZ2ljYWwgZmlsZSBu YW1lcy4gIChUaGlzIG1heSBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUuICBCdXQgZm9yCiAgKiBu b3cgaXQgbWFrZXMgdGhlIGltcGxlbWVudGF0aW9uIGVhc2llci4pCiAgKgotICogQSBzcGVjaWFs IHRoYW5rcyBpcyBnaXZlbiBmb3IgTm9yaXl1a2kgTWF0c3VzaGltYSBmb3IgaGlzIGNyZWF0aW9u IG9mCi0gKiB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgbWFwcGluZyBmaWxlIGxvZ2ljLgog ICovCiAKLS8qCi0gKiBNYXBwaW5nIGZpbGU6Ci0gKgotICogVGhlIG1hcHBpbmcgZmlsZSBpcyB1 c2VkIHRvIGNyZWF0ZSBhICdmbGF0IGRpc2snIGZpbGUgc3RydWN0dXJlLiAgQWxsIGZpbGUKLSAq IGFyZSBzdG9yZWQgaW4gYSBzaW5nbGUgZGlyZWN0b3J5LiAgVG8gYWNjb21wbGlzaCB0aGlzLCB0 aGUgbG9naWNhbCBmaWxlCi0gKiBuYW1lLCBpbmNsdWRpbmcgdGhlIHBhdGgsIGFyZSBzdG9yZWQg aW4gYSAnbWFwcGluZyBmaWxlJy4gIEZvciBlYWNoIGZpbGUgaW4KLSAqIGZsYXQgZGlzaywgdGhl cmUgaXMgYSBzaW5nbGUgbGluZSBlbnRyeSBpbiB0aGUgbWFwcGluZyBmaWxlLiAgVGhlIG1hcHBp bmcKLSAqIGZpbGUgZW50cnkgYWxzbyBpbmNsdWRlcyBhIGZpbGUgbnVtYmVyIHZhbHVlLiAgVGhp cyBmaWxlIG51bWJlciBpcyB1c2VkIGFzCi0gKiB0aGUgYWN0dWFsIGZpbGUgbmFtZSBpbiB0aGUg ZmxhdCBkaXNrIGRpcmVjdG9yeS4KLSAqCi0gKiBUaGUgZmxhdCBkaXNrIGZvcm1hdCBhbmQgdGhl IG1hcHBpbmcgZmlsZSBhcmUgdXNlZCB0byBlbGltaW5hdGUgcHJvYmxlbXMKLSAqIHdpdGggdHJ5 aW5nIHRvIGVtdWxhdGUgYSBsb2dpY2FsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb24gZGlmZmVyZW50 IG9wZXJhdGluZwotICogc3lzdGVtcyB3aGljaCBoYXZlIGRpZmZlcmVudCBydWxlcyBhYm91dCB3 aGF0IGlzIGFsbG93ZWQgYW5kIG5vdCBhbGxvd2VkCi0gKiBpbiBhIGZpbGUgbmFtZSBhbmQgcGF0 aC4KLSAqCi0gKiBNYXBwaW5nIGZpbGUgZm9ybWF0OgotICoKLSAqIEZpcnN0IGxpbmU6Ci0gKiBG aWxlVmVyc2lvbjx0YWI+MTx0YWI+VGhpcyBmaWxlIGlzIG1hY2hpbmUgZ2VuZXJhdGVkLiBObyBu b3QgZWRpdC48bmV3bGluZT4KLSAqCi0gKiBSZW1haW5pbmcgbGluZXM6Ci0gKiA8c3BhY2U+Zmls ZW51bWJlcjx0YWI+ZmlsZV9uYW1lPG5ld2xpbmU+Ci0gKgotICogVGhlIGZpcnN0IGxpbmUgb2Yg dGhlIG1hcHBpbmcgZmlsZSBjb250YWlucyB0aGUgdGV4dCAiRmlsZVZlcnNpb24iIGZvbGxvd2Vk Ci0gKiBieSBhIHRhYiBjaGFyYWN0ZXIuIFRoZW4gdGhlIG51bWJlciAxIChhc2NpaSAtIDMxIGhl eCkgZm9sbG93ZWQgYnkgYSB0YWIKLSAqIGFuZCB0aGVuIGEgc2hvcnQgbWVzc2FnZSB0ZWxsaW5n IHBlb3BsZSB0byBub3QgZWRpdCB0aGUgZmlsZS4gIFRoaXMgaXMgYW4KLSAqIGF0dGVtcHQgdG8g a2VlcCB0aGUgbWFwcGluZyBmaWxlIGZyb20gYmVpbmcgY29ycnVwdGVkLgotICoKLSAqIFRoZSBm aWxlIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgYSAiMSIuICBUaGlzIGlzIHRoZSBvbmx5IHZlcnNp b24gY3VycmVudGx5Ci0gKiBzdXBwb3J0ZWQuICBUaGlzIGxpbmUgZXhpc3RzIGluIGNhc2UgaXQg aXMgbmVjZXNzYXJ5IHRvIG1vZGlmeSB0aGUgbWFwcGluZwotICogZmlsZSBmb3JtYXQgYXQgc29t ZSBmdXR1cmUgZGF0ZS4gIFRoZSBwcmVzZW5jZSBvZiBhIHZlcnNpb24gbnVtYmVyIGFsbG93cwot ICogZm9yIHNlYW1sZXNzIHVwZ3JhZGluZyBvZiB0aGUgZmlsZSBmb3JtYXQuCi0gKgotICogVGhl IGZvcm1hdCBvZiB0aGUgZW50cnkgbGluZXMgaGFzIGJlZW4gY3JlYXRlZCBzbyB0aGF0IHRoZSBy ZWFkIGVudHJ5Ci0gKiByb3V0aW5lIHdvdWxkOgotICogMS4gR3JhYiB0aGUgbnVtYmVyIChpbmNs dWRpbmcgdGhlIHNwYWNlIGlmIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlYWQuKQotICogMi4g R3JhYiB0aGUgdGFiCi0gKiAzLiBHcmFiIGV2ZXJ5dGhpbmcgdXAgdG8gYSBsaW5lZmVlZCBvciBj YXJyaWFnZSByZXR1cm4gYXMgdGhlIGZpbGUgbmFtZS4KLSAqIDQuIEdyYWIgYW55IHJlbWFpbmlu ZyBsaW5lZmVlZHMvY2FycmlhZ2UgcmV0dXJucy4gTm90ZSB0aGlzIHN0ZXAgbWlnaHQKLSAqIGdy YWIgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbmV4dCBsaW5lIGlmIHRoZXJlIGlzIG9ubHkg YSBzaW5nbGUKLSAqIGNhcnJpYWdlIHJldHVybiBvciBsaW5lZmVlZC4gIFNpbmNlIGl0IGlzIG5v dCBkZXNpcmVhYmxlIHRvIGhhdmUgdG8gd29ycnkKLSAqIGFib3V0IGRvaW5nIGFuICd1bmdldCBj aGFyYWN0ZXInLCBhbiBleHRyYSBzcGFjZSBoYXMgYmVlbiBwdXQgYXQgdGhlCi0gKiBiZWdpbm5p bmcgb2YgZWFjaCBsaW5lLiAgVGhlIGV4dHJhIGxvZ2ljIHdpdGggdGhlIGxpbmVmZWVkL2NhcnJp YWdlIHJldHVybgotICogaXMgcHJpbWFyaWx5IHRoZXJlIGluIGNhc2Ugc29tZW9uZSBhY2NpZGVu dGFsbHkgbWFuZ2xlcyB0aGUgZmlsZSBieSBsb29raW5nCi0gKiBhdCBpdCB3aXRoIGEgdGV4dCBl ZGl0b3IuCi0gKgotICogVGhpcyBiYXNpY2FsbHkgYWxsb3dzIGZvciBhbnkgZmlsZSBuYW1lIGV4 Y2VwdCBvbmUgdGhhdCBpbmNsdWRlcwotICogYSB6ZXJvLCBhIGNhcnJpYWdlIHJldHVybiwgb3Ig YSBsaW5lZmVlZC4gIFRoZSByZXF1aXJlbWVudCBmb3IgZXhjbHVkaW5nCi0gKiB6ZXJvIGlzIHRo YXQgdGhlcmUgYXJlIHRvbyBtYW55IEMgc3RyaW5nIHJvdXRpbmVzIHRoYXQgYXNzdW1lIHplcm8g aXMKLSAqIGEgc3RyaW5nIHRlcm1pbmF0b3IgKGluY2x1ZGluZyBtdWNoIG9mIHRoZSBjdXJyZW50 IEdob3N0c2NyaXB0IGNvZGUgYW5kCi0gKiB0aGUgY3VycmVudCBtYXAgaGFuZGxlcikuICBUaGUg Y2FycmlhZ2UgcmV0dXJuL2xpbmVmZWVkIHJlcXVpcmVtZW50IGlzCi0gKiB0aGVyZSBzaW1wbHkg YmVjYXVzZSBpdCBpcyBiZWluZyB1c2VkIGFzIGEgdGVybWluYXRvciBmb3IgdGhlIGZpbGUgbmFt ZS4KLSAqIEl0IGNvdWxkIGVhc2lseSBiZSBlbGltaW5hdGVkIGJ5IGFkZGluZyBhIHplcm8gYXMg dGhlIG5hbWUgdGVybWluYXRvci4KLSAqIFRoZSBvbmx5IGRpc2FkdmFudGFnZSBpcyB0aGF0IHRo ZSBmaWxlIGlzIG5vIGxvbmdlciB0b3RhbGx5IHByaW50YWJsZSBhc2NpaS4KLSAqLyAKIAogI2lu Y2x1ZGUgImVycm5vXy5oIgogI2luY2x1ZGUgInN0cmluZ18uaCIKQEAgLTEwNSw2ICs0OCw3IEBA CiAjaW5jbHVkZSAiZ3NzdHJ1Y3QuaCIKICNpbmNsdWRlICJneGlvZGV2LmgiCiAjaW5jbHVkZSAi Z3N1dGlsLmgiCisjaW5jbHVkZSAiZ3Npb21hcC5oIgogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVz ICovCiBwcml2YXRlIGlvZGV2X3Byb2NfaW5pdChpb2Rldl9kaXNrbl9pbml0KTsKQEAgLTEyNCw3 ICs2OCw3IEBACiBjb25zdCBneF9pb19kZXZpY2UgdmFybmFtZSA9IFwKIHsgXAogICAgIGRpc2tu YW1lLCAiRmlsZVN5c3RlbSIsIFwKLSAgICB7aW9kZXZfZGlza25faW5pdCwgaW9kZXZfbm9fb3Bl bl9kZXZpY2UsIFwKKyAgICB7aW9kZXZfZGlza25faW5pdCwgaW9kZXZfbm9fc2h1dGRvd24sIGlv ZGV2X25vX29wZW5fZGV2aWNlLAkgICAgIFwKICAgICAgTlVMTCAvKiBubyBsb25nZXIgdXNlZCAq LyAsIGlvZGV2X2Rpc2tuX2ZvcGVuLCBpb2Rldl9vc19mY2xvc2UsIFwKICAgICAgZGlza25fZGVs ZXRlLCBkaXNrbl9yZW5hbWUsIGRpc2tuX3N0YXR1cywgXAogICAgICBpb2Rldl9ub19lbnVtZXJh dGVfZmlsZXMsIC8qIE9ubHkgdW50aWwgd2UgaGF2ZSBhIHJvb3QgbG9jYXRpb24gKi8gXApAQCAt MTU3LDMwICsxMDEsOSBAQAogZ3NfcHJpdmF0ZV9zdF9wdHJzMShzdF9kaXNrbl9zdGF0ZSwgc3Ry dWN0IGRpc2tuX3N0YXRlX3MsICJkaXNrbl9zdGF0ZSIsCiAgICAgZGlza25fc3RhdGVfZW51bV9w dHJzLCBkaXNrbl9zdGF0ZV9yZWxvY19wdHJzLCByb290KTsKIAotI2RlZmluZSBNQVBfRklMRV9O QU1FICJtYXAudHh0IgotI2RlZmluZSBURU1QX0ZJTEVfTkFNRSAiVG1wLnR4dCIKLSNkZWZpbmUg TUFQX0ZJTEVfVkVSU0lPTiAxCi0jZGVmaW5lIEluaXRpYWxOdW1iZXIgMAotI2RlZmluZSBCVUZG RVJfTEVOR1RIIGdwX2ZpbGVfbmFtZV9zaXplb2YKIAotdHlwZWRlZiBzdHJ1Y3QgbWFwX2ZpbGVf ZW51bV9zIHsKLSAgICBGSUxFICogIHN0cmVhbTsgICAgICAgICAvKiBzdHJlYW0gdG8gbWFwIGZp bGUgKi8KLSAgICBjaGFyICogIHBhdHRlcm47ICAgICAgICAvKiBwYXR0ZXJuIHBvaW50ZXIgICAg Ki8KLSAgICBjaGFyICogIHJvb3Q7ICAgICAgICAgICAvKiByb290IHBhdGggcG9pbnRlciAgKi8K LSAgICBnc19tZW1vcnlfdCAqIG1lbW9yeTsgICAvKiBtZW1vcnkgc3RydWN0dXJlIHVzZWQgKi8K LX0gbWFwX2ZpbGVfZW51bTsKIAotZ3NfcHJpdmF0ZV9zdF9wdHJzMihzdF9tYXBfZmlsZV9lbnVt LCBzdHJ1Y3QgbWFwX2ZpbGVfZW51bV9zLCAibWFwX2ZpbGVfZW51bSIsCi0gICAgbWFwX2ZpbGVf ZW51bV9lbnVtX3B0cnMsIG1hcF9maWxlX2VudW1fcmVsb2NfcHRycywgcGF0dGVybiwgcm9vdCk7 CiAKLXByaXZhdGUgdm9pZCAqIG1hcF9maWxlX2VudW1faW5pdChnc19tZW1vcnlfdCAqLCBjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1wcml2YXRlIGJvb2wgbWFwX2ZpbGVfZW51bV9uZXh0 KHZvaWQgKiwgY2hhciAqKTsKLXByaXZhdGUgdm9pZCBtYXBfZmlsZV9lbnVtX2Nsb3NlKHZvaWQg Kik7Ci1wcml2YXRlIGJvb2wgbWFwX2ZpbGVfbmFtZV9nZXQoY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICosIGNoYXIgKik7Ci1wcml2YXRlIHZvaWQgbWFwX2ZpbGVfbmFtZV9hZGQoY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICopOwotcHJpdmF0ZSB2b2lkIG1hcF9maWxlX25hbWVfcmVuKGNvbnN0 IGNoYXIqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1wcml2YXRlIHZvaWQgbWFwX2Zp bGVfbmFtZV9kZWwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotCiBwcml2YXRlIGludAog aW9kZXZfZGlza25faW5pdChneF9pb19kZXZpY2UgKiBpb2RldiwgZ3NfbWVtb3J5X3QgKiBtZW0p CiB7CkBAIC0zOTksNDg1ICszMjIsMyBAQAogICAgIHJldHVybiAwOwogfQogCi0vKgotICogT3Bl biB0aGUgc3BlY2lmaWVkIGZpbGUgd2l0aCBzcGVjaWZpZWQgYXR0cmlidXRlcy4KLSAqCi0gKiBy b290cGF0aCAtIFBhdGggdG8gYmFzZSBkaXNrIGxvY2F0aW9uLgotICogZmlsZW5hbWUgLSBGaWxl IG5hbWUgc3RyaW5nCi0gKiBhdHRyaWJ1dGVzIC0gRmlsZSBhdHRyaWJ1dGVzIHN0cmluZwotICog UmV0dXJucyAtIE5VTEwgaWYgZXJyb3IsIGZpbGUgc3RydWN0dXJlIHBvaW50ZXIgaWYgbm8gZXJy b3IKLSAqLwotcHJpdmF0ZSBGSUxFICoKLU1hcEZpbGVPcGVuKGNvbnN0IGNoYXIgKiByb290cGF0 aCwgY29uc3QgY2hhciAqIGZpbGVuYW1lLCBjb25zdCBjaGFyICogYXR0cmlidXRlcykKLXsKLSAg ICBjaGFyIGZ1bGxuYW1lW0JVRkZFUl9MRU5HVEhdOwotCi0gICAgaWYgKHN0cmxlbihyb290cGF0 aCkgKyBzdHJsZW4oZmlsZW5hbWUpID49IEJVRkZFUl9MRU5HVEgpCi0gICAgICAgIHJldHVybiBO VUxMOwotICAgIHNwcmludGYoZnVsbG5hbWUsICIlcyVzIiwgcm9vdHBhdGgsIGZpbGVuYW1lKTsK LSAgICByZXR1cm4gZ3BfZm9wZW4oZnVsbG5hbWUsIGF0dHJpYnV0ZXMpOwotfQotCi0vKgotICog UmVhZCBtYXAgZmlsZSB2ZXJzaW9uIChmaXJzdCBsaW5lKQotICoKLSAqIG1hcGZpbGUgLSBNYXBw aW5nIGZpbGUgc3RydWN0dXJlIHBvaW50ZXIKLSAqIHZhbHVlIC0gcG9pbnRlciB0byB2ZXJzaW9u IG51bWJlciBzdG9yYWdlIGxvY2F0aW9uCi0gKiBSZXR1cm5zIDEgaWYgZGF0YSByZWFkLCBlbHNl IDAKLSAqLwotcHJpdmF0ZSBpbnQKLU1hcEZpbGVSZWFkVmVyc2lvbihGSUxFICogbWFwZmlsZSwg aW50ICogdmFsdWUpCi17Ci0gICAgaW50IGNvZGUgPSBmc2NhbmYobWFwZmlsZSwgIkZpbGVWZXJz aW9uXHQlZFx0IiwgdmFsdWUpID09IDEgPyAxIDogMDsKLSAgICBpbnQgYzsKLQotICAgIC8qIFNr aXAgY29tbWVudCBvbiB2ZXJzaW9uIGxpbmUuICovCi0gICAgZG8gewotCWMgPSBmZ2V0YyhtYXBm aWxlKTsKLSAgICB9IHdoaWxlIChjICE9IEVPRiAmJiBjICE9ICdcbicgJiYgYyAhPSAnXHInKTsK LQotICAgIC8qIENsZWFuIHVwIGFueSB0cmFpbGluZyBsaW5lZmVlZHMgb3IgY2FycmlhZ2UgcmV0 dXJucyAqLwotICAgIHdoaWxlIChjICE9IEVPRiAmJiAoYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJykp IHsKLQljID0gZmdldGMobWFwZmlsZSk7Ci0gICAgfQotICAgIHJldHVybiBjb2RlOwotfQotCi0v KgotICogV3JpdGUgYSBtYXAgZmlsZSB2ZXJzaW9uIChmaXJzdCBsaW5lKSBpbnRvIHRoZSBtYXAg ZmlsZQotICoKLSAqIHN0cmVhbSAtIEZpbGUgc3RydWN0dXJlIHBvaW50ZXIKLSAqIHZhbHVlIC0g dmVyc2lvbiBudW1iZXIKLSAqLwotcHJpdmF0ZSB2b2lkCi1NYXBGaWxlV3JpdGVWZXJzaW9uKEZJ TEUgKiBtYXBmaWxlLCBpbnQgdmFsdWUpCi17Ci0gICAgZnByaW50ZihtYXBmaWxlLAotICAgIAki RmlsZVZlcnNpb25cdCVkXHRUaGlzIGZpbGUgaXMgbWFjaGluZSBnZW5lcmF0ZWQuICBEbyBub3Qg ZWRpdC5cbiIsCi0gICAgCXZhbHVlKTsKLX0KLQotLyoKLSAqIFJlYWQgYW4gZW50cnkgaW4gdGhl IG1hcCBmaWxlCi0gKgotICogbWFwZmlsZSAtIE1hcHBpbmcgZmlsZSBzdHJ1Y3R1cmUgcG9pbnRl cgotICogbmFtZWJ1ZiAtIEJ1ZmZlciBmb3IgdGhlIGZpbGUgbmFtZSBzdG9yYWdlCi0gKiB2YWx1 ZSAtIHBvaW50ZXIgdG8gZmlsZSBudW1iZXIgc3RvcmFnZSBsb2NhdGlvbgotICogUmV0dXJucyAx IGlmIGRhdGEgcmVhZCwgZWxzZSAwCi0gKi8KLXByaXZhdGUgaW50Ci1NYXBGaWxlUmVhZChGSUxF ICogbWFwZmlsZSwgY2hhciAqIG5hbWVidWYsIGludCAqIHZhbHVlKQotewotICAgIGludCBjb3Vu dCA9IDA7Ci0gICAgaW50IGM7Ci0KLSAgICAvKiBHZXQgdGhlIGZpbGUgbnVtYmVyICovCi0gICAg aWYgKGZzY2FuZihtYXBmaWxlLCAiJWRcdCIsIHZhbHVlKSAhPSAxKQotICAgIAlyZXR1cm4gMDsK LSAgICAKLSAgICAvKiBHZXQgdGhlIGZpbGUgbmFtZSAqLwotICAgIGRvIHsKLQluYW1lYnVmW2Nv dW50KytdID0gYyA9IGZnZXRjKG1hcGZpbGUpOwotICAgIH0gd2hpbGUgKGNvdW50IDwgQlVGRkVS X0xFTkdUSCAmJiBjICE9IEVPRiAmJiBjICE9ICdcbicgJiYgYyAhPSAnXHInKTsKLSAgICBuYW1l YnVmWy0tY291bnRdID0gMDsgICAgLyogVGVybWluYXRlIGZpbGUgbmFtZSAqLwotCi0gICAgLyog Q2xlYW4gdXAgYW55IHRyYWlsaW5nIGxpbmVmZWVkcyBvciBjYXJyaWFnZSByZXR1cm5zICovCi0g ICAgd2hpbGUgKGMgIT0gRU9GICYmIChjID09ICdcbicgfHwgYyA9PSAnXHInKSkgewotCWMgPSBm Z2V0YyhtYXBmaWxlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQgIT0gMCA/IDE6IDA7Ci19 Ci0KLS8qCi0gKiBXcml0ZSBhbiBlbnRyeSBpbiB0aGUgbWFwIGZpbGUKLSAqCi0gKiBzdHJlYW0g LSBGaWxlIHN0cnVjdHVyZSBwb2ludGVyCi0gKiBuYW1lYnVmIC0gQnVmZmVyIGZvciB0aGUgZmls ZSBuYW1lIHN0b3JhZ2UKLSAqIHZhbHVlIC0gZmlsZSBudW1iZXIKLSAqLwotcHJpdmF0ZSB2b2lk Ci1NYXBGaWxlV3JpdGUoRklMRSAqIG1hcGZpbGUsIGNvbnN0IGNoYXIgKiBuYW1lYnVmLCBpbnQg dmFsdWUpCi17Ci0gICAgZnByaW50ZihtYXBmaWxlLCAiICVkXHQlc1xuIiwgdmFsdWUsIG5hbWVi dWYpOwotfQotCi0vKgotICogUmVtb3ZlIHRoZSBzcGVjaWZpZWQgZmlsZSAKLSAqCi0gKiByb290 cGF0aCAtIFBhdGggdG8gYmFzZSBkaXNrIGxvY2F0aW9uLgotICogZmlsZW5hbWUgLSBGaWxlIG5h bWUgc3RyaW5nCi0gKi8KLXByaXZhdGUgdm9pZAotTWFwRmlsZVVubGluayhjb25zdCBjaGFyICog cm9vdHBhdGgsIGNvbnN0IGNoYXIgKiBmaWxlbmFtZSkKLXsKLSAgICBjaGFyIGZ1bGxuYW1lW0JV RkZFUl9MRU5HVEhdOwotCi0gICAgaWYgKHN0cmxlbihyb290cGF0aCkgKyBzdHJsZW4oZmlsZW5h bWUpID49IEJVRkZFUl9MRU5HVEgpCi0gICAgICAgIHJldHVybjsKLSAgICBzcHJpbnRmKGZ1bGxu YW1lLCAiJXMlcyIsIHJvb3RwYXRoLCBmaWxlbmFtZSk7Ci0gICAgdW5saW5rKGZ1bGxuYW1lKTsK LX0KLQotLyoKLSAqIFJlbmFtZSB0aGUgc3BlY2lmaWVkIGZpbGUgdG8gbmV3IHNwZWNpZmllZCBu YW1lCi0gKgotICogcm9vdHBhdGggLSBQYXRoIHRvIGJhc2UgZGlzayBsb2NhdGlvbi4KLSAqIG9s ZGZpbGVuYW1lIC0gT2xkIGZpbGUgbmFtZSBzdHJpbmcKLSAqIG5ld2ZpbGVuYW1lIC0gTmV3IGZp bGUgbmFtZSBzdHJpbmcKLSAqLwotcHJpdmF0ZSB2b2lkCi1NYXBGaWxlUmVuYW1lKGNvbnN0IGNo YXIgKiByb290cGF0aCwgY29uc3QgY2hhciAqIG5ld2ZpbGVuYW1lLCBjb25zdCBjaGFyICogb2xk ZmlsZW5hbWUpCi17Ci0gICAgY2hhciBvbGRmdWxsbmFtZVtCVUZGRVJfTEVOR1RIXTsKLSAgICBj aGFyIG5ld2Z1bGxuYW1lW0JVRkZFUl9MRU5HVEhdOwotCi0gICAgaWYgKHN0cmxlbihyb290cGF0 aCkgKyBzdHJsZW4ob2xkZmlsZW5hbWUpID49IEJVRkZFUl9MRU5HVEgpCi0gICAgICAgIHJldHVy bjsKLSAgICBpZiAoc3RybGVuKHJvb3RwYXRoKSArIHN0cmxlbihuZXdmaWxlbmFtZSkgPj0gQlVG RkVSX0xFTkdUSCkKLSAgICAgICAgcmV0dXJuOwotICAgIHNwcmludGYob2xkZnVsbG5hbWUsICIl cyVzIiwgcm9vdHBhdGgsIG9sZGZpbGVuYW1lKTsKLSAgICBzcHJpbnRmKG5ld2Z1bGxuYW1lLCAi JXMlcyIsIHJvb3RwYXRoLCBuZXdmaWxlbmFtZSk7Ci0gICAgcmVuYW1lKG9sZGZ1bGxuYW1lLCBu ZXdmdWxsbmFtZSk7Ci19Ci0KLS8qCi0gKiBNYXBUb0ZpbGUKLSAqCi0gKiBTZWFyY2ggZm9yIG1h cHBlZCBudW1iZXIgZnJvbSBtYXAgZmlsZSB3aXRoIHJlcXVpZWQgbmFtZS4gSWYgc2FtZSBuYW1l IGV4aXN0LAotICogZmlyc3QgKGxvd2VzdCBudW1iZXIpIHdpbGwgYmUgcmV0dXJuZWQuCi0gKiBy b290cGF0aCAgICAgICAgY2hhciogICBzdHJpbmcgb2YgdGhlIGJhc2UgcGF0aCB3aGVyZSBpbiBk aXNrMCByZXNpZGUgKEM6XFBTXERpc2swXCkKLSAqIG5hbWUgICAgICAgICAgICBjaGFyKiAgIHN0 cmluZyB0byBzZWFyY2ggcGF0dGVybiBmb3IgZnVsbCBtYXRjaCAoZm9udFxSeXVtaW4tTGlnaHQp Ci0gKiByZXR1cm5zCSAgICAtMSBpZiBmaWxlIG5vdCBmb3VuZCwgZmlsZSBudW1iZXIgaWYgZm91 bmQuCi0gKi8KLXByaXZhdGUgaW50Ci1NYXBUb0ZpbGUoY29uc3QgY2hhciogcm9vdHBhdGgsIGNv bnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgRklMRSAqIG1hcGZpbGU7Ci0gICAgaW50IGQgPSAtMTsK LSAgICBjaGFyIGZpbGVuYW1lW0JVRkZFUl9MRU5HVEhdOwotICAgIGludCBmaWxlX3ZlcnNpb247 Ci0KLSAgICBtYXBmaWxlID0gTWFwRmlsZU9wZW4ocm9vdHBhdGgsIE1BUF9GSUxFX05BTUUsICJy Iik7Ci0gICAgaWYgKG1hcGZpbGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAg LyogVmVyaWZ5IHRoZSBtYXBwaW5nIGZpbGUgdmVyc2lvbiBudW1iZXIgKi8KLQotICAgIGlmIChN YXBGaWxlUmVhZFZlcnNpb24obWFwZmlsZSwgJmZpbGVfdmVyc2lvbikKLSAgICAJJiYgZmlsZV92 ZXJzaW9uID09IE1BUF9GSUxFX1ZFUlNJT04pIHsKLQotICAgICAgICAvKiBTY2FuIHRoZSBmaWxl IGxvb2tpbmcgZm9yIHRoZSBnaXZlbiBuYW1lICovCi0KLSAgICAgICAgd2hpbGUgKE1hcEZpbGVS ZWFkKG1hcGZpbGUsIGZpbGVuYW1lLCAmZCkpIHsKLSAgICAgICAgICAgIGlmIChzdHJjbXAoZmls ZW5hbWUsIG5hbWUpID09IDApCi0gICAgCSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkID0g LTE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZmNsb3NlKG1hcGZpbGUpOwotICAgIHJldHVybiBk OwotfQotCi0vKgotICogbWFwX2ZpbGVfZW51bV9pbml0Ci0gKgotICogY3JlYXRlIGVudW1pYXRl IHN0cnVjdHVyZSBmb3IgYSBtYXBwZWQgZmlsZSBhbmQgZmlsbCBwYXR0ZXJuIGZvciBzZWFyY2gK LSAqIHJvb3RfbmFtZSAgICAgICBjaGFyKiAgIHN0cmluZyBvZiB0aGUgYmFzZSBwYXRoIHdoZXJl IGluIGRpc2swIHJlc2lkZSAoZS5nLiBDOlxQU1xEaXNrMFwpCi0gKiBzZWFyY2hfcGF0dGVybiAg Y2hhciogICBzdHJpbmcgdG8gc2VhcmNoIHBhdHRlcm4gKGZvbnRcKikgb3IgZnVsbCBtYXRjaAot ICogICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIGZvbnRcUnl1bWluLUxpZ2h0KSBvciBO VUxMCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCBtZWFucyBhbGwgZmlsZXMKLSAq IFJldHVybnM6CQkgICAgTlVMTCBpZiBlcnJvciwgZWxzZSBwb2ludGVyIHRvIGVudW1lcmF0aW9u IHN0cnVjdHVyZS4KLSAqLwotcHJpdmF0ZSB2b2lkICoKLW1hcF9maWxlX2VudW1faW5pdChnc19t ZW1vcnlfdCAqIG1lbSwgY29uc3QgY2hhciAqIHJvb3RfbmFtZSwgY29uc3QgY2hhciAqIHNlYXJj aF9wYXR0ZXJuKQotewotICAgIGludCBmaWxlX3ZlcnNpb247Ci0gICAgbWFwX2ZpbGVfZW51bSAq IG1hcGZpbGVlbnVtID0gZ3NfYWxsb2Nfc3RydWN0KG1lbSwgbWFwX2ZpbGVfZW51bSwgJnN0X21h cF9maWxlX2VudW0sCi0JCQkgICAJCQkJImRpc2tuOmVudW1faW5pdChmaWxlX2VudW0pIik7Ci0K LSAgICBpZiAobWFwZmlsZWVudW0gPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAg bWVtc2V0KG1hcGZpbGVlbnVtLCAwLCBzaXplb2YobWFwX2ZpbGVfZW51bSkpOwotICAgIG1hcGZp bGVlbnVtLT5tZW1vcnkgPSBtZW07Ci0KLSAgICBpZiAoc2VhcmNoX3BhdHRlcm4pIHsKLSAgICAg ICAgbWFwZmlsZWVudW0tPnBhdHRlcm4gPSAoY2hhciAqKWdzX2FsbG9jX2J5dGVzKG1lbSwgc3Ry bGVuKHNlYXJjaF9wYXR0ZXJuKSArIDEsCi0JCQkJCQkJImRpc2tuOmVudW1faW5pdChwYXR0ZXJu KSIpOwotICAgICAgICBpZiAobWFwZmlsZWVudW0tPnBhdHRlcm4gPT0gTlVMTCkgewotCSAgICBt YXBfZmlsZV9lbnVtX2Nsb3NlKChmaWxlX2VudW0gKikgbWFwZmlsZWVudW0pOwotICAgICAgICAg ICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgc3RyY3B5KG1hcGZpbGVlbnVtLT5w YXR0ZXJuLCBzZWFyY2hfcGF0dGVybik7Ci0gICAgfQotCi0gICAgbWFwZmlsZWVudW0tPnJvb3Qg PSAoY2hhciAqKWdzX2FsbG9jX2J5dGVzKG1lbSwgc3RybGVuKHJvb3RfbmFtZSkgKyAxLCAKLSAg ICAJCQkJCQkiZGlza246ZW51bV9pbml0KHJvb3QpIik7Ci0gICAgaWYgKG1hcGZpbGVlbnVtLT5y b290ID09IE5VTEwpIHsKLQltYXBfZmlsZV9lbnVtX2Nsb3NlKChmaWxlX2VudW0gKikgbWFwZmls ZWVudW0pOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoc3RybGVuKHJv b3RfbmFtZSkgPj0gQlVGRkVSX0xFTkdUSCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgc3Ry Y3B5KG1hcGZpbGVlbnVtLT5yb290LCByb290X25hbWUpOwotICAgIG1hcGZpbGVlbnVtLT5zdHJl YW0gPSBNYXBGaWxlT3Blbihyb290X25hbWUsIE1BUF9GSUxFX05BTUUsICJyIik7Ci0KLSAgICAv KiBDaGVjayB0aGUgbWFwcGluZyBmaWxlIHZlcnNpb24gbnVtYmVyICovCi0gICAgaWYgKG1hcGZp bGVlbnVtLT5zdHJlYW0gIT0gTlVMTAotCSYmICghTWFwRmlsZVJlYWRWZXJzaW9uKG1hcGZpbGVl bnVtLT5zdHJlYW0sICZmaWxlX3ZlcnNpb24pCi0JICAgIHx8IGZpbGVfdmVyc2lvbiAhPSBNQVBf RklMRV9WRVJTSU9OKSkgewotCWZjbG9zZShtYXBmaWxlZW51bS0+c3RyZWFtKTsgICAvKiBJbnZh bGlkIGZpbGUgdmVyc2lvbiAqLwotICAgICAgICBtYXBmaWxlZW51bS0+c3RyZWFtID0gTlVMTDsK LSAgICB9Ci0KLSAgICByZXR1cm4gbWFwZmlsZWVudW07Ci19Ci0KLS8qCi0gKiBtYXBfZmlsZV9l bnVtX25leHQKLSAqCi0gKiBlbnVtX21lbSAgICAgICAgdm9pZCogICBwb2ludGVyIGZvciBtYXAg ZmlsZSBlbnVtIHN0cnVjdHVyZQotICogc2VhcmNoX3BhdHRlcm4gIGNoYXIqICAgc3RyaW5nIGFy cmF5IGZvciBuZXh0IHRhcmdldAotICovCi1wcml2YXRlIGJvb2wKLW1hcF9maWxlX2VudW1fbmV4 dCh2b2lkICogZW51bV9tZW0sIGNoYXIqIHRhcmdldCkKLXsKLSAgICBpbnQgZCA9IC0xOwotICAg IG1hcF9maWxlX2VudW0gKiBtYXBmaWxlZW51bTsKLQotICAgIGlmIChlbnVtX21lbSA9PSBOVUxM KQotCXJldHVybiBmYWxzZTsKLQotICAgIG1hcGZpbGVlbnVtID0gKG1hcF9maWxlX2VudW0qKWVu dW1fbWVtOwotICAgIGlmIChtYXBmaWxlZW51bS0+c3RyZWFtID09IE5VTEwpCi0JcmV0dXJuIGZh bHNlOwotCi0gICAgaWYgKG1hcGZpbGVlbnVtLT5wYXR0ZXJuKSB7Ci0gICAgICAgIC8qICBTZWFy Y2ggZm9yIG5leHQgZW50cnkgdGhhdCBtYXRjaGVzIHBhdHRlcm4gKi8KLSAgICAgICAgd2hpbGUg KE1hcEZpbGVSZWFkKG1hcGZpbGVlbnVtLT5zdHJlYW0sIHRhcmdldCwgJmQpKSB7Ci0gICAgICAg ICAgICBpZiAoc3RyaW5nX21hdGNoKChieXRlICopdGFyZ2V0LCBzdHJsZW4odGFyZ2V0KSwKLQkJ CSAgICAgKGJ5dGUgKiltYXBmaWxlZW51bS0+cGF0dGVybiwKLQkJCSAgICAgc3RybGVuKG1hcGZp bGVlbnVtLT5wYXR0ZXJuKSwgMCkpCi0JCXJldHVybiB0cnVlOwotCX0KLSAgICB9Ci0gICAgZWxz ZSB7Ci0gICAgICAgIC8qICBKdXN0IGdldCBuZXh0ICovCi0gICAgICAgIGlmIChNYXBGaWxlUmVh ZChtYXBmaWxlZW51bS0+c3RyZWFtLCB0YXJnZXQsICZkKSkKLSAgICAgICAgICAgIHJldHVybiB0 cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8qIAotICogbWFwX2ZpbGVfZW51 bV9jbG9zZQotICoKLSAqIGNsZWFucyB1cCBhZnRlciBhbiBlbnVtZXJhdGlvbiwgdGhpcyBtYXkg b25seSBiZSBjYWxsZWQKLSAqIGlmIG1hcF9maWxlX2VudW1faW5pdCBkaWQgbm90IGZhaWwKLSAq LwotcHJpdmF0ZSB2b2lkCi1tYXBfZmlsZV9lbnVtX2Nsb3NlKHZvaWQgKiBlbnVtX21lbSkKLXsK LSAgICBtYXBfZmlsZV9lbnVtICogbWFwZmlsZWVudW0gPSAobWFwX2ZpbGVfZW51bSAqKSBlbnVt X21lbTsKLSAgICBnc19tZW1vcnlfdCAqIG1lbSA9IG1hcGZpbGVlbnVtLT5tZW1vcnk7Ci0KLSAg ICBpZiAobWFwZmlsZWVudW0tPnN0cmVhbSkKLSAgICAgICAgZmNsb3NlKG1hcGZpbGVlbnVtLT5z dHJlYW0pOwotICAgIGlmIChtYXBmaWxlZW51bS0+cm9vdCkKLSAgICAgICAgZ3NfZnJlZV9vYmpl Y3QobWVtLCBtYXBmaWxlZW51bS0+cm9vdCwgImRpc2tuX2VudW1faW5pdChyb290KSIpOwotICAg IGlmIChtYXBmaWxlZW51bS0+cGF0dGVybikKLQlnc19mcmVlX29iamVjdChtZW0sIG1hcGZpbGVl bnVtLT5wYXR0ZXJuLCAiZGlza25fZW51bV9pbml0KHBhdHRlcm4pIik7Ci0gICAgZ3NfZnJlZV9v YmplY3QobWVtLCBtYXBmaWxlZW51bSwgImRpc2tuX2VudW1faW5pdChtYXBmaWxlZW51bSkiKTsK LX0KLQotLyoKLSAqIG1hcF9maWxlX25hbWVfZ2V0Ci0gKgotICogbWFwcyB0aGUgcHNuYW1lKEZu YW1lKSB0byB0aGUgb3NuYW1lIHVzaW5nIGNvbmNhdGVuaW5nIHRoZSByb290X25hbWUgYW5kIGlk Ci0gKiBJZCB3aWxsIGJlIGEgbG93ZXN0IG9uZSBpZiBzYW1lIHBzbmFtZSBleGlzdHMgbW9yZSB0 aGFuIG9uZSBpbiBtYXAgZmlsZS4gU2VlIE1hcFRvRmlsZQotICogZm9yIGRldGFpbC4KLSAqIHJv b3RfbmFtZSAgICAgICBjaGFyKiAgIHN0cmluZyBvZiB0aGUgYmFzZSBwYXRoIHdoZXJlIGluIGRp c2swIHJlc2lkZQotICogICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy5DOlxQU1xEaXNrMFwp Ci0gKiBGbmFtZSAgICAgICAgICAgY2hhciogICBuYW1lIG9mIHRoZSBlbnRyeSB0byBmaW5kIGlu IHRoZSBtYXAKLSAqIG9zbmFtZSAgICAgICAgICBjaGFyKiAgIHJlc3VsdGluZyBvcyBzcGVjaWZp YyBwYXRoIHRvIHRoZSBmaWxlCi0gKi8KLXByaXZhdGUgYm9vbAotbWFwX2ZpbGVfbmFtZV9nZXQo Y29uc3QgY2hhciAqIHJvb3RfbmFtZSwgY29uc3QgY2hhciAqIEZuYW1lLCBjaGFyICogb3NuYW1l KQotewotICAgIGludCBkID0gTWFwVG9GaWxlKHJvb3RfbmFtZSwgRm5hbWUpOwotCi0gICAgaWYg KGQgIT0gLTEpIHsKLQkvKiAyMCBjaGFyYWN0ZXJzIGFyZSBlbm91Z2ggZm9yIGV2ZW4gYSA2NCBi aXQgaW50ZWdlciAqLwotICAgICAgICBpZiAoKHN0cmxlbihyb290X25hbWUpICsgMjApIDwgQlVG RkVSX0xFTkdUSCkgewotCSAgICBzcHJpbnRmKG9zbmFtZSwgIiVzJWQiLCByb290X25hbWUsIGQp OwotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0gICAgfQotCi0gICAgKm9zbmFtZSA9IDA7Ci0gICAg cmV0dXJuIGZhbHNlOwotfQotCi0vKgotICogbWFwX2ZpbGVfbmFtZV9kZWwKLSAqCi0gKiBEZWxl dGVzIEZuYW1lIGZyb20gdGhlIG1hcHBpbmcgdGFibGUgYW5kIGRvZXMgbm90IGRlbGV0ZSB0aGUg YWN0dWFsIGZpbGUKLSAqIElmIHNhbWUgRm5hbWUgZXhpc3RzLCBhbGwgc2FtZSBGbmFtZSB3aWxs IGJlIGRlbGV0ZWQKLSAqIHJvb3RfbmFtZSAgICAgICBjaGFyKiAgIHN0cmluZyBvZiB0aGUgYmFz ZSBwYXRoIHdoZXJlIGluIGRpc2swIHJlc2lkZSAoQzpcUFNcRGlzazBcKQotICogRm5hbWUgICAg ICAgICAgIGNoYXIqICAgbmFtZSBvZiB0aGUgZW50cnkgdG8gYWRkIHRvIHRoZSBtYXAKLSAqLwot cHJpdmF0ZSB2b2lkCi1tYXBfZmlsZV9uYW1lX2RlbChjb25zdCBjaGFyICogcm9vdF9uYW1lLCBj b25zdCBjaGFyICogRm5hbWUpCi17Ci0gICAgLyogIHNlYXJjaCBmb3IgdGFyZ2V0IGVudHJ5ICov Ci0gICAgaW50IGQgPSBNYXBUb0ZpbGUocm9vdF9uYW1lLCBGbmFtZSk7Ci0gICAgaW50IGZpbGVf dmVyc2lvbjsKLQotICAgIGlmIChkICE9IC0xKSB7CQkJIC8qIGlmIHRoZSBmaWxlIGV4aXN0cyAu Li4gKi8KLSAgICAgICAgY2hhciAgICBuYW1lW0JVRkZFUl9MRU5HVEhdOwotICAgICAgICBGSUxF KiAgIG5ld01hcDsKLSAgICAgICAgRklMRSogICBvbGRNYXA7Ci0KLQkvKiBPcGVuIGN1cnJlbnQg bWFwIGZpbGUgYW5kIGEgd29ya2luZyBmaWxlICovCi0KLSAgICAgICAgTWFwRmlsZVVubGluayhy b290X25hbWUsIFRFTVBfRklMRV9OQU1FICk7Ci0gICAgICAgIG5ld01hcCA9IE1hcEZpbGVPcGVu KHJvb3RfbmFtZSwgVEVNUF9GSUxFX05BTUUsICJ3Iik7Ci0gICAgICAgIGlmIChuZXdNYXAgPT0g TlVMTCkKLQkgICAgcmV0dXJuOwotICAgICAgICBvbGRNYXAgPSBNYXBGaWxlT3Blbihyb290X25h bWUsIE1BUF9GSUxFX05BTUUsICJyIik7Ci0gICAgICAgIGlmIChvbGRNYXAgIT0gTlVMTCAmJiAo IU1hcEZpbGVSZWFkVmVyc2lvbihvbGRNYXAsICZmaWxlX3ZlcnNpb24pCi0JICAgIHx8IGZpbGVf dmVyc2lvbiAhPSBNQVBfRklMRV9WRVJTSU9OKSkgewotICAgICAgICAgICAgZmNsb3NlKG9sZE1h cCk7Ci0JICAgIG9sZE1hcD0gTlVMTDsKLQl9Ci0gICAgICAgIGlmIChvbGRNYXAgPT0gTlVMTCkg ewotICAgICAgICAgICAgZmNsb3NlKG5ld01hcCk7Ci0gICAgICAgICAgICBNYXBGaWxlVW5saW5r KHJvb3RfbmFtZSwgVEVNUF9GSUxFX05BTUUpOwotCSAgICByZXR1cm47Ci0gICAgICAgIH0KLQot CS8qIENvcHkgZXZlcnkgbGluZSBvZiB0aGUgbWFwIGZpbGUgZXhjZXB0IHRoZSBvbmUgd2l0aCBn aXZlbiBuYW1lICovCi0KLSAgICAgICAgTWFwRmlsZVdyaXRlVmVyc2lvbihuZXdNYXAsIE1BUF9G SUxFX1ZFUlNJT04pOwotICAgICAgICB3aGlsZSAoTWFwRmlsZVJlYWQob2xkTWFwLCBuYW1lLCAm ZCkpCi0gICAgICAgICAgICBpZiAoc3RyY21wKG5hbWUsIEZuYW1lKSkKLSAgICAgICAgICAgICAg ICBNYXBGaWxlV3JpdGUobmV3TWFwLCBuYW1lLCBkKTsKLSAgICAgICAgZmNsb3NlKG5ld01hcCk7 Ci0gICAgICAgIGZjbG9zZShvbGRNYXApOwotICAgICAgICBNYXBGaWxlVW5saW5rKHJvb3RfbmFt ZSwgTUFQX0ZJTEVfTkFNRSk7Ci0gICAgICAgIE1hcEZpbGVSZW5hbWUocm9vdF9uYW1lLCBNQVBf RklMRV9OQU1FLCBURU1QX0ZJTEVfTkFNRSk7Ci0gICAgfQotfQotCi0vKgotICogbWFwX2ZpbGVf YWRkCi0gKgotICogYWRkcyBGbmFtZSB0byB0aGUgbWFwcGluZyB0YWJsZSBhbmQgZG9lcyBub3Qg Y3JlYXRlIGFuIHVuaXF1ZSBuZXcgZW1wdHkgZmlsZQotICogSWYgc2FtZSBGbmFtZSBleGlzdHMs IG5ldyBGbmFtZSB3aWxsIG5vdCBiZSBhZGRlZC4KLSAqIHJvb3RfbmFtZSAgICAgICBjaGFyKiAg IHN0cmluZyBvZiB0aGUgYmFzZSBwYXRoIHdoZXJlIGluIGRpc2swIHJlc2lkZSAoQzpcUFNcRGlz azBcKQotICogRm5hbWUgICAgICAgICAgIGNoYXIqICAgbmFtZSBvZiB0aGUgZW50cnkgdG8gYWRk IHRvIHRoZSBtYXAKLSAqLwotcHJpdmF0ZSB2b2lkCi1tYXBfZmlsZV9uYW1lX2FkZChjb25zdCBj aGFyICogcm9vdF9uYW1lLCBjb25zdCBjaGFyICogRm5hbWUpCi17Ci0gICAgLyogCi0gICAgICog YWRkIGVudHJ5IHRvIG1hcCBmaWxlCi0gICAgICogZW50cnkgbnVtYmVyIGlzIG9uZSBncmVhdGVy IHRoYW4gYmlnZ2VzdCBudW1iZXIKLSAgICAgKi8KLSAgICBjaGFyICAgIG5hbWVbQlVGRkVSX0xF TkdUSF07Ci0gICAgaW50IGQ7Ci0gICAgaW50IGRtYXggPSAtMTsKLSAgICBpbnQgZmlsZV92ZXJz aW9uOwotICAgIEZJTEUqICAgbmV3TWFwOwotICAgIEZJTEUqICAgb2xkTWFwOwotICAgIAotICAg IG9sZE1hcCA9IE1hcEZpbGVPcGVuKHJvb3RfbmFtZSwgTUFQX0ZJTEVfTkFNRSwgInIiKTsKLSAg ICBpZiAob2xkTWFwICE9IE5VTEwgJiYgKCFNYXBGaWxlUmVhZFZlcnNpb24ob2xkTWFwLCAmZmls ZV92ZXJzaW9uKQotCXx8IGZpbGVfdmVyc2lvbiAhPSBNQVBfRklMRV9WRVJTSU9OKSkgewotICAg ICAgICBmY2xvc2Uob2xkTWFwKTsKLQlvbGRNYXAgPSBOVUxMOwotICAgIH0KLSAgICBpZiAob2xk TWFwID09IE5VTEwpIHsKLSAgICAgICAgb2xkTWFwID0gTWFwRmlsZU9wZW4ocm9vdF9uYW1lLCBN QVBfRklMRV9OQU1FLCAidyIpOwotCWlmICghb2xkTWFwKSAKLQkgICAgcmV0dXJuOwotICAgICAg ICBNYXBGaWxlV3JpdGVWZXJzaW9uKG9sZE1hcCwgTUFQX0ZJTEVfVkVSU0lPTik7Ci0gICAgICAg IE1hcEZpbGVXcml0ZShvbGRNYXAsIEZuYW1lLCBJbml0aWFsTnVtYmVyKTsKLSAgICAgICAgZmNs b3NlKG9sZE1hcCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBNYXBGaWxlVW5saW5rKHJv b3RfbmFtZSwgVEVNUF9GSUxFX05BTUUpOwotICAgICAgICBuZXdNYXAgPSBNYXBGaWxlT3Blbihy b290X25hbWUsIFRFTVBfRklMRV9OQU1FLCAidyIpOwotICAgICAgICBpZiAobmV3TWFwICE9IE5V TEwpIHsKLSAgICAgICAgICAgIE1hcEZpbGVXcml0ZVZlcnNpb24obmV3TWFwLCBNQVBfRklMRV9W RVJTSU9OKTsKLSAgICAgICAgICAgIHdoaWxlIChNYXBGaWxlUmVhZChvbGRNYXAsIG5hbWUsICZk KSkgewotICAgICAgICAJTWFwRmlsZVdyaXRlKG5ld01hcCwgbmFtZSwgZCk7Ci0gICAgICAgICAg ICAgICAgaWYgKGRtYXggPCBkKQotICAgICAgICAgICAgICAgICAgICBkbWF4ID0gZDsKLSAgICAg ICAgICAgIH0KLQotICAgICAgICAgICAgZG1heCArPSAxOwotICAgICAgICAgICAgTWFwRmlsZVdy aXRlKG5ld01hcCwgRm5hbWUsIGRtYXgpOwotICAgICAgICAgICAgZmNsb3NlKG5ld01hcCk7Ci0g ICAgICAgICAgICBmY2xvc2Uob2xkTWFwKTsKLSAgICAgICAgICAgIE1hcEZpbGVVbmxpbmsocm9v dF9uYW1lLCBNQVBfRklMRV9OQU1FKTsKLSAgICAgICAgICAgIE1hcEZpbGVSZW5hbWUocm9vdF9u YW1lLCBNQVBfRklMRV9OQU1FLCBURU1QX0ZJTEVfTkFNRSk7Ci0gICAgICAgIH0KLSAgICB9Ci19 Ci0KLS8qCi0gKiBtYXBfZmlsZV9uYW1lX3JlbgotICoKLSAqIHJlbmFtZXMgdGhlIG9sZG5hbWUg aW50byBuZXduYW1lIGluIHRoZSBtYXBwaW5nIHRhYmxlLiBuZXduYW1lIG11c3Qgbm90IGV4aXN0 IGFuZCBtdXN0IGJlCi0gKiBjaGVja2VkIGJ5IHRoZSBjYWxsZXIuIElmIHNhbWUgbmFtZSBleGlz dCwgYWxsIHNhbWUgbmFtZSB3aWxsIGJlIHJlbmFtZWQuCi0gKiByb290X25hbWUgICAgICAgY2hh ciogICBzdHJpbmcgb2YgdGhlIGJhc2UgcGF0aCB3aGVyZSBpbiBkaXNrMCByZXNpZGUgKEM6XFBT XERpc2swXCkKLSAqIG9sZG5hbWUgICAgICAgICBjaGFyKiAgIG5hbWUgY3VycmVudGx5IGV4aXN0 aW5nIGluIHRoZSBtYXAKLSAqIG5ld25hbWUgICAgICAgICBjaGFyKiAgIG5hbWUgdG8gY2hhbmdl IHRoZSBlbnRyeSBpbmRpY2F0ZWQgYnkgb2xkbmFtZSBpbnRvCi0gKi8KLXByaXZhdGUgdm9pZAot bWFwX2ZpbGVfbmFtZV9yZW4oY29uc3QgY2hhciogcm9vdF9uYW1lLCBjb25zdCBjaGFyICogb2xk bmFtZSwgY29uc3QgY2hhciAqIG5ld25hbWUpCi17ICAgCi0gICAgLyogIHNlYXJjaCBmb3IgdGFy Z2V0IGVudHJ5ICovCi0KLSAgICBpbnQgZCA9IE1hcFRvRmlsZShyb290X25hbWUsIG9sZG5hbWUp OwotICAgIGludCBmaWxlX3ZlcnNpb247Ci0KLSAgICBpZiAoZCAhPSAtMSkgeyAJCS8qIGlmIHRh cmdldCBleGlzdHMgLi4uICovCi0gICAgICAgIGNoYXIgICAgbmFtZVtCVUZGRVJfTEVOR1RIXTsK LSAgICAgICAgRklMRSogICBuZXdNYXA7Ci0gICAgICAgIEZJTEUqICAgb2xkTWFwOwotICAgICAg ICAKLQkvKiBPcGVuIGN1cnJlbnQgbWFwIGZpbGUgYW5kIGEgd29ya2luZyBmaWxlICovCi0KLSAg ICAgICAgTWFwRmlsZVVubGluayhyb290X25hbWUsIFRFTVBfRklMRV9OQU1FICk7Ci0gICAgICAg IG5ld01hcCA9IE1hcEZpbGVPcGVuKHJvb3RfbmFtZSwgVEVNUF9GSUxFX05BTUUsICJ3Iik7Ci0g ICAgICAgIGlmIChuZXdNYXAgPT0gTlVMTCkKLQkgICAgcmV0dXJuOwotICAgICAgICBvbGRNYXAg PSBNYXBGaWxlT3Blbihyb290X25hbWUsIE1BUF9GSUxFX05BTUUsICJyIik7Ci0gICAgICAgIGlm IChvbGRNYXAgIT0gTlVMTCAmJiAoIU1hcEZpbGVSZWFkVmVyc2lvbihvbGRNYXAsICZmaWxlX3Zl cnNpb24pCi0JICAgIHx8IGZpbGVfdmVyc2lvbiAhPSBNQVBfRklMRV9WRVJTSU9OKSkgewotICAg ICAgICAgICAgZmNsb3NlKG9sZE1hcCk7Ci0JICAgIG9sZE1hcD0gTlVMTDsKLQl9Ci0gICAgICAg IGlmIChvbGRNYXAgPT0gTlVMTCkgewotICAgICAgICAgICAgZmNsb3NlKG5ld01hcCk7Ci0gICAg ICAgICAgICBNYXBGaWxlVW5saW5rKHJvb3RfbmFtZSwgVEVNUF9GSUxFX05BTUUpOwotCSAgICBy ZXR1cm47Ci0gICAgICAgIH0KLQotCS8qIE5vdyBjb3B5IGRhdGEgZnJvbSBvbGQgdG8gbmV3LCBj aGFuZ2UgZmlsZSBuYW1lIHdoZW4gZm91bmQgKi8KLQotICAgICAgICBNYXBGaWxlV3JpdGVWZXJz aW9uKG5ld01hcCwgTUFQX0ZJTEVfVkVSU0lPTik7ICAvKiBDb3B5IHRoZSB2ZXJzaW9uIG51bWJl ciAqLwotICAgICAgICB3aGlsZSAoTWFwRmlsZVJlYWQob2xkTWFwLCBuYW1lLCAmZCkpCi0gICAg ICAgICAgICBpZiAoc3RyY21wKG5hbWUsIG9sZG5hbWUpKQotICAgICAgICAgICAgICAgIE1hcEZp bGVXcml0ZShuZXdNYXAsIG5hbWUsIGQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg ICAgIE1hcEZpbGVXcml0ZShuZXdNYXAsIG5ld25hbWUsIGQpOwotICAgICAgICBmY2xvc2UobmV3 TWFwKTsKLSAgICAgICAgZmNsb3NlKG9sZE1hcCk7Ci0gICAgICAgIE1hcEZpbGVVbmxpbmsocm9v dF9uYW1lLCBNQVBfRklMRV9OQU1FKTsKLSAgICAgICAgTWFwRmlsZVJlbmFtZShyb290X25hbWUs IE1BUF9GSUxFX05BTUUsIFRFTVBfRklMRV9OQU1FKTsKLSAgICB9Ci19CkluZGV4OiBzcmMvZ3Np b21hcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHNyYy9nc2lvbWFwLmMJKC4uLi90YWdzL2dzOC41NCkJKHJl dmlzaW9uIDApCisrKyBzcmMvZ3Npb21hcC5jCSguLi4vdHJ1bmsvZ3MpCShyZXZpc2lvbiAyMikK QEAgLTAsMCArMSw1ODQgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IGFydG9mY29kZSBM TEMuCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICAKKyAgIFRoaXMgc29mdHdhcmUgaXMgcHJv dmlkZWQgQVMtSVMgd2l0aCBubyB3YXJyYW50eSwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgIGltcGxp ZWQuCisKKyAgIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgbGljZW5zZSBhbmQg bWF5IG5vdCBiZSBjb3BpZWQsIG1vZGlmaWVkCisgICBvciBkaXN0cmlidXRlZCBleGNlcHQgYXMg ZXhwcmVzc2x5IGF1dGhvcml6ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQKKyAgIGxpY2Vuc2Uu ICBSZWZlciB0byBsaWNlbnNpbmcgaW5mb3JtYXRpb24gYXQgaHR0cDovL3d3dy5hcnRpZmV4LmNv bS8KKyAgIG9yIGNvbnRhY3QgQXJ0aWZleCBTb2Z0d2FyZSwgSW5jLiwgIDcgTXQuIExhc3NlbiBE cml2ZSAtIFN1aXRlIEEtMTM0LAorICAgU2FuIFJhZmFlbCwgQ0EgIDk0OTAzLCBVLlMuQS4sICsx KDQxNSk0OTItOTg2MSwgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisqLworCisvKiRJZDogZ3Np b21hcC5jIDY2NTEgMjAwNi0wMy0xMyAxNjoxODoxOVogc3RlZmFuICQgKi8KKy8qICVkaXNrKiUg YW5kICVyYW0qJSBwb3J0YWJsZSBmaWxlbmFtZSBtYXBwaW5nIGNvZGUgKi8KKworLyoKKyAqIE1h cCBmaWxlIHN1cHBvcnQKKyAqCisgKiBEdWUgdG8gY29uZmxpY3RzIGJldHdlZW4gZmlsZSBuYW1l IGZvcm1hdHMgKG5hbWUgbGVuZ3RocywgcmVzdHJpY3RlZAorICogY2hhcmFjdGVycywgZXRjLikg YSAnbWFwcGluZyBmaWxlJyAobWFwLnR4dCkgaXMgdXNlZCB0byB0cmFuc2xhdGUKKyAqIGJldHdl ZW4gYSBsb2dpY2FsIGZpbGUgbmFtZSBhbmQgYSByZWFsIGZpbGUgbmFtZSBvbiB0aGUgc3lzdGVt LgorICogVGhpcyBuYW1lIHRyYW5zbGF0aW9uIGFsc28gZmxhdHRlbnMgdGhlIGRpcmVjdG9yeSBz dHJ1Y3R1cmUgb2YgdGhlCisgKiBsb2dpY2FsIGZpbGUgbmFtZXMuICAoVGhpcyBtYXkgYmUgY2hh bmdlZCBpbiB0aGUgZnV0dXJlLiAgQnV0IGZvcgorICogbm93IGl0IG1ha2VzIHRoZSBpbXBsZW1l bnRhdGlvbiBlYXNpZXIuKQorICoKKyAqIE1hcHBpbmcgZmlsZToKKyAqCisgKiBUaGUgbWFwcGlu ZyBmaWxlIGlzIHVzZWQgdG8gY3JlYXRlIGEgJ2ZsYXQgZGlzaycgZmlsZSBzdHJ1Y3R1cmUuICBB bGwgZmlsZQorICogYXJlIHN0b3JlZCBpbiBhIHNpbmdsZSBkaXJlY3RvcnkuICBUbyBhY2NvbXBs aXNoIHRoaXMsIHRoZSBsb2dpY2FsIGZpbGUKKyAqIG5hbWUsIGluY2x1ZGluZyB0aGUgcGF0aCwg YXJlIHN0b3JlZCBpbiBhICdtYXBwaW5nIGZpbGUnLiAgRm9yIGVhY2ggZmlsZSBpbgorICogZmxh dCBkaXNrLCB0aGVyZSBpcyBhIHNpbmdsZSBsaW5lIGVudHJ5IGluIHRoZSBtYXBwaW5nIGZpbGUu ICBUaGUgbWFwcGluZworICogZmlsZSBlbnRyeSBhbHNvIGluY2x1ZGVzIGEgZmlsZSBudW1iZXIg dmFsdWUuICBUaGlzIGZpbGUgbnVtYmVyIGlzIHVzZWQgYXMKKyAqIHRoZSBhY3R1YWwgZmlsZSBu YW1lIGluIHRoZSBmbGF0IGRpc2sgZGlyZWN0b3J5LgorICoKKyAqIFRoZSBmbGF0IGRpc2sgZm9y bWF0IGFuZCB0aGUgbWFwcGluZyBmaWxlIGFyZSB1c2VkIHRvIGVsaW1pbmF0ZSBwcm9ibGVtcwor ICogd2l0aCB0cnlpbmcgdG8gZW11bGF0ZSBhIGxvZ2ljYWwgZGlyZWN0b3J5IHN0cnVjdHVyZSBv biBkaWZmZXJlbnQgb3BlcmF0aW5nCisgKiBzeXN0ZW1zIHdoaWNoIGhhdmUgZGlmZmVyZW50IHJ1 bGVzIGFib3V0IHdoYXQgaXMgYWxsb3dlZCBhbmQgbm90IGFsbG93ZWQKKyAqIGluIGEgZmlsZSBu YW1lIGFuZCBwYXRoLgorICoKKyAqIE1hcHBpbmcgZmlsZSBmb3JtYXQ6CisgKgorICogRmlyc3Qg bGluZToKKyAqIEZpbGVWZXJzaW9uPHRhYj4xPHRhYj5UaGlzIGZpbGUgaXMgbWFjaGluZSBnZW5l cmF0ZWQuIE5vIG5vdCBlZGl0LjxuZXdsaW5lPgorICoKKyAqIFJlbWFpbmluZyBsaW5lczoKKyAq IDxzcGFjZT5maWxlbnVtYmVyPHRhYj5maWxlX25hbWU8bmV3bGluZT4KKyAqCisgKiBUaGUgZmly c3QgbGluZSBvZiB0aGUgbWFwcGluZyBmaWxlIGNvbnRhaW5zIHRoZSB0ZXh0ICJGaWxlVmVyc2lv biIgZm9sbG93ZWQKKyAqIGJ5IGEgdGFiIGNoYXJhY3Rlci4gVGhlbiB0aGUgbnVtYmVyIDEgKGFz Y2lpIC0gMzEgaGV4KSBmb2xsb3dlZCBieSBhIHRhYgorICogYW5kIHRoZW4gYSBzaG9ydCBtZXNz YWdlIHRlbGxpbmcgcGVvcGxlIHRvIG5vdCBlZGl0IHRoZSBmaWxlLiAgVGhpcyBpcyBhbgorICog YXR0ZW1wdCB0byBrZWVwIHRoZSBtYXBwaW5nIGZpbGUgZnJvbSBiZWluZyBjb3JydXB0ZWQuCisg KgorICogVGhlIGZpbGUgdmVyc2lvbiBudW1iZXIgbXVzdCBiZSBhICIxIi4gIFRoaXMgaXMgdGhl IG9ubHkgdmVyc2lvbiBjdXJyZW50bHkKKyAqIHN1cHBvcnRlZC4gIFRoaXMgbGluZSBleGlzdHMg aW4gY2FzZSBpdCBpcyBuZWNlc3NhcnkgdG8gbW9kaWZ5IHRoZSBtYXBwaW5nCisgKiBmaWxlIGZv cm1hdCBhdCBzb21lIGZ1dHVyZSBkYXRlLiAgVGhlIHByZXNlbmNlIG9mIGEgdmVyc2lvbiBudW1i ZXIgYWxsb3dzCisgKiBmb3Igc2VhbWxlc3MgdXBncmFkaW5nIG9mIHRoZSBmaWxlIGZvcm1hdC4K KyAqCisgKiBUaGUgZm9ybWF0IG9mIHRoZSBlbnRyeSBsaW5lcyBoYXMgYmVlbiBjcmVhdGVkIHNv IHRoYXQgdGhlIHJlYWQgZW50cnkKKyAqIHJvdXRpbmUgd291bGQ6CisgKiAxLiBHcmFiIHRoZSBu dW1iZXIgKGluY2x1ZGluZyB0aGUgc3BhY2UgaWYgaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVh ZC4pCisgKiAyLiBHcmFiIHRoZSB0YWIKKyAqIDMuIEdyYWIgZXZlcnl0aGluZyB1cCB0byBhIGxp bmVmZWVkIG9yIGNhcnJpYWdlIHJldHVybiBhcyB0aGUgZmlsZSBuYW1lLgorICogNC4gR3JhYiBh bnkgcmVtYWluaW5nIGxpbmVmZWVkcy9jYXJyaWFnZSByZXR1cm5zLiBOb3RlIHRoaXMgc3RlcCBt aWdodAorICogZ3JhYiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBuZXh0IGxpbmUgaWYgdGhl cmUgaXMgb25seSBhIHNpbmdsZQorICogY2FycmlhZ2UgcmV0dXJuIG9yIGxpbmVmZWVkLiAgU2lu Y2UgaXQgaXMgbm90IGRlc2lyZWFibGUgdG8gaGF2ZSB0byB3b3JyeQorICogYWJvdXQgZG9pbmcg YW4gJ3VuZ2V0IGNoYXJhY3RlcicsIGFuIGV4dHJhIHNwYWNlIGhhcyBiZWVuIHB1dCBhdCB0aGUK KyAqIGJlZ2lubmluZyBvZiBlYWNoIGxpbmUuICBUaGUgZXh0cmEgbG9naWMgd2l0aCB0aGUgbGlu ZWZlZWQvY2FycmlhZ2UgcmV0dXJuCisgKiBpcyBwcmltYXJpbHkgdGhlcmUgaW4gY2FzZSBzb21l b25lIGFjY2lkZW50YWxseSBtYW5nbGVzIHRoZSBmaWxlIGJ5IGxvb2tpbmcKKyAqIGF0IGl0IHdp dGggYSB0ZXh0IGVkaXRvci4KKyAqCisgKiBUaGlzIGJhc2ljYWxseSBhbGxvd3MgZm9yIGFueSBm aWxlIG5hbWUgZXhjZXB0IG9uZSB0aGF0IGluY2x1ZGVzCisgKiBhIHplcm8sIGEgY2FycmlhZ2Ug cmV0dXJuLCBvciBhIGxpbmVmZWVkLiAgVGhlIHJlcXVpcmVtZW50IGZvciBleGNsdWRpbmcKKyAq IHplcm8gaXMgdGhhdCB0aGVyZSBhcmUgdG9vIG1hbnkgQyBzdHJpbmcgcm91dGluZXMgdGhhdCBh c3N1bWUgemVybyBpcworICogYSBzdHJpbmcgdGVybWluYXRvciAoaW5jbHVkaW5nIG11Y2ggb2Yg dGhlIGN1cnJlbnQgR2hvc3RzY3JpcHQgY29kZSBhbmQKKyAqIHRoZSBjdXJyZW50IG1hcCBoYW5k bGVyKS4gIFRoZSBjYXJyaWFnZSByZXR1cm4vbGluZWZlZWQgcmVxdWlyZW1lbnQgaXMKKyAqIHRo ZXJlIHNpbXBseSBiZWNhdXNlIGl0IGlzIGJlaW5nIHVzZWQgYXMgYSB0ZXJtaW5hdG9yIGZvciB0 aGUgZmlsZSBuYW1lLgorICogSXQgY291bGQgZWFzaWx5IGJlIGVsaW1pbmF0ZWQgYnkgYWRkaW5n IGEgemVybyBhcyB0aGUgbmFtZSB0ZXJtaW5hdG9yLgorICogVGhlIG9ubHkgZGlzYWR2YW50YWdl IGlzIHRoYXQgdGhlIGZpbGUgaXMgbm8gbG9uZ2VyIHRvdGFsbHkgcHJpbnRhYmxlIGFzY2lpLgor ICoKKyAqIEEgc3BlY2lhbCB0aGFua3MgaXMgZ2l2ZW4gZm9yIE5vcml5dWtpIE1hdHN1c2hpbWEg Zm9yIGhpcyBjcmVhdGlvbiBvZgorICogdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIG1hcHBp bmcgZmlsZSBsb2dpYy4KKyAqLyAKKworI2luY2x1ZGUgImVycm5vXy5oIgorI2luY2x1ZGUgInN0 cmluZ18uaCIKKyNpbmNsdWRlICJ1bmlzdGRfLmgiCisjaW5jbHVkZSAiZ3guaCIKKyNpbmNsdWRl ICJnc2Vycm9ycy5oIgorI2luY2x1ZGUgImdwLmgiCisjaW5jbHVkZSAiZ3NjZGVmcy5oIgorI2lu Y2x1ZGUgImdzcGFyYW0uaCIKKyNpbmNsdWRlICJnc3N0cnVjdC5oIgorI2luY2x1ZGUgImd4aW9k ZXYuaCIKKyNpbmNsdWRlICJnc3V0aWwuaCIKKyNpbmNsdWRlICJnc2lvbWFwLmgiCisKKworZ3Nf cHVibGljX3N0X3B0cnMyKHN0X21hcF9maWxlX2VudW0sIHN0cnVjdCBtYXBfZmlsZV9lbnVtX3Ms ICJtYXBfZmlsZV9lbnVtIiwKKyAgICBtYXBfZmlsZV9lbnVtX2VudW1fcHRycywgbWFwX2ZpbGVf ZW51bV9yZWxvY19wdHJzLCBwYXR0ZXJuLCByb290KTsKKworCisvKgorICogT3BlbiB0aGUgc3Bl Y2lmaWVkIGZpbGUgd2l0aCBzcGVjaWZpZWQgYXR0cmlidXRlcy4KKyAqCisgKiByb290cGF0aCAt IFBhdGggdG8gYmFzZSBkaXNrIGxvY2F0aW9uLgorICogZmlsZW5hbWUgLSBGaWxlIG5hbWUgc3Ry aW5nCisgKiBhdHRyaWJ1dGVzIC0gRmlsZSBhdHRyaWJ1dGVzIHN0cmluZworICogUmV0dXJucyAt IE5VTEwgaWYgZXJyb3IsIGZpbGUgc3RydWN0dXJlIHBvaW50ZXIgaWYgbm8gZXJyb3IKKyAqLwor cHJpdmF0ZSBGSUxFICoKK01hcEZpbGVPcGVuKGNvbnN0IGNoYXIgKiByb290cGF0aCwgY29uc3Qg Y2hhciAqIGZpbGVuYW1lLCBjb25zdCBjaGFyICogYXR0cmlidXRlcykKK3sKKyAgICBjaGFyIGZ1 bGxuYW1lW0JVRkZFUl9MRU5HVEhdOworCisgICAgaWYgKHN0cmxlbihyb290cGF0aCkgKyBzdHJs ZW4oZmlsZW5hbWUpID49IEJVRkZFUl9MRU5HVEgpCisgICAgICAgIHJldHVybiBOVUxMOworICAg IHNucHJpbnRmKGZ1bGxuYW1lLCBCVUZGRVJfTEVOR1RILCAiJXMlcyIsIHJvb3RwYXRoLCBmaWxl bmFtZSk7CisgICAgcmV0dXJuIGdwX2ZvcGVuKGZ1bGxuYW1lLCBhdHRyaWJ1dGVzKTsKK30KKwor LyoKKyAqIFJlYWQgbWFwIGZpbGUgdmVyc2lvbiAoZmlyc3QgbGluZSkKKyAqCisgKiBtYXBmaWxl IC0gTWFwcGluZyBmaWxlIHN0cnVjdHVyZSBwb2ludGVyCisgKiB2YWx1ZSAtIHBvaW50ZXIgdG8g dmVyc2lvbiBudW1iZXIgc3RvcmFnZSBsb2NhdGlvbgorICogUmV0dXJucyAxIGlmIGRhdGEgcmVh ZCwgZWxzZSAwCisgKi8KK3ByaXZhdGUgaW50CitNYXBGaWxlUmVhZFZlcnNpb24oRklMRSAqIG1h cGZpbGUsIGludCAqIHZhbHVlKQoreworICAgIGludCBjb2RlID0gZnNjYW5mKG1hcGZpbGUsICJG aWxlVmVyc2lvblx0JWRcdCIsIHZhbHVlKSA9PSAxID8gMSA6IDA7CisgICAgaW50IGM7CisKKyAg ICAvKiBTa2lwIGNvbW1lbnQgb24gdmVyc2lvbiBsaW5lLiAqLworICAgIGRvIHsKKwljID0gZmdl dGMobWFwZmlsZSk7CisgICAgfSB3aGlsZSAoYyAhPSBFT0YgJiYgYyAhPSAnXG4nICYmIGMgIT0g J1xyJyk7CisKKyAgICAvKiBDbGVhbiB1cCBhbnkgdHJhaWxpbmcgbGluZWZlZWRzIG9yIGNhcnJp YWdlIHJldHVybnMgKi8KKyAgICB3aGlsZSAoYyAhPSBFT0YgJiYgKGMgPT0gJ1xuJyB8fCBjID09 ICdccicpKSB7CisJYyA9IGZnZXRjKG1hcGZpbGUpOworICAgIH0KKyAgICByZXR1cm4gY29kZTsK K30KKworLyoKKyAqIFdyaXRlIGEgbWFwIGZpbGUgdmVyc2lvbiAoZmlyc3QgbGluZSkgaW50byB0 aGUgbWFwIGZpbGUKKyAqCisgKiBzdHJlYW0gLSBGaWxlIHN0cnVjdHVyZSBwb2ludGVyCisgKiB2 YWx1ZSAtIHZlcnNpb24gbnVtYmVyCisgKi8KK3ByaXZhdGUgdm9pZAorTWFwRmlsZVdyaXRlVmVy c2lvbihGSUxFICogbWFwZmlsZSwgaW50IHZhbHVlKQoreworICAgIGZwcmludGYobWFwZmlsZSwK KyAgICAJIkZpbGVWZXJzaW9uXHQlZFx0VGhpcyBmaWxlIGlzIG1hY2hpbmUgZ2VuZXJhdGVkLiAg RG8gbm90IGVkaXQuXG4iLAorICAgIAl2YWx1ZSk7Cit9CisKKy8qCisgKiBSZWFkIGFuIGVudHJ5 IGluIHRoZSBtYXAgZmlsZQorICoKKyAqIG1hcGZpbGUgLSBNYXBwaW5nIGZpbGUgc3RydWN0dXJl IHBvaW50ZXIKKyAqIG5hbWVidWYgLSBCdWZmZXIgZm9yIHRoZSBmaWxlIG5hbWUgc3RvcmFnZQor ICogdmFsdWUgLSBwb2ludGVyIHRvIGZpbGUgbnVtYmVyIHN0b3JhZ2UgbG9jYXRpb24KKyAqIFJl dHVybnMgMSBpZiBkYXRhIHJlYWQsIGVsc2UgMAorICovCitwcml2YXRlIGludAorTWFwRmlsZVJl YWQoRklMRSAqIG1hcGZpbGUsIGNoYXIgKiBuYW1lYnVmLCBpbnQgKiB2YWx1ZSkKK3sKKyAgICBp bnQgY291bnQgPSAwOworICAgIGludCBjOworCisgICAgLyogR2V0IHRoZSBmaWxlIG51bWJlciAq LworICAgIGlmIChmc2NhbmYobWFwZmlsZSwgIiVkXHQiLCB2YWx1ZSkgIT0gMSkKKyAgICAJcmV0 dXJuIDA7CisgICAgCisgICAgLyogR2V0IHRoZSBmaWxlIG5hbWUgKi8KKyAgICBkbyB7CisJbmFt ZWJ1Zltjb3VudCsrXSA9IGMgPSBmZ2V0YyhtYXBmaWxlKTsKKyAgICB9IHdoaWxlIChjb3VudCA8 IEJVRkZFUl9MRU5HVEggJiYgYyAhPSBFT0YgJiYgYyAhPSAnXG4nICYmIGMgIT0gJ1xyJyk7Cisg ICAgbmFtZWJ1ZlstLWNvdW50XSA9IDA7ICAgIC8qIFRlcm1pbmF0ZSBmaWxlIG5hbWUgKi8KKwor ICAgIC8qIENsZWFuIHVwIGFueSB0cmFpbGluZyBsaW5lZmVlZHMgb3IgY2FycmlhZ2UgcmV0dXJu cyAqLworICAgIHdoaWxlIChjICE9IEVPRiAmJiAoYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJykpIHsK KwljID0gZmdldGMobWFwZmlsZSk7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50ICE9IDAgPyAx OiAwOworfQorCisvKgorICogV3JpdGUgYW4gZW50cnkgaW4gdGhlIG1hcCBmaWxlCisgKgorICog c3RyZWFtIC0gRmlsZSBzdHJ1Y3R1cmUgcG9pbnRlcgorICogbmFtZWJ1ZiAtIEJ1ZmZlciBmb3Ig dGhlIGZpbGUgbmFtZSBzdG9yYWdlCisgKiB2YWx1ZSAtIGZpbGUgbnVtYmVyCisgKi8KK3ByaXZh dGUgdm9pZAorTWFwRmlsZVdyaXRlKEZJTEUgKiBtYXBmaWxlLCBjb25zdCBjaGFyICogbmFtZWJ1 ZiwgaW50IHZhbHVlKQoreworICAgIGZwcmludGYobWFwZmlsZSwgIiAlZFx0JXNcbiIsIHZhbHVl LCBuYW1lYnVmKTsKK30KKworLyoKKyAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIGZpbGUgCisgKgor ICogcm9vdHBhdGggLSBQYXRoIHRvIGJhc2UgZGlzayBsb2NhdGlvbi4KKyAqIGZpbGVuYW1lIC0g RmlsZSBuYW1lIHN0cmluZworICovCitwcml2YXRlIHZvaWQKK01hcEZpbGVVbmxpbmsoY29uc3Qg Y2hhciAqIHJvb3RwYXRoLCBjb25zdCBjaGFyICogZmlsZW5hbWUpCit7CisgICAgY2hhciBmdWxs bmFtZVtCVUZGRVJfTEVOR1RIXTsKKworICAgIGlmIChzdHJsZW4ocm9vdHBhdGgpICsgc3RybGVu KGZpbGVuYW1lKSA+PSBCVUZGRVJfTEVOR1RIKQorICAgICAgICByZXR1cm47CisgICAgc25wcmlu dGYoZnVsbG5hbWUsIEJVRkZFUl9MRU5HVEgsICIlcyVzIiwgcm9vdHBhdGgsIGZpbGVuYW1lKTsK KyAgICB1bmxpbmsoZnVsbG5hbWUpOworfQorCisvKgorICogUmVuYW1lIHRoZSBzcGVjaWZpZWQg ZmlsZSB0byBuZXcgc3BlY2lmaWVkIG5hbWUKKyAqCisgKiByb290cGF0aCAtIFBhdGggdG8gYmFz ZSBkaXNrIGxvY2F0aW9uLgorICogb2xkZmlsZW5hbWUgLSBPbGQgZmlsZSBuYW1lIHN0cmluZwor ICogbmV3ZmlsZW5hbWUgLSBOZXcgZmlsZSBuYW1lIHN0cmluZworICovCitwcml2YXRlIHZvaWQK K01hcEZpbGVSZW5hbWUoY29uc3QgY2hhciAqIHJvb3RwYXRoLCBjb25zdCBjaGFyICogbmV3Zmls ZW5hbWUsIGNvbnN0IGNoYXIgKiBvbGRmaWxlbmFtZSkKK3sKKyAgICBjaGFyIG9sZGZ1bGxuYW1l W0JVRkZFUl9MRU5HVEhdOworICAgIGNoYXIgbmV3ZnVsbG5hbWVbQlVGRkVSX0xFTkdUSF07CisK KyAgICBpZiAoc3RybGVuKHJvb3RwYXRoKSArIHN0cmxlbihvbGRmaWxlbmFtZSkgPj0gQlVGRkVS X0xFTkdUSCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzdHJsZW4ocm9vdHBhdGgpICsgc3Ry bGVuKG5ld2ZpbGVuYW1lKSA+PSBCVUZGRVJfTEVOR1RIKQorICAgICAgICByZXR1cm47CisgICAg c25wcmludGYob2xkZnVsbG5hbWUsIEJVRkZFUl9MRU5HVEgsICIlcyVzIiwgcm9vdHBhdGgsIG9s ZGZpbGVuYW1lKTsKKyAgICBzbnByaW50ZihuZXdmdWxsbmFtZSwgQlVGRkVSX0xFTkdUSCwgIiVz JXMiLCByb290cGF0aCwgbmV3ZmlsZW5hbWUpOworICAgIHJlbmFtZShvbGRmdWxsbmFtZSwgbmV3 ZnVsbG5hbWUpOworfQorCisvKgorICogTWFwVG9GaWxlCisgKgorICogU2VhcmNoIGZvciBtYXBw ZWQgbnVtYmVyIGZyb20gbWFwIGZpbGUgd2l0aCByZXF1aWVkIG5hbWUuIElmIHNhbWUgbmFtZSBl eGlzdCwKKyAqIGZpcnN0IChsb3dlc3QgbnVtYmVyKSB3aWxsIGJlIHJldHVybmVkLgorICogcm9v dHBhdGggICAgICAgIGNoYXIqICAgc3RyaW5nIG9mIHRoZSBiYXNlIHBhdGggd2hlcmUgaW4gZGlz azAgcmVzaWRlIChDOlxQU1xEaXNrMFwpCisgKiBuYW1lICAgICAgICAgICAgY2hhciogICBzdHJp bmcgdG8gc2VhcmNoIHBhdHRlcm4gZm9yIGZ1bGwgbWF0Y2ggKGZvbnRcUnl1bWluLUxpZ2h0KQor ICogcmV0dXJucwkgICAgLTEgaWYgZmlsZSBub3QgZm91bmQsIGZpbGUgbnVtYmVyIGlmIGZvdW5k LgorICovCitwcml2YXRlIGludAorTWFwVG9GaWxlKGNvbnN0IGNoYXIqIHJvb3RwYXRoLCBjb25z dCBjaGFyKiBuYW1lKQoreworICAgIEZJTEUgKiBtYXBmaWxlOworICAgIGludCBkID0gLTE7Cisg ICAgY2hhciBmaWxlbmFtZVtCVUZGRVJfTEVOR1RIXTsKKyAgICBpbnQgZmlsZV92ZXJzaW9uOwor CisgICAgbWFwZmlsZSA9IE1hcEZpbGVPcGVuKHJvb3RwYXRoLCBNQVBfRklMRV9OQU1FLCAiciIp OworICAgIGlmIChtYXBmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8q IFZlcmlmeSB0aGUgbWFwcGluZyBmaWxlIHZlcnNpb24gbnVtYmVyICovCisKKyAgICBpZiAoTWFw RmlsZVJlYWRWZXJzaW9uKG1hcGZpbGUsICZmaWxlX3ZlcnNpb24pCisgICAgCSYmIGZpbGVfdmVy c2lvbiA9PSBNQVBfRklMRV9WRVJTSU9OKSB7CisKKyAgICAgICAgLyogU2NhbiB0aGUgZmlsZSBs b29raW5nIGZvciB0aGUgZ2l2ZW4gbmFtZSAqLworCisgICAgICAgIHdoaWxlIChNYXBGaWxlUmVh ZChtYXBmaWxlLCBmaWxlbmFtZSwgJmQpKSB7CisgICAgICAgICAgICBpZiAoc3RyY21wKGZpbGVu YW1lLCBuYW1lKSA9PSAwKQorICAgIAkgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZCA9IC0x OworICAgICAgICB9CisgICAgfQorICAgIGZjbG9zZShtYXBmaWxlKTsKKyAgICByZXR1cm4gZDsK K30KKworLyoKKyAqIG1hcF9maWxlX2VudW1faW5pdAorICoKKyAqIGNyZWF0ZSBlbnVtaWF0ZSBz dHJ1Y3R1cmUgZm9yIGEgbWFwcGVkIGZpbGUgYW5kIGZpbGwgcGF0dGVybiBmb3Igc2VhcmNoCisg KiByb290X25hbWUgICAgICAgY2hhciogICBzdHJpbmcgb2YgdGhlIGJhc2UgcGF0aCB3aGVyZSBp biBkaXNrMCByZXNpZGUgKGUuZy4gQzpcUFNcRGlzazBcKQorICogc2VhcmNoX3BhdHRlcm4gIGNo YXIqICAgc3RyaW5nIHRvIHNlYXJjaCBwYXR0ZXJuIChmb250XCopIG9yIGZ1bGwgbWF0Y2gKKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiBmb250XFJ5dW1pbi1MaWdodCkgb3IgTlVM TAorICogICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgbWVhbnMgYWxsIGZpbGVzCisgKiBS ZXR1cm5zOgkJICAgIE5VTEwgaWYgZXJyb3IsIGVsc2UgcG9pbnRlciB0byBlbnVtZXJhdGlvbiBz dHJ1Y3R1cmUuCisgKi8KK3ZvaWQgKgorbWFwX2ZpbGVfZW51bV9pbml0KGdzX21lbW9yeV90ICog bWVtLCBjb25zdCBjaGFyICogcm9vdF9uYW1lLCBjb25zdCBjaGFyICogc2VhcmNoX3BhdHRlcm4p Cit7CisgICAgaW50IGZpbGVfdmVyc2lvbjsKKyAgICBtYXBfZmlsZV9lbnVtICogbWFwZmlsZWVu dW0gPSBnc19hbGxvY19zdHJ1Y3QobWVtLCBtYXBfZmlsZV9lbnVtLCAmc3RfbWFwX2ZpbGVfZW51 bSwKKwkJCSAgIAkJCQkiZGlza246ZW51bV9pbml0KGZpbGVfZW51bSkiKTsKKworICAgIGlmICht YXBmaWxlZW51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtZW1zZXQobWFw ZmlsZWVudW0sIDAsIHNpemVvZihtYXBfZmlsZV9lbnVtKSk7CisgICAgbWFwZmlsZWVudW0tPm1l bW9yeSA9IG1lbTsKKworICAgIGlmIChzZWFyY2hfcGF0dGVybikgeworICAgICAgICBtYXBmaWxl ZW51bS0+cGF0dGVybiA9IChjaGFyICopZ3NfYWxsb2NfYnl0ZXMobWVtLCBzdHJsZW4oc2VhcmNo X3BhdHRlcm4pICsgMSwKKwkJCQkJCQkiZGlza246ZW51bV9pbml0KHBhdHRlcm4pIik7CisgICAg ICAgIGlmIChtYXBmaWxlZW51bS0+cGF0dGVybiA9PSBOVUxMKSB7CisJICAgIG1hcF9maWxlX2Vu dW1fY2xvc2UoKGZpbGVfZW51bSAqKSBtYXBmaWxlZW51bSk7CisgICAgICAgICAgICByZXR1cm4g TlVMTDsKKyAgICAgICAgfQorICAgICAgICBzdHJjcHkobWFwZmlsZWVudW0tPnBhdHRlcm4sIHNl YXJjaF9wYXR0ZXJuKTsKKyAgICB9CisKKyAgICBtYXBmaWxlZW51bS0+cm9vdCA9IChjaGFyICop Z3NfYWxsb2NfYnl0ZXMobWVtLCBzdHJsZW4ocm9vdF9uYW1lKSArIDEsIAorICAgIAkJCQkJCSJk aXNrbjplbnVtX2luaXQocm9vdCkiKTsKKyAgICBpZiAobWFwZmlsZWVudW0tPnJvb3QgPT0gTlVM TCkgeworCW1hcF9maWxlX2VudW1fY2xvc2UoKGZpbGVfZW51bSAqKSBtYXBmaWxlZW51bSk7Cisg ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChzdHJsZW4ocm9vdF9uYW1lKSA+ PSBCVUZGRVJfTEVOR1RIKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdHJjcHkobWFwZmls ZWVudW0tPnJvb3QsIHJvb3RfbmFtZSk7CisgICAgbWFwZmlsZWVudW0tPnN0cmVhbSA9IE1hcEZp bGVPcGVuKHJvb3RfbmFtZSwgTUFQX0ZJTEVfTkFNRSwgInIiKTsKKworICAgIC8qIENoZWNrIHRo ZSBtYXBwaW5nIGZpbGUgdmVyc2lvbiBudW1iZXIgKi8KKyAgICBpZiAobWFwZmlsZWVudW0tPnN0 cmVhbSAhPSBOVUxMCisJJiYgKCFNYXBGaWxlUmVhZFZlcnNpb24obWFwZmlsZWVudW0tPnN0cmVh bSwgJmZpbGVfdmVyc2lvbikKKwkgICAgfHwgZmlsZV92ZXJzaW9uICE9IE1BUF9GSUxFX1ZFUlNJ T04pKSB7CisJZmNsb3NlKG1hcGZpbGVlbnVtLT5zdHJlYW0pOyAgIC8qIEludmFsaWQgZmlsZSB2 ZXJzaW9uICovCisgICAgICAgIG1hcGZpbGVlbnVtLT5zdHJlYW0gPSBOVUxMOworICAgIH0KKwor ICAgIHJldHVybiBtYXBmaWxlZW51bTsKK30KKworLyoKKyAqIG1hcF9maWxlX2VudW1fbmV4dAor ICoKKyAqIGVudW1fbWVtICAgICAgICB2b2lkKiAgIHBvaW50ZXIgZm9yIG1hcCBmaWxlIGVudW0g c3RydWN0dXJlCisgKiBzZWFyY2hfcGF0dGVybiAgY2hhciogICBzdHJpbmcgYXJyYXkgZm9yIG5l eHQgdGFyZ2V0CisgKi8KK2Jvb2wKK21hcF9maWxlX2VudW1fbmV4dCh2b2lkICogZW51bV9tZW0s IGNoYXIqIHRhcmdldCkKK3sKKyAgICBpbnQgZCA9IC0xOworICAgIG1hcF9maWxlX2VudW0gKiBt YXBmaWxlZW51bTsKKworICAgIGlmIChlbnVtX21lbSA9PSBOVUxMKQorCXJldHVybiBmYWxzZTsK KworICAgIG1hcGZpbGVlbnVtID0gKG1hcF9maWxlX2VudW0qKWVudW1fbWVtOworICAgIGlmICht YXBmaWxlZW51bS0+c3RyZWFtID09IE5VTEwpCisJcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1h cGZpbGVlbnVtLT5wYXR0ZXJuKSB7CisgICAgICAgIC8qICBTZWFyY2ggZm9yIG5leHQgZW50cnkg dGhhdCBtYXRjaGVzIHBhdHRlcm4gKi8KKyAgICAgICAgd2hpbGUgKE1hcEZpbGVSZWFkKG1hcGZp bGVlbnVtLT5zdHJlYW0sIHRhcmdldCwgJmQpKSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nX21h dGNoKChieXRlICopdGFyZ2V0LCBzdHJsZW4odGFyZ2V0KSwKKwkJCSAgICAgKGJ5dGUgKiltYXBm aWxlZW51bS0+cGF0dGVybiwKKwkJCSAgICAgc3RybGVuKG1hcGZpbGVlbnVtLT5wYXR0ZXJuKSwg MCkpCisJCXJldHVybiB0cnVlOworCX0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qICBK dXN0IGdldCBuZXh0ICovCisgICAgICAgIGlmIChNYXBGaWxlUmVhZChtYXBmaWxlZW51bS0+c3Ry ZWFtLCB0YXJnZXQsICZkKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy ZXR1cm4gZmFsc2U7Cit9CisKKy8qIAorICogbWFwX2ZpbGVfZW51bV9jbG9zZQorICoKKyAqIGNs ZWFucyB1cCBhZnRlciBhbiBlbnVtZXJhdGlvbiwgdGhpcyBtYXkgb25seSBiZSBjYWxsZWQKKyAq IGlmIG1hcF9maWxlX2VudW1faW5pdCBkaWQgbm90IGZhaWwKKyAqLwordm9pZAorbWFwX2ZpbGVf ZW51bV9jbG9zZSh2b2lkICogZW51bV9tZW0pCit7CisgICAgbWFwX2ZpbGVfZW51bSAqIG1hcGZp bGVlbnVtID0gKG1hcF9maWxlX2VudW0gKikgZW51bV9tZW07CisgICAgZ3NfbWVtb3J5X3QgKiBt ZW0gPSBtYXBmaWxlZW51bS0+bWVtb3J5OworCisgICAgaWYgKG1hcGZpbGVlbnVtLT5zdHJlYW0p CisgICAgICAgIGZjbG9zZShtYXBmaWxlZW51bS0+c3RyZWFtKTsKKyAgICBpZiAobWFwZmlsZWVu dW0tPnJvb3QpCisgICAgICAgIGdzX2ZyZWVfb2JqZWN0KG1lbSwgbWFwZmlsZWVudW0tPnJvb3Qs ICJkaXNrbl9lbnVtX2luaXQocm9vdCkiKTsKKyAgICBpZiAobWFwZmlsZWVudW0tPnBhdHRlcm4p CisJZ3NfZnJlZV9vYmplY3QobWVtLCBtYXBmaWxlZW51bS0+cGF0dGVybiwgImRpc2tuX2VudW1f aW5pdChwYXR0ZXJuKSIpOworICAgIGdzX2ZyZWVfb2JqZWN0KG1lbSwgbWFwZmlsZWVudW0sICJk aXNrbl9lbnVtX2luaXQobWFwZmlsZWVudW0pIik7Cit9CisKKy8qCisgKiBtYXBfZmlsZV9uYW1l X2dldAorICoKKyAqIG1hcHMgdGhlIHBzbmFtZShGbmFtZSkgdG8gdGhlIG9zbmFtZSB1c2luZyBj b25jYXRlbmluZyB0aGUgcm9vdF9uYW1lIGFuZCBpZAorICogSWQgd2lsbCBiZSBhIGxvd2VzdCBv bmUgaWYgc2FtZSBwc25hbWUgZXhpc3RzIG1vcmUgdGhhbiBvbmUgaW4gbWFwIGZpbGUuIFNlZSBN YXBUb0ZpbGUKKyAqIGZvciBkZXRhaWwuCisgKiByb290X25hbWUgICAgICAgY2hhciogICBzdHJp bmcgb2YgdGhlIGJhc2UgcGF0aCB3aGVyZSBpbiBkaXNrMCByZXNpZGUKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgIChlLmcuQzpcUFNcRGlzazBcKQorICogRm5hbWUgICAgICAgICAgIGNoYXIq ICAgbmFtZSBvZiB0aGUgZW50cnkgdG8gZmluZCBpbiB0aGUgbWFwCisgKiBvc25hbWUgICAgICAg ICAgY2hhciogICByZXN1bHRpbmcgb3Mgc3BlY2lmaWMgcGF0aCB0byB0aGUgZmlsZQorICovCiti b29sCittYXBfZmlsZV9uYW1lX2dldChjb25zdCBjaGFyICogcm9vdF9uYW1lLCBjb25zdCBjaGFy ICogRm5hbWUsIGNoYXIgKiBvc25hbWUpCit7CisgICAgaW50IGQgPSBNYXBUb0ZpbGUocm9vdF9u YW1lLCBGbmFtZSk7CisKKyAgICBpZiAoZCAhPSAtMSkgeworCS8qIDIwIGNoYXJhY3RlcnMgYXJl IGVub3VnaCBmb3IgZXZlbiBhIDY0IGJpdCBpbnRlZ2VyICovCisgICAgICAgIGlmICgoc3RybGVu KHJvb3RfbmFtZSkgKyAyMCkgPCBCVUZGRVJfTEVOR1RIKSB7CisJICAgIHNwcmludGYob3NuYW1l LCAiJXMlZCIsIHJvb3RfbmFtZSwgZCk7CisJICAgIHJldHVybiB0cnVlOworCX0KKyAgICB9CisK KyAgICAqb3NuYW1lID0gMDsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBtYXBfZmls ZV9uYW1lX2RlbAorICoKKyAqIERlbGV0ZXMgRm5hbWUgZnJvbSB0aGUgbWFwcGluZyB0YWJsZSBh bmQgZG9lcyBub3QgZGVsZXRlIHRoZSBhY3R1YWwgZmlsZQorICogSWYgc2FtZSBGbmFtZSBleGlz dHMsIGFsbCBzYW1lIEZuYW1lIHdpbGwgYmUgZGVsZXRlZAorICogcm9vdF9uYW1lICAgICAgIGNo YXIqICAgc3RyaW5nIG9mIHRoZSBiYXNlIHBhdGggd2hlcmUgaW4gZGlzazAgcmVzaWRlIChDOlxQ U1xEaXNrMFwpCisgKiBGbmFtZSAgICAgICAgICAgY2hhciogICBuYW1lIG9mIHRoZSBlbnRyeSB0 byBhZGQgdG8gdGhlIG1hcAorICovCit2b2lkCittYXBfZmlsZV9uYW1lX2RlbChjb25zdCBjaGFy ICogcm9vdF9uYW1lLCBjb25zdCBjaGFyICogRm5hbWUpCit7CisgICAgLyogIHNlYXJjaCBmb3Ig dGFyZ2V0IGVudHJ5ICovCisgICAgaW50IGQgPSBNYXBUb0ZpbGUocm9vdF9uYW1lLCBGbmFtZSk7 CisgICAgaW50IGZpbGVfdmVyc2lvbjsKKworICAgIGlmIChkICE9IC0xKSB7CQkJIC8qIGlmIHRo ZSBmaWxlIGV4aXN0cyAuLi4gKi8KKyAgICAgICAgY2hhciAgICBuYW1lW0JVRkZFUl9MRU5HVEhd OworICAgICAgICBGSUxFKiAgIG5ld01hcDsKKyAgICAgICAgRklMRSogICBvbGRNYXA7CisKKwkv KiBPcGVuIGN1cnJlbnQgbWFwIGZpbGUgYW5kIGEgd29ya2luZyBmaWxlICovCisKKyAgICAgICAg TWFwRmlsZVVubGluayhyb290X25hbWUsIFRFTVBfRklMRV9OQU1FICk7CisgICAgICAgIG5ld01h cCA9IE1hcEZpbGVPcGVuKHJvb3RfbmFtZSwgVEVNUF9GSUxFX05BTUUsICJ3Iik7CisgICAgICAg IGlmIChuZXdNYXAgPT0gTlVMTCkKKwkgICAgcmV0dXJuOworICAgICAgICBvbGRNYXAgPSBNYXBG aWxlT3Blbihyb290X25hbWUsIE1BUF9GSUxFX05BTUUsICJyIik7CisgICAgICAgIGlmIChvbGRN YXAgIT0gTlVMTCAmJiAoIU1hcEZpbGVSZWFkVmVyc2lvbihvbGRNYXAsICZmaWxlX3ZlcnNpb24p CisJICAgIHx8IGZpbGVfdmVyc2lvbiAhPSBNQVBfRklMRV9WRVJTSU9OKSkgeworICAgICAgICAg ICAgZmNsb3NlKG9sZE1hcCk7CisJICAgIG9sZE1hcD0gTlVMTDsKKwl9CisgICAgICAgIGlmIChv bGRNYXAgPT0gTlVMTCkgeworICAgICAgICAgICAgZmNsb3NlKG5ld01hcCk7CisgICAgICAgICAg ICBNYXBGaWxlVW5saW5rKHJvb3RfbmFtZSwgVEVNUF9GSUxFX05BTUUpOworCSAgICByZXR1cm47 CisgICAgICAgIH0KKworCS8qIENvcHkgZXZlcnkgbGluZSBvZiB0aGUgbWFwIGZpbGUgZXhjZXB0 IHRoZSBvbmUgd2l0aCBnaXZlbiBuYW1lICovCisKKyAgICAgICAgTWFwRmlsZVdyaXRlVmVyc2lv bihuZXdNYXAsIE1BUF9GSUxFX1ZFUlNJT04pOworICAgICAgICB3aGlsZSAoTWFwRmlsZVJlYWQo b2xkTWFwLCBuYW1lLCAmZCkpCisgICAgICAgICAgICBpZiAoc3RyY21wKG5hbWUsIEZuYW1lKSkK KyAgICAgICAgICAgICAgICBNYXBGaWxlV3JpdGUobmV3TWFwLCBuYW1lLCBkKTsKKyAgICAgICAg ZmNsb3NlKG5ld01hcCk7CisgICAgICAgIGZjbG9zZShvbGRNYXApOworICAgICAgICBNYXBGaWxl VW5saW5rKHJvb3RfbmFtZSwgTUFQX0ZJTEVfTkFNRSk7CisgICAgICAgIE1hcEZpbGVSZW5hbWUo cm9vdF9uYW1lLCBNQVBfRklMRV9OQU1FLCBURU1QX0ZJTEVfTkFNRSk7CisgICAgfQorfQorCisv KgorICogbWFwX2ZpbGVfYWRkCisgKgorICogYWRkcyBGbmFtZSB0byB0aGUgbWFwcGluZyB0YWJs ZSBhbmQgZG9lcyBub3QgY3JlYXRlIGFuIHVuaXF1ZSBuZXcgZW1wdHkgZmlsZQorICogSWYgc2Ft ZSBGbmFtZSBleGlzdHMsIG5ldyBGbmFtZSB3aWxsIG5vdCBiZSBhZGRlZC4KKyAqIHJvb3RfbmFt ZSAgICAgICBjaGFyKiAgIHN0cmluZyBvZiB0aGUgYmFzZSBwYXRoIHdoZXJlIGluIGRpc2swIHJl c2lkZSAoQzpcUFNcRGlzazBcKQorICogRm5hbWUgICAgICAgICAgIGNoYXIqICAgbmFtZSBvZiB0 aGUgZW50cnkgdG8gYWRkIHRvIHRoZSBtYXAKKyAqLwordm9pZAorbWFwX2ZpbGVfbmFtZV9hZGQo Y29uc3QgY2hhciAqIHJvb3RfbmFtZSwgY29uc3QgY2hhciAqIEZuYW1lKQoreworICAgIC8qIAor ICAgICAqIGFkZCBlbnRyeSB0byBtYXAgZmlsZQorICAgICAqIGVudHJ5IG51bWJlciBpcyBvbmUg Z3JlYXRlciB0aGFuIGJpZ2dlc3QgbnVtYmVyCisgICAgICovCisgICAgY2hhciAgICBuYW1lW0JV RkZFUl9MRU5HVEhdOworICAgIGludCBkOworICAgIGludCBkbWF4ID0gLTE7CisgICAgaW50IGZp bGVfdmVyc2lvbjsKKyAgICBGSUxFKiAgIG5ld01hcDsKKyAgICBGSUxFKiAgIG9sZE1hcDsKKyAg ICAKKyAgICBvbGRNYXAgPSBNYXBGaWxlT3Blbihyb290X25hbWUsIE1BUF9GSUxFX05BTUUsICJy Iik7CisgICAgaWYgKG9sZE1hcCAhPSBOVUxMICYmICghTWFwRmlsZVJlYWRWZXJzaW9uKG9sZE1h cCwgJmZpbGVfdmVyc2lvbikKKwl8fCBmaWxlX3ZlcnNpb24gIT0gTUFQX0ZJTEVfVkVSU0lPTikp IHsKKyAgICAgICAgZmNsb3NlKG9sZE1hcCk7CisJb2xkTWFwID0gTlVMTDsKKyAgICB9CisgICAg aWYgKG9sZE1hcCA9PSBOVUxMKSB7CisgICAgICAgIG9sZE1hcCA9IE1hcEZpbGVPcGVuKHJvb3Rf bmFtZSwgTUFQX0ZJTEVfTkFNRSwgInciKTsKKwlpZiAoIW9sZE1hcCkgCisJICAgIHJldHVybjsK KyAgICAgICAgTWFwRmlsZVdyaXRlVmVyc2lvbihvbGRNYXAsIE1BUF9GSUxFX1ZFUlNJT04pOwor ICAgICAgICBNYXBGaWxlV3JpdGUob2xkTWFwLCBGbmFtZSwgSW5pdGlhbE51bWJlcik7CisgICAg ICAgIGZjbG9zZShvbGRNYXApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgTWFwRmlsZVVu bGluayhyb290X25hbWUsIFRFTVBfRklMRV9OQU1FKTsKKyAgICAgICAgbmV3TWFwID0gTWFwRmls ZU9wZW4ocm9vdF9uYW1lLCBURU1QX0ZJTEVfTkFNRSwgInciKTsKKyAgICAgICAgaWYgKG5ld01h cCAhPSBOVUxMKSB7CisgICAgICAgICAgICBNYXBGaWxlV3JpdGVWZXJzaW9uKG5ld01hcCwgTUFQ X0ZJTEVfVkVSU0lPTik7CisgICAgICAgICAgICB3aGlsZSAoTWFwRmlsZVJlYWQob2xkTWFwLCBu YW1lLCAmZCkpIHsKKyAgICAgICAgCU1hcEZpbGVXcml0ZShuZXdNYXAsIG5hbWUsIGQpOworICAg ICAgICAgICAgICAgIGlmIChkbWF4IDwgZCkKKyAgICAgICAgICAgICAgICAgICAgZG1heCA9IGQ7 CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRtYXggKz0gMTsKKyAgICAgICAgICAgIE1h cEZpbGVXcml0ZShuZXdNYXAsIEZuYW1lLCBkbWF4KTsKKyAgICAgICAgICAgIGZjbG9zZShuZXdN YXApOworICAgICAgICAgICAgZmNsb3NlKG9sZE1hcCk7CisgICAgICAgICAgICBNYXBGaWxlVW5s aW5rKHJvb3RfbmFtZSwgTUFQX0ZJTEVfTkFNRSk7CisgICAgICAgICAgICBNYXBGaWxlUmVuYW1l KHJvb3RfbmFtZSwgTUFQX0ZJTEVfTkFNRSwgVEVNUF9GSUxFX05BTUUpOworICAgICAgICB9Cisg ICAgfQorfQorCisvKgorICogbWFwX2ZpbGVfbmFtZV9yZW4KKyAqCisgKiByZW5hbWVzIHRoZSBv bGRuYW1lIGludG8gbmV3bmFtZSBpbiB0aGUgbWFwcGluZyB0YWJsZS4gbmV3bmFtZSBtdXN0IG5v dCBleGlzdCBhbmQgbXVzdCBiZQorICogY2hlY2tlZCBieSB0aGUgY2FsbGVyLiBJZiBzYW1lIG5h bWUgZXhpc3QsIGFsbCBzYW1lIG5hbWUgd2lsbCBiZSByZW5hbWVkLgorICogcm9vdF9uYW1lICAg ICAgIGNoYXIqICAgc3RyaW5nIG9mIHRoZSBiYXNlIHBhdGggd2hlcmUgaW4gZGlzazAgcmVzaWRl IChDOlxQU1xEaXNrMFwpCisgKiBvbGRuYW1lICAgICAgICAgY2hhciogICBuYW1lIGN1cnJlbnRs eSBleGlzdGluZyBpbiB0aGUgbWFwCisgKiBuZXduYW1lICAgICAgICAgY2hhciogICBuYW1lIHRv IGNoYW5nZSB0aGUgZW50cnkgaW5kaWNhdGVkIGJ5IG9sZG5hbWUgaW50bworICovCit2b2lkCitt YXBfZmlsZV9uYW1lX3Jlbihjb25zdCBjaGFyKiByb290X25hbWUsIGNvbnN0IGNoYXIgKiBvbGRu YW1lLCBjb25zdCBjaGFyICogbmV3bmFtZSkKK3sgICAKKyAgICAvKiAgc2VhcmNoIGZvciB0YXJn ZXQgZW50cnkgKi8KKworICAgIGludCBkID0gTWFwVG9GaWxlKHJvb3RfbmFtZSwgb2xkbmFtZSk7 CisgICAgaW50IGZpbGVfdmVyc2lvbjsKKworICAgIGlmIChkICE9IC0xKSB7IAkJLyogaWYgdGFy Z2V0IGV4aXN0cyAuLi4gKi8KKyAgICAgICAgY2hhciAgICBuYW1lW0JVRkZFUl9MRU5HVEhdOwor ICAgICAgICBGSUxFKiAgIG5ld01hcDsKKyAgICAgICAgRklMRSogICBvbGRNYXA7CisgICAgICAg IAorCS8qIE9wZW4gY3VycmVudCBtYXAgZmlsZSBhbmQgYSB3b3JraW5nIGZpbGUgKi8KKworICAg ICAgICBNYXBGaWxlVW5saW5rKHJvb3RfbmFtZSwgVEVNUF9GSUxFX05BTUUgKTsKKyAgICAgICAg bmV3TWFwID0gTWFwRmlsZU9wZW4ocm9vdF9uYW1lLCBURU1QX0ZJTEVfTkFNRSwgInciKTsKKyAg ICAgICAgaWYgKG5ld01hcCA9PSBOVUxMKQorCSAgICByZXR1cm47CisgICAgICAgIG9sZE1hcCA9 IE1hcEZpbGVPcGVuKHJvb3RfbmFtZSwgTUFQX0ZJTEVfTkFNRSwgInIiKTsKKyAgICAgICAgaWYg KG9sZE1hcCAhPSBOVUxMICYmICghTWFwRmlsZVJlYWRWZXJzaW9uKG9sZE1hcCwgJmZpbGVfdmVy c2lvbikKKwkgICAgfHwgZmlsZV92ZXJzaW9uICE9IE1BUF9GSUxFX1ZFUlNJT04pKSB7CisgICAg ICAgICAgICBmY2xvc2Uob2xkTWFwKTsKKwkgICAgb2xkTWFwPSBOVUxMOworCX0KKyAgICAgICAg aWYgKG9sZE1hcCA9PSBOVUxMKSB7CisgICAgICAgICAgICBmY2xvc2UobmV3TWFwKTsKKyAgICAg ICAgICAgIE1hcEZpbGVVbmxpbmsocm9vdF9uYW1lLCBURU1QX0ZJTEVfTkFNRSk7CisJICAgIHJl dHVybjsKKyAgICAgICAgfQorCisJLyogTm93IGNvcHkgZGF0YSBmcm9tIG9sZCB0byBuZXcsIGNo YW5nZSBmaWxlIG5hbWUgd2hlbiBmb3VuZCAqLworCisgICAgICAgIE1hcEZpbGVXcml0ZVZlcnNp b24obmV3TWFwLCBNQVBfRklMRV9WRVJTSU9OKTsgIC8qIENvcHkgdGhlIHZlcnNpb24gbnVtYmVy ICovCisgICAgICAgIHdoaWxlIChNYXBGaWxlUmVhZChvbGRNYXAsIG5hbWUsICZkKSkKKyAgICAg ICAgICAgIGlmIChzdHJjbXAobmFtZSwgb2xkbmFtZSkpCisgICAgICAgICAgICAgICAgTWFwRmls ZVdyaXRlKG5ld01hcCwgbmFtZSwgZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgTWFwRmlsZVdyaXRlKG5ld01hcCwgbmV3bmFtZSwgZCk7CisgICAgICAgIGZjbG9zZShuZXdN YXApOworICAgICAgICBmY2xvc2Uob2xkTWFwKTsKKyAgICAgICAgTWFwRmlsZVVubGluayhyb290 X25hbWUsIE1BUF9GSUxFX05BTUUpOworICAgICAgICBNYXBGaWxlUmVuYW1lKHJvb3RfbmFtZSwg TUFQX0ZJTEVfTkFNRSwgVEVNUF9GSUxFX05BTUUpOworICAgIH0KK30KSW5kZXg6IHNyYy9nc2lv cmFtLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gc3JjL2dzaW9yYW0uYwkoLi4uL3RhZ3MvZ3M4LjU0KQkocmV2 aXNpb24gMCkKKysrIHNyYy9nc2lvcmFtLmMJKC4uLi90cnVuay9ncykJKHJldmlzaW9uIDIyKQpA QCAtMCwwICsxLDM5OSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgYXJ0b2Zjb2RlIExM Qy4KKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlk ZWQgQVMtSVMgd2l0aCBubyB3YXJyYW50eSwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgIGltcGxpZWQu CisKKyAgIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgbGljZW5zZSBhbmQgbWF5 IG5vdCBiZSBjb3BpZWQsIG1vZGlmaWVkCisgICBvciBkaXN0cmlidXRlZCBleGNlcHQgYXMgZXhw cmVzc2x5IGF1dGhvcml6ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQKKyAgIGxpY2Vuc2UuICBS ZWZlciB0byBsaWNlbnNpbmcgaW5mb3JtYXRpb24gYXQgaHR0cDovL3d3dy5hcnRpZmV4LmNvbS8K KyAgIG9yIGNvbnRhY3QgQXJ0aWZleCBTb2Z0d2FyZSwgSW5jLiwgIDcgTXQuIExhc3NlbiBEcml2 ZSAtIFN1aXRlIEEtMTM0LAorICAgU2FuIFJhZmFlbCwgQ0EgIDk0OTAzLCBVLlMuQS4sICsxKDQx NSk0OTItOTg2MSwgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisqLworCisvKiRJZDogZ3Npb3Jh bS5jIDY2NTEgMjAwNi0wMy0xMyAxNjoxODoxOVogc3RlZmFuICQgKi8KKy8qICVyYW0qJSBSQU1E aXNrIElPRGV2aWNlIGltcGxlbWVudGF0aW9uIGZvciBHaG9zdHNjcmlwdCAqLworCisvKgorICog VGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzb3VyY2VzIGZvciBpbXBsbWVudGluZyB0aGUgJ2ZsYXQn IHJhbSBkaXNrCisgKiBmaWxlIHN0cnVjdHVyZSBzcGVjaWZpZWQgYnkgQWRvYmUuICBUaGlzIGZp bGUgc3RydWN0dXJlIGlzIHVzZWQKKyAqIHRvIGltcGxlbWVudCB0aGUgSS9PIGRldmljZXMgcmVm ZXJlZCB0byBhcyAlcmFtJSBvciAlcmFtMCUgdG8gJXJhbTklLgorICoKKyAqIFRoZXNlICdkaXNr cycgYXJlIGltcGxlbWVudGVkIGFzIHRlbXBvcmFyeSBkaXJlY3RvcmllcyB1bmRlciAvdG1wLgor ICoKKyAqLworCisjaW5jbHVkZSAiZXJybm9fLmgiCisjaW5jbHVkZSAic3RyaW5nXy5oIgorI2lu Y2x1ZGUgInVuaXN0ZF8uaCIKKyNpbmNsdWRlICJkaXJlbnRfLmgiCisjaW5jbHVkZSAiZ3guaCIK KyNpbmNsdWRlICJnc2Vycm9ycy5oIgorI2luY2x1ZGUgImdwLmgiCisjaW5jbHVkZSAiZ3NjZGVm cy5oIgorI2luY2x1ZGUgImdzcGFyYW0uaCIKKyNpbmNsdWRlICJnc3N0cnVjdC5oIgorI2luY2x1 ZGUgImd4aW9kZXYuaCIKKyNpbmNsdWRlICJnc3V0aWwuaCIKKyNpbmNsdWRlICJnc21hbGxvYy5o IgorI2luY2x1ZGUgImdzaW9tYXAuaCIKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworcHJp dmF0ZSBpb2Rldl9wcm9jX2luaXQocmFtZGlza19pbml0KTsKK3ByaXZhdGUgaW9kZXZfcHJvY19z aHV0ZG93bihyYW1kaXNrX3NodXRkb3duKTsKK3ByaXZhdGUgaW9kZXZfcHJvY19mb3BlbihyYW1k aXNrX2ZvcGVuKTsKK3ByaXZhdGUgaW9kZXZfcHJvY19kZWxldGVfZmlsZShyYW1kaXNrX2RlbGV0 ZSk7Citwcml2YXRlIGlvZGV2X3Byb2NfcmVuYW1lX2ZpbGUocmFtZGlza19yZW5hbWUpOworcHJp dmF0ZSBpb2Rldl9wcm9jX2ZpbGVfc3RhdHVzKHJhbWRpc2tfc3RhdHVzKTsKK3ByaXZhdGUgaW9k ZXZfcHJvY19lbnVtZXJhdGVfZmlsZXMocmFtZGlza19lbnVtZXJhdGVfZmlsZXMpOworcHJpdmF0 ZSBpb2Rldl9wcm9jX2VudW1lcmF0ZV9uZXh0KHJhbWRpc2tfZW51bWVyYXRlX25leHQpOworcHJp dmF0ZSBpb2Rldl9wcm9jX2VudW1lcmF0ZV9jbG9zZShyYW1kaXNrX2VudW1lcmF0ZV9jbG9zZSk7 Citwcml2YXRlIGlvZGV2X3Byb2NfZ2V0X3BhcmFtcyhyYW1kaXNrX2dldF9wYXJhbXMpOworcHJp dmF0ZSBpb2Rldl9wcm9jX3B1dF9wYXJhbXMocmFtZGlza19wdXRfcGFyYW1zKTsKKworLyogRGVm aW5lIGEgcmFtZGlzayAoJXJhbWRpc2slKSBkZXZpY2UgbWFjcm8gKi8KKyNkZWZpbmUgcmFtZGlz ayh2YXJuYW1lLHJhbWRpc2thbWUpIFwKK2NvbnN0IGd4X2lvX2RldmljZSB2YXJuYW1lID0gXAor eyBcCisgICAgcmFtZGlza2FtZSwgIkZpbGVTeXN0ZW0iLCBcCisgICAge3JhbWRpc2tfaW5pdCwg XAorICAgICByYW1kaXNrX3NodXRkb3duLCBcCisgICAgIE5VTEwsIFwKKyAgICAgTlVMTCwgXAor ICAgICByYW1kaXNrX2ZvcGVuLCBcCisgICAgIGlvZGV2X29zX2ZjbG9zZSwgXAorICAgICByYW1k aXNrX2RlbGV0ZSwgXAorICAgICByYW1kaXNrX3JlbmFtZSwgXAorICAgICByYW1kaXNrX3N0YXR1 cywgXAorICAgICByYW1kaXNrX2VudW1lcmF0ZV9maWxlcywgXAorICAgICByYW1kaXNrX2VudW1l cmF0ZV9uZXh0LCBcCisgICAgIHJhbWRpc2tfZW51bWVyYXRlX2Nsb3NlLCBcCisgICAgIHJhbWRp c2tfZ2V0X3BhcmFtcywgXAorICAgICByYW1kaXNrX3B1dF9wYXJhbXMgXAorICAgIH0gXAorfQor CisKKy8qCisgKiBEZWZpbmUgdGhlIHJhbSAoJXJhbSolKSBkZXZpY2VzLiBUaGVzZSBkZXZpY2Vz IGFyZQorICogdXNlZCBpbiB0aGUgZGV2aWNlIGxpc3QgaW4gZ2NvbmYuYy4KKyAqLworcmFtZGlz ayhnc19pb2Rldl9yYW0sICIlcmFtJSIpOworcmFtZGlzayhnc19pb2Rldl9yYW0wLCAiJXJhbTAl Iik7CityYW1kaXNrKGdzX2lvZGV2X3JhbTEsICIlcmFtMSUiKTsKKworI3VuZGVmIHJhbWRpc2sK KworI2RlZmluZSBSQU1ESVNLX0JMT0NLX1NJWkUgMTAyNAorI2RlZmluZSBSQU1ESVNLX0JMT0NL X01BWCAxMDI0CisKK3R5cGVkZWYgc3RydWN0IHJhbWRpc2tfc3RhdGVfcworeworICAgIGNoYXIg KnJvb3Q7CisgICAgZ3NfbWVtb3J5X3QgKm1lbTsKK30gcmFtZGlza19zdGF0ZTsKKworZ3NfcHJp dmF0ZV9zdF9jb25zdF9zdHJpbmdzMV9wdHJzMShzdF9yYW1kaXNrX3N0YXRlLCBzdHJ1Y3QgcmFt ZGlza19zdGF0ZV9zLAorCQkJCSAgICJyYW1kaXNrX3N0YXRlIiwgcmFtZGlza19zdGF0ZV9lbnVt X3B0cnMsCisJCQkJICAgcmFtZGlza19zdGF0ZV9yZWxvY19wdHJzLCByb290LCBtZW0pOworCisK Ky8qIHJlbW92ZSBhbGwgZmlsZXMgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IGZvciB0aGlzIHJhbWRp c2ssCisgKiB0aGVuIHRoZSByb290IGRpcmVjdG9yeSBpdHNlbGYuICBJZiB0aGVyZSdzIGFuIGVy cm9yIGluIGRlbGV0aW5nCisgKiBhIGZpbGUsIHdlIHN0b3AgYXQgdGhhdCBwb2ludCBpbnN0ZWFk IG9mIGFnZ3Jlc2l2ZWx5IHRyeWluZyB0byBkZWxldGUKKyAqIGV2ZXJ5dGhpbmcuCisgKi8KK3By aXZhdGUgaW50CityYW1kaXNrX2RlbGV0ZV9hbGxfZmlsZXMocmFtZGlza19zdGF0ZSAqIHJhbWRp c2spCit7CisgICAgRElSICpkaXI7CisgICAgc3RydWN0IGRpcmVudCAqZGlyZW50OworCisgICAg Y2hhciByZWFsbmFtZVtncF9maWxlX25hbWVfc2l6ZW9mXTsKKyAgICBpbnQgbmFtZWxlbjsKKwor ICAgIGlmIChyYW1kaXNrID09IE5VTEwpCisJcmV0dXJuX2Vycm9yKGdzX2Vycm9yX2lvZXJyb3Ip OworCisgICAgbmFtZWxlbiA9IHN0cmxlbihyYW1kaXNrLT5yb290KSAtIDE7CisgICAgc3RybmNw eShyZWFsbmFtZSwgcmFtZGlzay0+cm9vdCwgbmFtZWxlbik7CisKKyAgICBpZiAoKGRpciA9IG9w ZW5kaXIocmFtZGlzay0+cm9vdCkpID09IE5VTEwpCisJcmV0dXJuX2Vycm9yKGdzX2Vycm9yX2lv ZXJyb3IpOworCisgICAgd2hpbGUgKChkaXJlbnQgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsK KworCWlmIChzdHJjbXAoZGlyZW50LT5kX25hbWUsICIuIikgIT0gMCAmJgorCSAgICBzdHJjbXAo ZGlyZW50LT5kX25hbWUsICIuLiIpICE9IDApIHsKKworCSAgICBzdHJjcHkocmVhbG5hbWUsIHJh bWRpc2stPnJvb3QpOworCSAgICBzdHJjYXQocmVhbG5hbWUsIGRpcmVudC0+ZF9uYW1lKTsKKwor CSAgICBpZiAodW5saW5rKHJlYWxuYW1lKSAhPSAwKSB7CisJCXJldHVybl9lcnJvcihnc19lcnJv cl9pb2Vycm9yKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBjbG9zZWRpcihkaXIpOworCisg ICAgaWYgKHJtZGlyKHJhbWRpc2stPnJvb3QpICE9IDApCisJcmV0dXJuX2Vycm9yKGdzX2Vycm9y X2lvZXJyb3IpOworCisgICAgcmV0dXJuIDA7Cit9CisKKworLyogZmluZCBhIHNjcmF0Y2ggZGly ZWN0b3J5IGZvciB0aGUgInJhbWRpc2siLCBhbmQgdGhlbiBzYXZlCisgKiB0aGUgbmFtZSBpbnRv IHRoZSByYW1kaXNrX3N0YXRlLiAgdGhpcyBpcyBjYWxsZWQgYXQgaW5pdAorICogdGltZSwgYW5k IHdoZW5ldmVyIHdlIG5lZWQgdG8gcmVpbml0aWFsaXplIHRoZSByYW1kaXNrCisgKi8KK3ByaXZh dGUgaW50CityYW1kaXNrX2NyZWF0ZV93b3JraW5nX2RpcmVjdG9yeShyYW1kaXNrX3N0YXRlICog cHN0YXRlKQoreworICAgIGNoYXIgKmRuYW1lOworCisjZGVmaW5lIERJUk5BTUVfU0laRSAzMgor ICAgIGNoYXIgZGlybmFtZVtESVJOQU1FX1NJWkVdOworCisgICAgc3RyY3B5KGRpcm5hbWUsICJn c3JhbS0iKTsKKworICAgIGlmICgoZG5hbWUgPSBncF9jcmVhdGVfc2NyYXRjaF9kaXJlY3Rvcnko ZGlybmFtZSkpKSB7CisJcHN0YXRlLT5yb290ID0gc3RyZHVwKGRuYW1lKTsKKyAgICB9IGVsc2Ug eworCXJldHVybl9lcnJvcihnc19lcnJvcl91bmRlZmluZWRmaWxlbmFtZSk7CisgICAgfQorCisg ICAgcmV0dXJuIDA7Cit9CisKKworCitwcml2YXRlIGludAorcmFtZGlza19pbml0KGd4X2lvX2Rl dmljZSAqIGlvZGV2LCBnc19tZW1vcnlfdCAqIG1lbSkKK3sKKyAgICBpbnQgY29kZTsKKworICAg IHJhbWRpc2tfc3RhdGUgKnBzdGF0ZSA9CisJZ3NfYWxsb2Nfc3RydWN0KG1lbSwgcmFtZGlza19z dGF0ZSwgJnN0X3JhbWRpc2tfc3RhdGUsCisJCQkiaW9kZXZfcmFtZGlza19pbml0KHN0YXRlKSIp OworCisgICAgaWYgKCFwc3RhdGUpCisJcmV0dXJuIGdzX2Vycm9yX1ZNZXJyb3I7CisKKyAgICBp ZiAoKGNvZGUgPSByYW1kaXNrX2NyZWF0ZV93b3JraW5nX2RpcmVjdG9yeShwc3RhdGUpKSAhPSAw KQorCXJldHVybl9lcnJvcihjb2RlKTsKKworICAgIHBzdGF0ZS0+bWVtID0gbWVtOworICAgIGlv ZGV2LT5zdGF0ZSA9IHBzdGF0ZTsKKyAgICByZXR1cm4gMDsKK30KKworCitwcml2YXRlIGludAor cmFtZGlza19zaHV0ZG93bihneF9pb19kZXZpY2UgKiBpb2RldikKK3sKKyAgICByYW1kaXNrX3N0 YXRlICpwc3RhdGUgPSAocmFtZGlza19zdGF0ZSAqKSBpb2Rldi0+c3RhdGU7CisKKyAgICByZXR1 cm4gcmFtZGlza19kZWxldGVfYWxsX2ZpbGVzKHBzdGF0ZSk7Cit9CisKKworCitwcml2YXRlIGlu dAorcmFtZGlza19kZWxldGUoZ3hfaW9fZGV2aWNlICogaW9kZXYsIGNvbnN0IGNoYXIgKmZuYW1l KQoreworICAgIGNoYXIgcmVhbG5hbWVbZ3BfZmlsZV9uYW1lX3NpemVvZl07CisgICAgcmFtZGlz a19zdGF0ZSAqcHN0YXRlID0gKHJhbWRpc2tfc3RhdGUgKikgaW9kZXYtPnN0YXRlOworCisgICAg LyogRXhpdCBpZiB3ZSBkbyBub3QgaGF2ZSBhIHJvb3QgbG9jYXRpb24gKi8KKyAgICBpZiAoIXBz dGF0ZS0+cm9vdCkKKwlyZXR1cm5fZXJyb3IoZ3NfZXJyb3JfdW5kZWZpbmVkZmlsZW5hbWUpOwor CisgICAgLyogTWFwIGZpbGVuYW1lIChpZiBpdCBleGlzdHMpLiAqLworICAgIGlmICghbWFwX2Zp bGVfbmFtZV9nZXQocHN0YXRlLT5yb290LCBmbmFtZSwgcmVhbG5hbWUpKQorCXJldHVybl9lcnJv cihnc19lcnJvcl91bmRlZmluZWRmaWxlbmFtZSk7CisKKyAgICBtYXBfZmlsZV9uYW1lX2RlbChw c3RhdGUtPnJvb3QsIGZuYW1lKTsKKyAgICByZXR1cm4gKHVubGluayhyZWFsbmFtZSkgPT0gMCA/ IDAgOiBnc19lcnJvcl9pb2Vycm9yKTsKK30KKworCitwcml2YXRlIGludAorcmFtZGlza19yZW5h bWUoZ3hfaW9fZGV2aWNlICogaW9kZXYsIGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRv KQoreworICAgIGNoYXIgdG9yZWFsW2dwX2ZpbGVfbmFtZV9zaXplb2ZdOworICAgIHJhbWRpc2tf c3RhdGUgKnBzdGF0ZSA9IChyYW1kaXNrX3N0YXRlICopIGlvZGV2LT5zdGF0ZTsKKyAgICBpbnQg Y29kZSA9IDA7CisKKyAgICAvKiBFeGl0IGlmIHdlIGRvIG5vdCBoYXZlIGEgcm9vdCBsb2NhdGlv biAqLworICAgIGlmICghcHN0YXRlLT5yb290KQorCXJldHVybl9lcnJvcihnc19lcnJvcl91bmRl ZmluZWRmaWxlbmFtZSk7CisKKyAgICAvKiBpZiBmaWxlbmFtZXMgYXJlIHRoZSBzYW1lIHRoZW0g d2UgYXJlIGRvbmUuICovCisgICAgaWYgKHN0cmNtcCh0bywgZnJvbSkgPT0gMCkKKwlyZXR1cm4g MDsKKworICAgIC8qCisgICAgICogSWYgdGhlIGRlc3RpbmF0aW9uIGZpbGUgYWxyZWFkeSBleGlz dHMsIHRoZW4gd2Ugd2FudCB0byBkZWxldGUgaXQuCisgICAgICovCisgICAgaWYgKG1hcF9maWxl X25hbWVfZ2V0KHBzdGF0ZS0+cm9vdCwgdG8sIHRvcmVhbCkpIHsKKwltYXBfZmlsZV9uYW1lX2Rl bChwc3RhdGUtPnJvb3QsIHRvKTsKKwljb2RlID0gdW5saW5rKHRvcmVhbCkgPT0gMCA/IDAgOiBn c19lcnJvcl9pb2Vycm9yOworICAgIH0KKworICAgIG1hcF9maWxlX25hbWVfcmVuKHBzdGF0ZS0+ cm9vdCwgZnJvbSwgdG8pOworICAgIHJldHVybiBjb2RlOworfQorCisKK3ByaXZhdGUgaW50City YW1kaXNrX3N0YXR1cyhneF9pb19kZXZpY2UgKiBpb2RldiwgY29uc3QgY2hhciAqZm5hbWUsIHN0 cnVjdCBzdGF0ICpwc3RhdCkKK3sKKyAgICBjaGFyIHJlYWxuYW1lW2dwX2ZpbGVfbmFtZV9zaXpl b2ZdOworICAgIHJhbWRpc2tfc3RhdGUgKnBzdGF0ZSA9IChyYW1kaXNrX3N0YXRlICopIGlvZGV2 LT5zdGF0ZTsKKworICAgIC8qIEV4aXQgaWYgd2UgZG8gbm90IGhhdmUgYSByb290IGxvY2F0aW9u ICovCisgICAgaWYgKCFwc3RhdGUtPnJvb3QpCisJcmV0dXJuX2Vycm9yKGdzX2Vycm9yX3VuZGVm aW5lZGZpbGVuYW1lKTsKKworICAgIC8qIE1hcCBmaWxlbmFtZSAoaWYgaXQgZXhpc3RzKS4gKi8K KyAgICBpZiAoIW1hcF9maWxlX25hbWVfZ2V0KHBzdGF0ZS0+cm9vdCwgZm5hbWUsIHJlYWxuYW1l KSkKKwlyZXR1cm5fZXJyb3IoZ3NfZXJyb3JfdW5kZWZpbmVkZmlsZW5hbWUpOworCisgICAgcmV0 dXJuIChzdGF0KChjaGFyICopcmVhbG5hbWUsIHBzdGF0KSA8CisJICAgIDAgPyBnc19lcnJvcl91 bmRlZmluZWRmaWxlbmFtZSA6IDApOworfQorCisKK3ByaXZhdGUgdm9pZAorcmFtZGlza19lbnVt ZXJhdGVfY2xvc2UoZmlsZV9lbnVtICogcGZlbikKK3sKKyAgICBtYXBfZmlsZV9lbnVtX2Nsb3Nl KCh2b2lkICopcGZlbik7Cit9CisKKworcHJpdmF0ZSB1aW50CityYW1kaXNrX2VudW1lcmF0ZV9u ZXh0KGZpbGVfZW51bSAqIHBmZW4sIGNoYXIgKnB0ciwgdWludCBtYXhsZW4pCit7CisgICAgaWYg KG1hcF9maWxlX2VudW1fbmV4dCgodm9pZCAqKXBmZW4sIHB0cikpCisJcmV0dXJuIHN0cmxlbihw dHIpOworICAgIC8qIElmIHdlIGRpZCBub3QgZmluZCBhIGZpbGUgdGhlbiBjbGVhbiB1cCAqLwor ICAgIHJhbWRpc2tfZW51bWVyYXRlX2Nsb3NlKHBmZW4pOworICAgIHJldHVybiB+KHVpbnQpIDA7 Cit9CisKKworcHJpdmF0ZSBpbnQKK3JhbWRpc2tfZ2V0X3BhcmFtcyhneF9pb19kZXZpY2UgKiBp b2RldiwgZ3NfcGFyYW1fbGlzdCAqIHBsaXN0KQoreworICAgIGludCBjb2RlOworICAgIGludCBz byA9IDEwMDsKKyAgICBib29sIGJ0cnVlID0gdHJ1ZSwgYmZhbHNlID0gZmFsc2U7CisgICAgaW50 IEJsb2NrU2l6ZTsKKyAgICBpbnQgSW5pdGlhbGl6ZTsKKyAgICBpbnQgRnJlZTsKKyAgICBpbnQg UGh5c2ljYWxTaXplOworICAgIGludCBMb2dpY2FsU2l6ZTsKKyAgICBnc19wYXJhbV9zdHJpbmcg cm9vdF9wYXJhbTsKKyAgICByYW1kaXNrX3N0YXRlICpwc3RhdGUgPSAocmFtZGlza19zdGF0ZSAq KSBpb2Rldi0+c3RhdGU7CisKKyAgICBJbml0aWFsaXplID0gRnJlZSA9IDA7CisKKyAgICBQaHlz aWNhbFNpemUgPSBMb2dpY2FsU2l6ZSA9IEJsb2NrU2l6ZSA9IFJBTURJU0tfQkxPQ0tfU0laRTsK KworICAgIGlmIChwc3RhdGUpIHsKKwlwYXJhbV9zdHJpbmdfZnJvbV9zdHJpbmcocm9vdF9wYXJh bSwgcHN0YXRlLT5yb290KTsKKyAgICB9IGVsc2UgeworCXJldHVybl9lcnJvcihnc19lcnJvcl9p b2Vycm9yKTsKKyAgICB9CisKKworICAgIGNvZGUgPSBwYXJhbV93cml0ZV9ib29sKHBsaXN0LCAi SGFzTmFtZXMiLCAmYnRydWUpIDwgMCB8fAorCXBhcmFtX3dyaXRlX2Jvb2wocGxpc3QsICJNb3Vu dGVkIiwgJmJ0cnVlKSA8IDAgfHwKKwlwYXJhbV93cml0ZV9ib29sKHBsaXN0LCAiUmVtb3ZhYmxl IiwgJmJ0cnVlKSA8IDAgfHwKKwlwYXJhbV93cml0ZV9ib29sKHBsaXN0LCAiV3JpdGVhYmxlIiwg JmJ0cnVlKSA8IDAgfHwKKwlwYXJhbV93cml0ZV9ib29sKHBsaXN0LCAiU2VhcmNoYWJsZSIsICZi ZmFsc2UpIDwgMCB8fAorCXBhcmFtX3dyaXRlX3N0cmluZyhwbGlzdCwgIlJvb3QiLCAmcm9vdF9w YXJhbSkgPCAwIHx8CisJcGFyYW1fd3JpdGVfaW50KHBsaXN0LCAiU2VhcmNoT3JkZXIiLCAmc28p IDwgMCB8fAorCXBhcmFtX3dyaXRlX2ludChwbGlzdCwgIkJsb2NrU2l6ZSIsICZCbG9ja1NpemUp IDwgMCB8fAorCXBhcmFtX3dyaXRlX2ludChwbGlzdCwgIkZyZWUiLCAmRnJlZSkgPCAwIHx8CisJ cGFyYW1fd3JpdGVfaW50KHBsaXN0LCAiUGh5c2ljYWxTaXplIiwgJlBoeXNpY2FsU2l6ZSkgPCAw IHx8CisJcGFyYW1fd3JpdGVfaW50KHBsaXN0LCAiTG9naWNhbFNpemUiLCAmTG9naWNhbFNpemUp IDwgMCB8fAorCXBhcmFtX3dyaXRlX2ludChwbGlzdCwgIkluaXRpYWxpemVBY3Rpb24iLCAmSW5p dGlhbGl6ZSkgPCAwOworICAgIHJldHVybiBjb2RlOworfQorCisKK3ByaXZhdGUgaW50CityYW1k aXNrX3B1dF9wYXJhbXMoZ3hfaW9fZGV2aWNlICogaW9kZXYsIGdzX3BhcmFtX2xpc3QgKiBwbGlz dCkKK3sKKyAgICByYW1kaXNrX3N0YXRlICpwc3RhdGUgPSAocmFtZGlza19zdGF0ZSAqKSBpb2Rl di0+c3RhdGU7CisgICAgaW50IEluaXRpYWxpemUgPSAtMTsKKworICAgIGJvb2wgZG9faW5pdGlh bGl6YXRpb24gPSBmYWxzZTsKKyAgICBpbnQgY29kZTsKKworICAgIGNvZGUgPSBwYXJhbV9yZWFk X2ludChwbGlzdCwgIkluaXRpYWxpemVBY3Rpb24iLCAmSW5pdGlhbGl6ZSk7CisgICAgaWYgKGNv ZGUgPT0gMCkgeworCWRvX2luaXRpYWxpemF0aW9uID0gKEluaXRpYWxpemUgPT0gMSk7CisgICAg fSBlbHNlIGlmIChjb2RlID09IDEpIHsKKwkvKiBkbyBub3RoaW5nICovCisgICAgfSBlbHNlIHsK KwlwYXJhbV9zaWduYWxfZXJyb3IocGxpc3QsICJJbml0aWFsaXplQWN0aW9uIiwgY29kZSk7Cisg ICAgfQorCisgICAgLyogYSByZWFsIHJhbWRpc2sgaW1wbGVtZW50YXRpb24gc2hvdWxkIGNoZWNr IGZvciBhIGNoYW5nZQorICAgICAqIGluIHRoZSBMb2dpY2FsU2l6ZSBwYXJhbWV0ZXIgYXQgdGhp cyBwb2ludAorICAgICAqLworCisgICAgaWYgKGRvX2luaXRpYWxpemF0aW9uKSB7CisJcmV0dXJu IHJhbWRpc2tfZGVsZXRlX2FsbF9maWxlcyhwc3RhdGUpIHx8CisJICAgIHJhbWRpc2tfY3JlYXRl X3dvcmtpbmdfZGlyZWN0b3J5KHBzdGF0ZSk7CisKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K KworCisKKworCitwcml2YXRlIGZpbGVfZW51bSAqCityYW1kaXNrX2VudW1lcmF0ZV9maWxlcyhn eF9pb19kZXZpY2UgKiBpb2RldiwgY29uc3QgY2hhciAqcGF0LCB1aW50IHBhdGxlbiwKKwkJCWdz X21lbW9yeV90ICogbWVtKQoreworICAgIGNoYXIgcGF0c3RyW2dwX2ZpbGVfbmFtZV9zaXplb2Zd OworICAgIHJhbWRpc2tfc3RhdGUgKnBzdGF0ZSA9IChyYW1kaXNrX3N0YXRlICopIGlvZGV2LT5z dGF0ZTsKKworICAgIG1lbWNweShwYXRzdHIsIHBhdCwgcGF0bGVuKTsJLyogQ29weSBzdHJpbmcg dG8gYnVmZmVyICovCisgICAgcGF0c3RyW3BhdGxlbl0gPSAwOwkJLyogVGVybWluYXRlIHN0cmlu ZyAqLworICAgIHJldHVybiAoZmlsZV9lbnVtICopIG1hcF9maWxlX2VudW1faW5pdChtZW0sIHBz dGF0ZS0+cm9vdCwgcGF0c3RyKTsKK30KKworCisKK3ByaXZhdGUgaW50CityYW1kaXNrX2ZvcGVu KGd4X2lvX2RldmljZSAqIGlvZGV2LCBjb25zdCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqYWNj ZXNzLAorCSAgICAgIEZJTEUgKiogcGZpbGUsIGNoYXIgKnJmbmFtZSwgdWludCBybmFtZWxlbikK K3sKKyAgICBjaGFyIHJlYWxuYW1lW2dwX2ZpbGVfbmFtZV9zaXplb2ZdOworICAgIHJhbWRpc2tf c3RhdGUgKnBzdGF0ZSA9IChyYW1kaXNrX3N0YXRlICopIGlvZGV2LT5zdGF0ZTsKKworICAgIC8q IEV4aXQgaWYgd2UgZG8gbm90IGhhdmUgYSByb290IGxvY2F0aW9uICovCisgICAgaWYgKCFwc3Rh dGUtPnJvb3QpCisJcmV0dXJuX2Vycm9yKGdzX2Vycm9yX3VuZGVmaW5lZGZpbGVuYW1lKTsKKwor ICAgIC8qIFJlbWFwIGZpbGVuYW1lIChpZiBpdCBleGlzdHMpLiAqLworICAgIGlmICghbWFwX2Zp bGVfbmFtZV9nZXQocHN0YXRlLT5yb290LCBmbmFtZSwgcmVhbG5hbWUpKSB7CisJaWYgKHN0cmNo cihhY2Nlc3MsICd3JykpIHsKKwkgICAgbWFwX2ZpbGVfbmFtZV9hZGQocHN0YXRlLT5yb290LCBm bmFtZSk7CisJICAgIG1hcF9maWxlX25hbWVfZ2V0KHBzdGF0ZS0+cm9vdCwgZm5hbWUsIHJlYWxu YW1lKTsKKwl9IGVsc2UKKwkgICAgcmV0dXJuX2Vycm9yKGdzX2Vycm9yX3VuZGVmaW5lZGZpbGVu YW1lKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW9kZXZfb3NfZm9wZW4oaW9kZXZfZGVmYXVsdCwg cmVhbG5hbWUsIGFjY2VzcywgcGZpbGUsIHJmbmFtZSwKKwkJCSAgcm5hbWVsZW4pOworfQpJbmRl eDogc3JjL2xpYi5tYWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3JjL2xpYi5tYWsJKC4uLi90YWdzL2dzOC41 NCkJKHJldmlzaW9uIDIyKQorKysgc3JjL2xpYi5tYWsJKC4uLi90cnVuay9ncykJKHJldmlzaW9u IDIyKQpAQCAtMTA0LDYgKzEwNCw3IEBACiAKICMgTWlzY2VsbGFuZW91cwogCitnc2lvbWFwX2g9 JChHTFNSQylnc2lvbWFwLmgKIGdzaW9faD0kKEdMU1JDKWdzaW8uaAogZ3hzdGRpb19oPSQoR0xT UkMpZ3hzdGRpby5oICQoZ3Npb19oKQogZ3NfZGxsX2NhbGxfaD0kKEdMU1JDKWdzX2RsbF9jYWxs LmgKQEAgLTI2MzcsMjAgKzI2MzgsMzMgQEAKIE1LUk9NRlNfQ09NTU9OX0RFUFM9JChzdGRwcmVf aCkgJChzdGRpbnRfX2gpICQoZ3Npb3JvbV9oKSBcCiAJJChnc21lbXJldF9oKSAkKGdzbWFsbG9j X2gpICQoZ3NzdHlwZV9oKSAkKGdwX2gpICQodGltZV9faCkKIAotIyBUaGUgZm9sbG93aW5nIGlz IG9ubHkgYW5kIGV4YW1wbGUgc2luY2UgdGhlICVyb20lIElPRGV2aWNlIGlzIG5vdCBleGNsdXNp dmVseQorIyBUaGUgZm9sbG93aW5nIGlzIG9ubHkgYW4gZXhhbXBsZSBzaW5jZSB0aGUgJXJvbSUg SU9EZXZpY2UgaXMgbm90IGV4Y2x1c2l2ZWx5CiAjIGEgUG9zdFNjcmlwdCBmZWF0dXJlIChhbHRo b3VnaCBpdCBpcyB1c3VhbGx5IHVzZWQgZm9yIENPTVBJTEVfSU5JVFMKICMgSWYgbm90IHVzaW5n IHRoZSBQUyBpbnRlcnByZXRlciwgdGhlIHJ1bGUgZm9yIGdzcm9tZnMuYyBpbiBpbnQubWFrIGlz IG5vdCB1c2VkCiAjIEluIHRoYXQgY2FzZSBidWlsZCBpdCBoZXJlIHVzaW5nIHRoZSBleGFtcGxl IGJlbG93OgogIyAkKEdMT0JKKWdzcm9tZnMuYzogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZT X1hFKQogIyAJJChFWFApJChNS1JPTUZTX1hFKSAtbyAkKEdMT0JKKWdzcm9tZnMuYyAtYyAtUCBt eV9yb21fY29udGVudHMvICoKIAorJChHTE9CSilnc2lvbWFwLiQoT0JKKSA6ICQoR0xTUkMpZ3Np b21hcC5jICQoR1hFUlIpXAorICQoZXJybm9fX2gpICQoc3RyaW5nX19oKSAkKHVuaXN0ZF9faClc CisgJChncF9oKSAkKGdzY2RlZnNfaCkgJChnc3BhcmFtX2gpICQoZ3NzdHJ1Y3RfaCkgJChneGlv ZGV2X2gpICQoZ3N1dGlsX2gpICQoZ3Npb21hcF9oKQorCSQoR0xDQykgJChHTE9fKWdzaW9tYXAu JChPQkopICQoQ18pICQoR0xTUkMpZ3Npb21hcC5jCisKKwogIyAtLS0tLS0tLS0tLS0tLS0tIFN1 cHBvcnQgZm9yICVkaXNrIElPRGV2aWNlcyAtLS0tLS0tLS0tLS0tLS0tICMKICMgVGhlIGZvbGxv d2luZyBtb2R1bGUgaXMgaW5jbHVkZWQgb25seSBpZiB0aGUgZGlza24uZGV2IEZFQVRVUkUgaXMg aW5jbHVkZWQKICQoR0xPQkopZ3Npb2Rpc2suJChPQkopIDogJChHTFNSQylnc2lvZGlzay5jICQo R1hFUlIpXAogICQoZXJybm9fX2gpICQoc3RyaW5nX19oKSAkKHVuaXN0ZF9faClcCi0gJChncF9o KSAkKGdzY2RlZnNfaCkgJChnc3BhcmFtX2gpICQoZ3NzdHJ1Y3RfaCkgJChneGlvZGV2X2gpICQo Z3N1dGlsX2gpCisgJChncF9oKSAkKGdzY2RlZnNfaCkgJChnc3BhcmFtX2gpICQoZ3NzdHJ1Y3Rf aCkgJChneGlvZGV2X2gpICQoZ3N1dGlsX2gpICQoZ3Npb21hcF9oKQogCSQoR0xDQykgJChHTE9f KWdzaW9kaXNrLiQoT0JKKSAkKENfKSAkKEdMU1JDKWdzaW9kaXNrLmMKIAorIyAtLS0tLS0tLS0t LS0tLS0tIFN1cHBvcnQgZm9yICVyYW0gSU9EZXZpY2VzIC0tLS0tLS0tLS0tLS0tLS0gIworIyBU aGUgZm9sbG93aW5nIG1vZHVsZSBpcyBpbmNsdWRlZCBvbmx5IGlmIHRoZSByYW1kaXNrbi5kZXYg RkVBVFVSRSBpcyBpbmNsdWRlZAorJChHTE9CSilnc2lvcmFtLiQoT0JKKSA6ICQoR0xTUkMpZ3Np b3JhbS5jICQoR1hFUlIpXAorICQoZXJybm9fX2gpICQoc3RyaW5nX19oKSAkKHVuaXN0ZF9faClc CisgJChncF9oKSAkKGdzY2RlZnNfaCkgJChnc3BhcmFtX2gpICQoZ3NzdHJ1Y3RfaCkgJChneGlv ZGV2X2gpICQoZ3N1dGlsX2gpICQoZ3Npb21hcF9oKQorCSQoR0xDQykgJChHTE9fKWdzaW9yYW0u JChPQkopICQoQ18pICQoR0xTUkMpZ3Npb3JhbS5jCisKICMgLS0tLS0tLS0tLS0tIFN1cHBvcnQg Zm9yICVtYWNyZXNvdXJjZSUgSU9EZXZpY2UgLS0tLS0tLS0tLS0tLSAjCiAjIFRoaXMgaXMgdXNl ZCB0byBsb2FkIG5hdGl2ZS1mb3JtYXQgZm9udHMgb24gTWFjT1MKICMgRGVmaW5lIHRoZSBtYWNy ZXMuZGV2IEZFQVRVUkUKSW5kZXg6IHNyYy9nc2lvbWFwLmgKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3JjL2dz aW9tYXAuaAkoLi4uL3RhZ3MvZ3M4LjU0KQkocmV2aXNpb24gMCkKKysrIHNyYy9nc2lvbWFwLmgJ KC4uLi90cnVuay9ncykJKHJldmlzaW9uIDIyKQpAQCAtMCwwICsxLDM4IEBACisvKiBDb3B5cmln aHQgKEMpIDIwMDEtMjAwNiBhcnRvZmNvZGUgTExDLgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4K KyAgCisgICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIEFTLUlTIHdpdGggbm8gd2FycmFudHks IGVpdGhlciBleHByZXNzIG9yCisgICBpbXBsaWVkLgorCisgICBUaGlzIHNvZnR3YXJlIGlzIGRp c3RyaWJ1dGVkIHVuZGVyIGxpY2Vuc2UgYW5kIG1heSBub3QgYmUgY29waWVkLCBtb2RpZmllZAor ICAgb3IgZGlzdHJpYnV0ZWQgZXhjZXB0IGFzIGV4cHJlc3NseSBhdXRob3JpemVkIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGF0CisgICBsaWNlbnNlLiAgUmVmZXIgdG8gbGljZW5zaW5nIGluZm9ybWF0 aW9uIGF0IGh0dHA6Ly93d3cuYXJ0aWZleC5jb20vCisgICBvciBjb250YWN0IEFydGlmZXggU29m dHdhcmUsIEluYy4sICA3IE10LiBMYXNzZW4gRHJpdmUgLSBTdWl0ZSBBLTEzNCwKKyAgIFNhbiBS YWZhZWwsIENBICA5NDkwMywgVS5TLkEuLCArMSg0MTUpNDkyLTk4NjEsIGZvciBmdXJ0aGVyIGlu Zm9ybWF0aW9uLgorKi8KKworLyokSWQ6IGdzaW9tYXAuaCA2NjUxIDIwMDYtMDMtMTMgMTY6MTg6 MTlaIHN0ZWZhbiAkICovCisvKiAlZGlzayolIGFuZCAlcmFtKiUgcG9ydGFibGUgZmlsZW5hbWUg bWFwcGluZyBjb2RlICovCisKKwordm9pZCAqbWFwX2ZpbGVfZW51bV9pbml0KGdzX21lbW9yeV90 ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2Jvb2wgbWFwX2ZpbGVfZW51bV9uZXh0 KHZvaWQgKiwgY2hhciAqKTsKK3ZvaWQgbWFwX2ZpbGVfZW51bV9jbG9zZSh2b2lkICopOworYm9v bCBtYXBfZmlsZV9uYW1lX2dldChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKTsK K3ZvaWQgbWFwX2ZpbGVfbmFtZV9hZGQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwordm9p ZCBtYXBfZmlsZV9uYW1lX3Jlbihjb25zdCBjaGFyKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICopOwordm9pZCBtYXBfZmlsZV9uYW1lX2RlbChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7 CisKKyNkZWZpbmUgTUFQX0ZJTEVfTkFNRSAibWFwLnR4dCIKKyNkZWZpbmUgVEVNUF9GSUxFX05B TUUgIlRtcC50eHQiCisjZGVmaW5lIE1BUF9GSUxFX1ZFUlNJT04gMQorI2RlZmluZSBJbml0aWFs TnVtYmVyIDAKKyNkZWZpbmUgQlVGRkVSX0xFTkdUSCBncF9maWxlX25hbWVfc2l6ZW9mCisKK3R5 cGVkZWYgc3RydWN0IG1hcF9maWxlX2VudW1fcyB7CisgICAgRklMRSAqICBzdHJlYW07ICAgICAg ICAgLyogc3RyZWFtIHRvIG1hcCBmaWxlICovCisgICAgY2hhciAqICBwYXR0ZXJuOyAgICAgICAg LyogcGF0dGVybiBwb2ludGVyICAgICovCisgICAgY2hhciAqICByb290OyAgICAgICAgICAgLyog cm9vdCBwYXRoIHBvaW50ZXIgICovCisgICAgZ3NfbWVtb3J5X3QgKiBtZW1vcnk7ICAgLyogbWVt b3J5IHN0cnVjdHVyZSB1c2VkICovCit9IG1hcF9maWxlX2VudW07CisKSW5kZXg6IHNyYy9ncF91 bmlmcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHNyYy9ncF91bmlmcy5jCSguLi4vdGFncy9nczguNTQpCShy ZXZpc2lvbiAyMikKKysrIHNyYy9ncF91bmlmcy5jCSguLi4vdHJ1bmsvZ3MpCShyZXZpc2lvbiAy MikKQEAgLTU1LDYgKzU1LDQ0IEBACiAvKiBEZWZpbmUgdGhlIG5hbWUgdGhhdCBkZXNpZ25hdGVz IHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gKi8KIGNvbnN0IGNoYXIgZ3BfY3VycmVudF9kaXJlY3Rv cnlfbmFtZVtdID0gIi4iOwogCisKKy8qIENyZWF0ZSBhIHNjcmF0Y2ggZGlyZWN0b3J5IHdpdGgg YSBnaXZlbiBuYW1lIHByZWZpeCAqLworLyogV3JpdGUgdGhlIGFjdHVhbCBkaXJlY3RvcnkgbmFt ZSBhdCBkbmFtZS4gKi8KK2NoYXIgKgorZ3BfY3JlYXRlX3NjcmF0Y2hfZGlyZWN0b3J5IChjb25z dCBjaGFyICpwcmVmaXgpCit7CisgICAgaW50IHByZWZpeF9sZW5ndGggPSBzdHJsZW4ocHJlZml4 KTsKKyAgICBpbnQgbGVuID0gZ3BfZmlsZV9uYW1lX3NpemVvZiAtIHByZWZpeF9sZW5ndGggLSA4 OworICAgIGNoYXIgZG5hbWVbZ3BfZmlsZV9uYW1lX3NpemVvZl07CisgICAgY2hhciAqcnY7CisK KyAgICBpZiAoZ3BfZmlsZV9uYW1lX2lzX2Fic29sdXRlKHByZWZpeCwgcHJlZml4X2xlbmd0aCkp CisJKmRuYW1lID0gMDsKKyAgICBlbHNlIGlmIChncF9nZXR0bXBkaXIoZG5hbWUsICZsZW4pICE9 IDApCisJc3RyY3B5KGRuYW1lLCAiL3RtcC8iKTsKKyAgICBlbHNlIHsKKwlpZiAoc3RybGVuKGRu YW1lKSAhPSAwICYmIGRuYW1lW3N0cmxlbihkbmFtZSkgLSAxXSAhPSAnLycpCisJICAgIHN0cmNh dChkbmFtZSwgIi8iKTsKKyAgICB9CisgICAgaWYgKHN0cmxlbihkbmFtZSkgKyBwcmVmaXhfbGVu Z3RoICsgOCA+PSBncF9maWxlX25hbWVfc2l6ZW9mKQorCXJldHVybiAwOwkJLyogZmlsZSBuYW1l IHRvbyBsb25nICovCisgICAgc3RyY2F0KGRuYW1lLCBwcmVmaXgpOworICAgIC8qIFByZXZlbnQg dHJhaWxpbmcgWCdzIGluIHBhdGggZnJvbSBiZWluZyBjb252ZXJ0ZWQgYnkgbWt0ZW1wLiAqLwor ICAgIGlmICgqZG5hbWUgIT0gMCAmJiBkbmFtZVtzdHJsZW4oZG5hbWUpIC0gMV0gPT0gJ1gnKQor CXN0cmNhdChkbmFtZSwgIi0iKTsKKyAgICBzdHJjYXQoZG5hbWUsICJYWFhYWFgiKTsKKworI2lm IEhBVkVfTUtEVEVNUAorICAgIHJ2ID0gbWtkdGVtcCAoZG5hbWUpOworI2Vsc2UKKyAgICAjZXJy b3IgTm8gaW1wbGVtZW50YXRpb24gd2l0aG91dCBta2R0ZW1wCisjZW5kaWYKKworICAgIHN0cmNh dChkbmFtZSwgIi8iKTsKKyAgICByZXR1cm4gcnY7CisKK30KKwogLyogQ3JlYXRlIGFuZCBvcGVu IGEgc2NyYXRjaCBmaWxlIHdpdGggYSBnaXZlbiBuYW1lIHByZWZpeC4gKi8KIC8qIFdyaXRlIHRo ZSBhY3R1YWwgZmlsZSBuYW1lIGF0IGZuYW1lLiAqLwogRklMRSAqCkluZGV4OiB0ZXN0cy9yYW0t d3JpdGUxLnBzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3RzL3JhbS13cml0ZTEucHMJKC4uLi90YWdzL2dz OC41NCkJKHJldmlzaW9uIDApCisrKyB0ZXN0cy9yYW0td3JpdGUxLnBzCSguLi4vdHJ1bmsvZ3Mp CShyZXZpc2lvbiAyMikKQEAgLTAsMCArMSw1OSBAQAorL3BkaWN0IHsgZHVwIHsgZXhjaCA9PSA9 PSB9IGZvcmFsbCB9IGRlZgorCisoJXJhbSUpIGN1cnJlbnRkZXZwYXJhbXMgcGRpY3QKKworL2hl bGxvZmlsZSAoJXJhbSVoZWxsbykgKHcpIGZpbGUgZGVmCisKK2hlbGxvZmlsZSBzdGF0dXMgeyAK KyAgaGVsbG9maWxlIChoZWxsbyB3b3JsZFxuKSB3cml0ZXN0cmluZworICBoZWxsb2ZpbGUgY2xv c2VmaWxlCit9IHsKKyAgKGVycm9yIGluIHN0YXR1cyBmb3Igd3JpdGVzdHJpbmcpIHByaW50Cisg IHBzdGFjaworICBleGl0Cit9IGlmZWxzZQorCisoJXJhbSVoZWxsbykgKCVyYW0ld29ybGQpIHJl bmFtZWZpbGUKKworL3dvcmxkICglcmFtJXdvcmxkKSAocikgZmlsZSBkZWYKKword29ybGQgc3Rh dHVzIHsKKyAgd29ybGQgMTAwIHN0cmluZyByZWFkbGluZSB7CisgICAgKHJlYWQgZnJvbSBmaWxl OikgcHJpbnQKKyAgICBwcmludCAKKyAgICAoXG4pIHByaW50CisgICAgd29ybGQgY2xvc2VmaWxl CisgIH0geworICAgIChlcnJvciBpbiByZWFkbGluZSkgcHJpbnQKKyAgfSBpZmVsc2UKK30gewor ICAoZXJyb3IgaW4gc3RhdHVzIGZvciByZWFkbGluZSkgcHJpbnQKKyAgcHN0YWNrCisgIGV4aXQK K30gaWZlbHNlCisKKworKCVyYW0laGVsbG8xKSAodykgZmlsZQorKCVyYW0laGVsbG8yKSAodykg ZmlsZQorKCVyYW0laGVsbG8zKSAodykgZmlsZQorKCVyYW0laGVsbG80KSAodykgZmlsZQorKCVy YW0laGVsbG81KSAodykgZmlsZQorKCVyYW0laGVsbG82KSAodykgZmlsZQorCisobGlzdGZpbGVz LCB3b3JsZCBwbHVzIGhlbGxvMS4uNlxuKSBwcmludAorKCVyYW0lKikgeyBwcmludCAoXG4pIHBy aW50IH0gMTAwIHN0cmluZyBmaWxlbmFtZWZvcmFsbAorCisKKworKCVyYW0ld29ybGQpIGRlbGV0 ZWZpbGUKKworKGxpc3RmaWxlcyBhZ2Fpbiwgd29ybGQgc2hvdWxkIGJlIGdvbmVcbikgcHJpbnQK KyglcmFtJSopIHsgcHJpbnQgKFxuKSBwcmludCB9IDEwMCBzdHJpbmcgZmlsZW5hbWVmb3JhbGwK KworKCVyYW0lKikgeyBkZWxldGVmaWxlIH0gMTAwIHN0cmluZyBmaWxlbmFtZWZvcmFsbAorCiso bGlzdGZpbGVzIG9uZSBsYXN0IHRpbWUsIG5vIGZpbGVzIHRvIHByaW50OlxuKSBwcmludAorKCVy YW0lKikgeyBwcmludCAoXG4pIHByaW50IH0gMTAwIHN0cmluZyBmaWxlbmFtZWZvcmFsbAorCiso ZG9uZVxuKSBwcmludAorcXVpdApJbmRleDogc3JjL2ludC5tYWsKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3Jj L2ludC5tYWsJKC4uLi90YWdzL2dzOC41NCkJKHJldmlzaW9uIDIyKQorKysgc3JjL2ludC5tYWsJ KC4uLi90cnVuay9ncykJKHJldmlzaW9uIDIyKQpAQCAtMTgxMywxMiArMTgxMywyMSBAQAogIyBv dmVyaGVhZCBvZiBhbnkgdW51c2VkICVkaXNrIHN0cnVjdHVyZXMgaXMgbWluaW1hbC4KICMgV2Ug Y291bGQgaGF2ZSBtb3JlLCBidXQgdGhlIER5bmFMYWIgZm9udCBpbnN0YWxsZXIgaGFzIHByb2Js ZW1zCiAjIHdpdGggbW9yZSB0aGFuIDcgZGlzayBkZXZpY2VzLgotZGlza25fPSQoR0xPQkopZ3Np b2Rpc2suJChPQkopCitkaXNrbl89JChHTE9CSilnc2lvZGlzay4kKE9CSikgJChHTE9CSilnc2lv bWFwLiQoT0JKKQogJChHTEQpZGlza24uZGV2IDogJChMSUJfTUFLKSAkKEVDSE9HU19YRSkgJChk aXNrbl8pCiAJJChTRVRNT0QpICQoR0xEKWRpc2tuICQoZGlza25fKQogCSQoQURETU9EKSAkKEdM RClkaXNrbiAtaW9kZXYgZGlzazAgZGlzazEgZGlzazIgZGlzazMgZGlzazQgZGlzazUgZGlzazYK IAkkKEFERE1PRCkgJChHTEQpZGlza24gLXBzIGdzX2Rpc2tuCiAKKyMgLS0tLS0tLS0tLS0tLS0t LSBTdXBwb3J0IGZvciAlcmFtIFJBTURpc2tEZXZpY2VzIC0tLS0tLS0tLS0tLS0tLS0gIworCisj IE5vdGUgdGhhdCB3ZSBnbyBhaGVhZCBhbmQgY3JlYXRlIDMgJXJhbSBkZXZpY2VzLiBUaGUgaW50 ZXJuYWwKKyMgb3ZlcmhlYWQgb2YgYW55IHVudXNlZCAlZGlzayBzdHJ1Y3R1cmVzIGlzIG1pbmlt YWwuCityYW1kaXNrbl89JChHTE9CSilnc2lvcmFtLiQoT0JKKSAkKEdMT0JKKWdzaW9tYXAuJChP QkopCiskKEdMRClyYW1kaXNrbi5kZXYgOiAkKExJQl9NQUspICQoRUNIT0dTX1hFKSAkKHJhbWRp c2tuXykKKwkkKFNFVE1PRCkgJChHTEQpcmFtZGlza24gJChyYW1kaXNrbl8pCisJJChBRERNT0Qp ICQoR0xEKXJhbWRpc2tuIC1pb2RldiByYW0gcmFtMCByYW0xCisKICMgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0gUERGID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMK IAogIyBXZSBuZWVkIG5lYXJseSBhbGwgb2YgdGhlIFBvc3RTY3JpcHQgTGFuZ3VhZ2VMZXZlbCAz IGludGVycHJldGVyIGZvciBQREYsCkluZGV4OiBzcmMvZ3AuaAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzcmMv Z3AuaAkoLi4uL3RhZ3MvZ3M4LjU0KQkocmV2aXNpb24gMjIpCisrKyBzcmMvZ3AuaAkoLi4uL3Ry dW5rL2dzKQkocmV2aXNpb24gMjIpCkBAIC0xODMsNiArMTgzLDIxIEBACiAJCQkgICBjaGFyIGZu YW1lW2dwX2ZpbGVfbmFtZV9zaXplb2ZdLAogCQkJICAgY29uc3QgY2hhciAqbW9kZSk7CiAKKy8q KgorICogZ3BfY3JlYXRlX3NjcmF0Y2hfZGlyZWN0b3J5OiBDcmVhdGUgYSBzY3JhdGNoIGRpcmVj dG9yeQorICogQHByZWZpeDogTmFtZSBwcmVmaXguCisgKgorICogQ3JlYXRlcyBhIHNjcmF0Y2gg KHRlbXBvcmFyeSkgZGlyZWN0b3J5IGluIHRoZSBmaWxlc3lzdGVtLiBUaGUgZXhhY3QKKyAqIGxv Y2F0aW9uIGFuZCBuYW1lIGlzIHBsYXRmb3JtIGRlcGVuZGVudCwgYnV0IGluIGdlbmVyYWwgdXNl cyBAcHJlZml4IAorICogYXMgYSBwcmVmaXguIElmIEBwcmVmaXggaXMgbm90IGFic29sdXRlLCB0 aGVuIGNob29zZSBhbiBhcHByb3ByaWF0ZSAKKyAqIHN5c3RlbSBkaXJlY3RvcnksIHVzdWFsbHkg YXMgZGV0ZXJtaW5lZCBmcm9tIGdwX2dldHRtcGRpcigpLCBmb2xsb3dlZCAKKyAqIGJ5IGEgcGF0 aCBhcyByZXR1cm5lZCBmcm9tIGEgc3lzdGVtIGNhbGwuCisgKgorICogUmV0dXJuIHZhbHVlOiBw b2ludGVyIHRvIHRoZSBwYXRobmFtZSBvbiBzdWNjZXNzLCAwIG9uIGVycm9yCisgKiovCitjaGFy ICpncF9jcmVhdGVfc2NyYXRjaF9kaXJlY3RvcnkgKGNvbnN0IGNoYXIgKnByZWZpeCk7CisKKwog LyogT3BlbiBhIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgYXMgYSBzdHJlYW0gb2YgdW5pbnRl cnByZXRlZCBieXRlcy4gKi8KIEZJTEUgKmdwX2ZvcGVuKGNvbnN0IGNoYXIgKmZuYW1lLCBjb25z dCBjaGFyICptb2RlKTsKIApJbmRleDogc3JjL2d4aW9kZXYuaAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzcmMv Z3hpb2Rldi5oCSguLi4vdGFncy9nczguNTQpCShyZXZpc2lvbiAyMikKKysrIHNyYy9neGlvZGV2 LmgJKC4uLi90cnVuay9ncykJKHJldmlzaW9uIDIyKQpAQCAtNzksNiArNzksMTAgQEAKICAgaW50 IHByb2MoZ3hfaW9fZGV2aWNlICppb2RldiwgZ3NfbWVtb3J5X3QgKm1lbSkKICAgICBpb2Rldl9w cm9jX2luaXQoKCppbml0KSk7CS8qIG9uZS10aW1lIGluaXRpYWxpemF0aW9uICovCiAKKyNkZWZp bmUgaW9kZXZfcHJvY19zaHV0ZG93bihwcm9jKVwKKyAgaW50IHByb2MoZ3hfaW9fZGV2aWNlICpp b2RldikKKyAgICBpb2Rldl9wcm9jX3NodXRkb3duKCgqc2h1dGRvd24pKTsgICAvKiBvbmUtdGlt ZSBzaHV0ZG93biwgYXQgcHJvZ3JhbSBlbmQgKi8KKwogI2RlZmluZSBpb2Rldl9wcm9jX29wZW5f ZGV2aWNlKHByb2MpXAogICBpbnQgcHJvYyhneF9pb19kZXZpY2UgKmlvZGV2LCBjb25zdCBjaGFy ICphY2Nlc3MsIHN0cmVhbSAqKnBzLFwKIAkgICBnc19tZW1vcnlfdCAqbWVtKQpAQCAtMTQ0LDYg KzE0OCw3IEBACiAKIC8qIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mIHByb2NlZHVyZXMgKi8K IGlvZGV2X3Byb2NfaW5pdChpb2Rldl9ub19pbml0KTsKK2lvZGV2X3Byb2Nfc2h1dGRvd24oaW9k ZXZfbm9fc2h1dGRvd24pOwogaW9kZXZfcHJvY19vcGVuX2RldmljZShpb2Rldl9ub19vcGVuX2Rl dmljZSk7CiBpb2Rldl9wcm9jX29wZW5fZmlsZShpb2Rldl9ub19vcGVuX2ZpbGUpOwogaW9kZXZf cHJvY19mb3Blbihpb2Rldl9ub19mb3Blbik7CkluZGV4OiBzcmMvZ3Npb2Rldi5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHNyYy9nc2lvZGV2LmMJKC4uLi90YWdzL2dzOC41NCkJKHJldmlzaW9uIDIyKQorKysg c3JjL2dzaW9kZXYuYwkoLi4uL3RydW5rL2dzKQkocmV2aXNpb24gMjIpCkBAIC00OSw3ICs0OSw3 IEBACiBjb25zdCBneF9pb19kZXZpY2UgZ3NfaW9kZXZfb3MgPQogewogICAgICIlb3MlIiwgIkZp bGVTeXN0ZW0iLAotICAgIHtpb2Rldl9ub19pbml0LCBpb2Rldl9ub19vcGVuX2RldmljZSwKKyAg ICB7aW9kZXZfbm9faW5pdCwgaW9kZXZfbm9fc2h1dGRvd24sIGlvZGV2X25vX29wZW5fZGV2aWNl LAogICAgICBOVUxMIC8qaW9kZXZfb3Nfb3Blbl9maWxlICovICwgaW9kZXZfb3NfZm9wZW4sIGlv ZGV2X29zX2ZjbG9zZSwKICAgICAgb3NfZGVsZXRlLCBvc19yZW5hbWUsIG9zX3N0YXR1cywKICAg ICAgb3NfZW51bWVyYXRlLCBncF9lbnVtZXJhdGVfZmlsZXNfbmV4dCwgZ3BfZW51bWVyYXRlX2Zp bGVzX2Nsb3NlLApAQCAtMTEyLDYgKzExMiwxMiBAQAogfQogCiBpbnQKK2lvZGV2X25vX3NodXRk b3duKGd4X2lvX2RldmljZSAqIGlvZGV2KQoreworICAgIHJldHVybiAwOworfQorCitpbnQKIGlv ZGV2X25vX29wZW5fZGV2aWNlKGd4X2lvX2RldmljZSAqIGlvZGV2LCBjb25zdCBjaGFyICphY2Nl c3MsIHN0cmVhbSAqKiBwcywKIAkJICAgICBnc19tZW1vcnlfdCAqIG1lbSkKIHsKSW5kZXg6IHRl c3RzL3JhbS1pbml0LnBzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3RzL3JhbS1pbml0LnBzCSguLi4vdGFn cy9nczguNTQpCShyZXZpc2lvbiAwKQorKysgdGVzdHMvcmFtLWluaXQucHMJKC4uLi90cnVuay9n cykJKHJldmlzaW9uIDIyKQpAQCAtMCwwICsxLDE4IEBACisvcGRpY3QgeyBkdXAgeyBleGNoID09 ID09IH0gZm9yYWxsIH0gZGVmCisKKyUgKCVyYW0lKSBkdXAgPT0gY3VycmVudGRldnBhcmFtcyBw ZGljdCBwb3AKKworKGluaXRpYWwgc2V0dGluZykgPT0KKyglcmFtJSkgY3VycmVudGRldnBhcmFt cyAvTG9naWNhbFNpemUgZHVwID09IGdldCA9PQorCisoJXJhbSUpIDw8IC9Jbml0aWFsaXplQWN0 aW9uIDEgPj4gc2V0ZGV2cGFyYW1zCisoYWZ0ZXIgZmlyc3QgaW5pdGlhbGl6YXRpb24pID09Ciso JXJhbSUpIGN1cnJlbnRkZXZwYXJhbXMgL0xvZ2ljYWxTaXplIGR1cCA9PSBnZXQgPT0KKworKCVy YW0lKSA8PCAvTG9naWNhbFNpemUgMjA0OCAvSW5pdGlhbGl6ZUFjdGlvbiAxID4+IHNldGRldnBh cmFtcworKGFmdGVyIHNlY29uZCBpbml0aWFsaXphdGlvbiwgc2hvdWxkIGJlIDIwNDgpID09Ciso JXJhbSUpIGN1cnJlbnRkZXZwYXJhbXMgL0xvZ2ljYWxTaXplIGR1cCA9PSBnZXQgPT0KKworKG9r YXksIGRvbmUgd2l0aCB0aGF0KSA9PQorCitxdWl0CkluZGV4OiBzcmMvemlvZGV2c2MuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBzcmMvemlvZGV2c2MuYwkoLi4uL3RhZ3MvZ3M4LjU0KQkocmV2aXNpb24gMjIp CisrKyBzcmMvemlvZGV2c2MuYwkoLi4uL3RydW5rL2dzKQkocmV2aXNpb24gMjIpCkBAIC0yOSw3 ICsyOSw3IEBACiBjb25zdCBjaGFyIGlvZGV2X2R0eXBlX3N0ZGlvW10gPSAiU3BlY2lhbCI7CiAj ZGVmaW5lIGlvZGV2X3NwZWNpYWwoZG5hbWUsIGluaXQsIG9wZW4pIHtcCiAgICAgZG5hbWUsIGlv ZGV2X2R0eXBlX3N0ZGlvLFwKLQl7IGluaXQsIG9wZW4sIGlvZGV2X25vX29wZW5fZmlsZSwgaW9k ZXZfbm9fZm9wZW4sIGlvZGV2X25vX2ZjbG9zZSxcCisJeyBpbml0LCBpb2Rldl9ub19zaHV0ZG93 biwgb3BlbiwgaW9kZXZfbm9fb3Blbl9maWxlLCBpb2Rldl9ub19mb3BlbiwgaW9kZXZfbm9fZmNs b3NlLCBcCiAJICBpb2Rldl9ub19kZWxldGVfZmlsZSwgaW9kZXZfbm9fcmVuYW1lX2ZpbGUsIGlv ZGV2X25vX2ZpbGVfc3RhdHVzLFwKIAkgIGlvZGV2X25vX2VudW1lcmF0ZV9maWxlcywgTlVMTCwg TlVMTCxcCiAJICBpb2Rldl9ub19nZXRfcGFyYW1zLCBpb2Rldl9ub19wdXRfcGFyYW1zXApJbmRl eDogc3JjL3ppb2RldnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzcmMvemlvZGV2cy5jCSguLi4vdGFncy9n czguNTQpCShyZXZpc2lvbiAyMikKKysrIHNyYy96aW9kZXZzLmMJKC4uLi90cnVuay9ncykJKHJl dmlzaW9uIDIyKQpAQCAtMjgsNyArMjgsNyBAQAogY29uc3QgY2hhciBpb2Rldl9kdHlwZV9zdGRp b1tdID0gIlNwZWNpYWwiOwogI2RlZmluZSBpb2Rldl9zcGVjaWFsKGRuYW1lLCBpbml0LCBvcGVu KSB7XAogICAgIGRuYW1lLCBpb2Rldl9kdHlwZV9zdGRpbyxcCi0JeyBpbml0LCBvcGVuLCBpb2Rl dl9ub19vcGVuX2ZpbGUsIGlvZGV2X25vX2ZvcGVuLCBpb2Rldl9ub19mY2xvc2UsXAorCXsgaW5p dCwgaW9kZXZfbm9fc2h1dGRvd24sIG9wZW4sIGlvZGV2X25vX29wZW5fZmlsZSwgaW9kZXZfbm9f Zm9wZW4sIGlvZGV2X25vX2ZjbG9zZSwgXAogCSAgaW9kZXZfbm9fZGVsZXRlX2ZpbGUsIGlvZGV2 X25vX3JlbmFtZV9maWxlLCBpb2Rldl9ub19maWxlX3N0YXR1cyxcCiAJICBpb2Rldl9ub19lbnVt ZXJhdGVfZmlsZXMsIE5VTEwsIE5VTEwsXAogCSAgaW9kZXZfbm9fZ2V0X3BhcmFtcywgaW9kZXZf bm9fcHV0X3BhcmFtc1wKSW5kZXg6IHNyYy96ZGV2Y2FsLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3JjL3pk ZXZjYWwuYwkoLi4uL3RhZ3MvZ3M4LjU0KQkocmV2aXNpb24gMjIpCisrKyBzcmMvemRldmNhbC5j CSguLi4vdHJ1bmsvZ3MpCShyZXZpc2lvbiAyMikKQEAgLTI0LDcgKzI0LDggQEAKIHByaXZhdGUg aW9kZXZfcHJvY19nZXRfcGFyYW1zKGNhbGVuZGFyX2dldF9wYXJhbXMpOwogY29uc3QgZ3hfaW9f ZGV2aWNlIGdzX2lvZGV2X2NhbGVuZGFyID0gewogICAgICIlQ2FsZW5kYXIlIiwgIlNwZWNpYWwi LAotICAgIHsgaW9kZXZfbm9faW5pdCwgaW9kZXZfbm9fb3Blbl9kZXZpY2UsIGlvZGV2X25vX29w ZW5fZmlsZSwKKyAgICB7IGlvZGV2X25vX2luaXQsIGlvZGV2X25vX3NodXRkb3duLCAKKyAgICAg IGlvZGV2X25vX29wZW5fZGV2aWNlLCBpb2Rldl9ub19vcGVuX2ZpbGUsCiAgICAgICBpb2Rldl9u b19mb3BlbiwgaW9kZXZfbm9fZmNsb3NlLAogICAgICAgaW9kZXZfbm9fZGVsZXRlX2ZpbGUsIGlv ZGV2X25vX3JlbmFtZV9maWxlLCBpb2Rldl9ub19maWxlX3N0YXR1cywKICAgICAgIGlvZGV2X25v X2VudW1lcmF0ZV9maWxlcywgTlVMTCwgTlVMTCwKSW5kZXg6IHNyYy96aW9kZXYuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBzcmMvemlvZGV2LmMJKC4uLi90YWdzL2dzOC41NCkJKHJldmlzaW9uIDIyKQorKysg c3JjL3ppb2Rldi5jCSguLi4vdHJ1bmsvZ3MpCShyZXZpc2lvbiAyMikKQEAgLTM4LDcgKzM4LDcg QEAKIC8qIERlZmluZSB0aGUgc3BlY2lhbCBkZXZpY2VzLiAqLwogI2RlZmluZSBpb2Rldl9zcGVj aWFsKGRuYW1lLCBpbml0LCBvcGVuKSB7XAogICAgIGRuYW1lLCBpb2Rldl9kdHlwZV9zdGRpbyxc Ci0JeyBpbml0LCBvcGVuLCBpb2Rldl9ub19vcGVuX2ZpbGUsIGlvZGV2X25vX2ZvcGVuLCBpb2Rl dl9ub19mY2xvc2UsXAorCXsgaW5pdCwgaW9kZXZfbm9fc2h1dGRvd24sIG9wZW4sIGlvZGV2X25v X29wZW5fZmlsZSwgaW9kZXZfbm9fZm9wZW4sIGlvZGV2X25vX2ZjbG9zZSwgXAogCSAgaW9kZXZf bm9fZGVsZXRlX2ZpbGUsIGlvZGV2X25vX3JlbmFtZV9maWxlLCBpb2Rldl9ub19maWxlX3N0YXR1 cyxcCiAJICBpb2Rldl9ub19lbnVtZXJhdGVfZmlsZXMsIE5VTEwsIE5VTEwsXAogCSAgaW9kZXZf bm9fZ2V0X3BhcmFtcywgaW9kZXZfbm9fcHV0X3BhcmFtc1wKSW5kZXg6IHNyYy9ncF9tc2hkbC5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIHNyYy9ncF9tc2hkbC5jCSguLi4vdGFncy9nczguNTQpCShyZXZpc2lv biAyMikKKysrIHNyYy9ncF9tc2hkbC5jCSguLi4vdHJ1bmsvZ3MpCShyZXZpc2lvbiAyMikKQEAg LTQxLDcgKzQxLDcgQEAKIHByaXZhdGUgaW9kZXZfcHJvY19mY2xvc2UobXN3aW5faGFuZGxlX2Zj bG9zZSk7CiBjb25zdCBneF9pb19kZXZpY2UgZ3NfaW9kZXZfaGFuZGxlID0gewogICAgICIlaGFu ZGxlJSIsICJGaWxlU3lzdGVtIiwKLSAgICB7aW9kZXZfbm9faW5pdCwgaW9kZXZfbm9fb3Blbl9k ZXZpY2UsCisgICAge2lvZGV2X25vX2luaXQsIGlvZGV2X25vX3NodXRkb3duLCBpb2Rldl9ub19v cGVuX2RldmljZSwKICAgICAgTlVMTCAvKmlvZGV2X29zX29wZW5fZmlsZSAqLyAsIG1zd2luX2hh bmRsZV9mb3BlbiwgbXN3aW5faGFuZGxlX2ZjbG9zZSwKICAgICAgaW9kZXZfbm9fZGVsZXRlX2Zp bGUsIGlvZGV2X25vX3JlbmFtZV9maWxlLCBpb2Rldl9ub19maWxlX3N0YXR1cywKICAgICAgaW9k ZXZfbm9fZW51bWVyYXRlX2ZpbGVzLCBOVUxMLCBOVUxMLApJbmRleDogc3JjL2dzaW9kZXZzLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gc3JjL2dzaW9kZXZzLmMJKC4uLi90YWdzL2dzOC41NCkJKHJldmlzaW9u IDIyKQorKysgc3JjL2dzaW9kZXZzLmMJKC4uLi90cnVuay9ncykJKHJldmlzaW9uIDIyKQpAQCAt MjIsNyArMjIsOCBAQAogY29uc3QgY2hhciBpb2Rldl9kdHlwZV9zdGRpb1tdID0gIlNwZWNpYWwi OwogI2RlZmluZSBpb2Rldl9zdGRpbyhkbmFtZSwgb3Blbikge1wKICAgICBkbmFtZSwgaW9kZXZf ZHR5cGVfc3RkaW8sXAotCXsgaW9kZXZfbm9faW5pdCwgb3BlbiwgaW9kZXZfbm9fb3Blbl9maWxl LFwKKwl7IGlvZGV2X25vX2luaXQsIGlvZGV2X25vX3NodXRkb3duLCBcCisgICAgICAgICAgb3Bl biwgaW9kZXZfbm9fb3Blbl9maWxlLAlcCiAJICBpb2Rldl9ub19mb3BlbiwgaW9kZXZfbm9fZmNs b3NlLFwKIAkgIGlvZGV2X25vX2RlbGV0ZV9maWxlLCBpb2Rldl9ub19yZW5hbWVfZmlsZSwgaW9k ZXZfbm9fZmlsZV9zdGF0dXMsXAogCSAgaW9kZXZfbm9fZW51bWVyYXRlX2ZpbGVzLCBOVUxMLCBO VUxMLFwKSW5kZXg6IHNyYy96aW9kZXZzdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNyYy96aW9kZXZzdC5j CSguLi4vdGFncy9nczguNTQpCShyZXZpc2lvbiAyMikKKysrIHNyYy96aW9kZXZzdC5jCSguLi4v dHJ1bmsvZ3MpCShyZXZpc2lvbiAyMikKQEAgLTEyNCw3ICsxMjQsOCBAQAogCiBjb25zdCBneF9p b19kZXZpY2UgZ3NfaW9kZXZfc3RhdGljID0gewogICAgICIlc3RhdGljJSIsIGlvZGV2X2R0eXBl X3N0YXRpYywKLQl7IGlvc3RhdGljX2luaXQsIGlvZGV2X25vX29wZW5fZGV2aWNlLCBpb3N0YXRp Y19vcGVuX2ZpbGUsCisgICAgICAgIHsgaW9zdGF0aWNfaW5pdCwgaW9kZXZfbm9fc2h1dGRvd24s CisgICAgICAgICAgaW9kZXZfbm9fb3Blbl9kZXZpY2UsIGlvc3RhdGljX29wZW5fZmlsZSwKIAkg IGlvZGV2X25vX2ZvcGVuLCBpb2Rldl9ub19mY2xvc2UsCiAJICBpb2Rldl9ub19kZWxldGVfZmls ZSwgaW9kZXZfbm9fcmVuYW1lX2ZpbGUsIGlvZGV2X25vX2ZpbGVfc3RhdHVzLAogCSAgaW9kZXZf bm9fZW51bWVyYXRlX2ZpbGVzLCBOVUxMLCBOVUxMLApJbmRleDogc3JjL2dkZXZwaXBlLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gc3JjL2dkZXZwaXBlLmMJKC4uLi90YWdzL2dzOC41NCkJKHJldmlzaW9uIDIy KQorKysgc3JjL2dkZXZwaXBlLmMJKC4uLi90cnVuay9ncykJKHJldmlzaW9uIDIyKQpAQCAtMjgs NyArMjgsNyBAQAogcHJpdmF0ZSBpb2Rldl9wcm9jX2ZjbG9zZShwaXBlX2ZjbG9zZSk7CiBjb25z dCBneF9pb19kZXZpY2UgZ3NfaW9kZXZfcGlwZSA9IHsKICAgICAiJXBpcGUlIiwgIlNwZWNpYWwi LAotICAgIHtpb2Rldl9ub19pbml0LCBpb2Rldl9ub19vcGVuX2RldmljZSwKKyAgICB7aW9kZXZf bm9faW5pdCwgaW9kZXZfbm9fc2h1dGRvd24sIGlvZGV2X25vX29wZW5fZGV2aWNlLAogICAgICBO VUxMIC8qaW9kZXZfb3Nfb3Blbl9maWxlICovICwgcGlwZV9mb3BlbiwgcGlwZV9mY2xvc2UsCiAg ICAgIGlvZGV2X25vX2RlbGV0ZV9maWxlLCBpb2Rldl9ub19yZW5hbWVfZmlsZSwgaW9kZXZfbm9f ZmlsZV9zdGF0dXMsCiAgICAgIGlvZGV2X25vX2VudW1lcmF0ZV9maWxlcywgTlVMTCwgTlVMTCwK SW5kZXg6IHNyYy96aW9kZXYyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3JjL3ppb2RldjIuYwkoLi4uL3Rh Z3MvZ3M4LjU0KQkocmV2aXNpb24gMjIpCisrKyBzcmMvemlvZGV2Mi5jCSguLi4vdHJ1bmsvZ3Mp CShyZXZpc2lvbiAyMikKQEAgLTMyLDcgKzMyLDcgQEAKIGNvbnN0IGd4X2lvX2RldmljZSBnc19p b2Rldl9udWxsID0gewogICAgICIlbnVsbCUiLCAiU3BlY2lhbCIsCiAgICAgewotCWlvZGV2X25v X2luaXQsIG51bGxfb3BlbiwgaW9kZXZfbm9fb3Blbl9maWxlLAorCWlvZGV2X25vX2luaXQsIGlv ZGV2X25vX3NodXRkb3duLCBudWxsX29wZW4sIGlvZGV2X25vX29wZW5fZmlsZSwKIAlpb2Rldl9v c19mb3BlbiwgaW9kZXZfb3NfZmNsb3NlLAogCWlvZGV2X25vX2RlbGV0ZV9maWxlLCBpb2Rldl9u b19yZW5hbWVfZmlsZSwgaW9kZXZfbm9fZmlsZV9zdGF0dXMsCiAJaW9kZXZfbm9fZW51bWVyYXRl X2ZpbGVzLCBOVUxMLCBOVUxMLApJbmRleDogc3JjL2NvbmZpZ3VyZS5hYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBzcmMvY29uZmlndXJlLmFjCSguLi4vdGFncy9nczguNTQpCShyZXZpc2lvbiAyMikKKysrIHNy Yy9jb25maWd1cmUuYWMJKC4uLi90cnVuay9ncykJKHJldmlzaW9uIDIyKQpAQCAtNDA0LDYgKzQw NCw5IEBACiBBQ19DSEVDS19GVU5DUyhbbWtzdGVtcF0sIFtIQVZFX01LU1RFTVA9LURIQVZFX01L U1RFTVBdKQogQUNfU1VCU1QoSEFWRV9NS1NURU1QKQogCitBQ19DSEVDS19GVU5DUyhbbWtkdGVt cF0sIFtIQVZFX01LRFRFTVA9LURIQVZFX01LRFRFTVBdKQorQUNfU1VCU1QoSEFWRV9NS0RURU1Q KQorCiBBQ19DSEVDS19GVU5DUyhbaHlwb3RdLCBbSEFWRV9IWVBPVD0tREhBVkVfSFlQT1RdKQog QUNfU1VCU1QoSEFWRV9IWVBPVCkKIApJbmRleDogc3JjL2dzLm1hawo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz cmMvZ3MubWFrCSguLi4vdGFncy9nczguNTQpCShyZXZpc2lvbiAyMikKKysrIHNyYy9ncy5tYWsJ KC4uLi90cnVuay9ncykJKHJldmlzaW9uIDIyKQpAQCAtMzY2LDcgKzM2Niw3IEBACiAKICMgRkVB VFVSRV9ERVZTX0VYVFJBIGFuZCBERVZJQ0VfREVWU19FWFRSQSBhcmUgZXhwbGljaXRseSByZXNl cnZlZAogIyB0byBiZSBzZXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgotRkVBVFVSRV9ERVZTX0VY VFJBPQorRkVBVFVSRV9ERVZTX0VYVFJBPSQoUFNEKWRpc2tuLmRldiAkKFBTRClyYW1kaXNrbi5k ZXYKIERFVklDRV9ERVZTX0VYVFJBPQogCiBERVZTX0FMTD0kKEdMR0VORElSKSQoRCkkKFBMQVRG T1JNKS5kZXZcCkluZGV4OiBzcmMvTWFrZWZpbGUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3JjL01ha2Vm aWxlLmluCSguLi4vdGFncy9nczguNTQpCShyZXZpc2lvbiAyMikKKysrIHNyYy9NYWtlZmlsZS5p bgkoLi4uL3RydW5rL2dzKQkocmV2aXNpb24gMjIpCkBAIC0xMTAsNyArMTEwLDcgQEAKICMgLURI QVZFX0hZUE9UCiAjCXVzZSB0aGUgc3lzdGVtIGh5cG90KCkgY2FsbAogCi1DQVBPUFQ9IEBIQVZF X01LU1RFTVBAIEBIQVZFX0hZUE9UQAorQ0FQT1BUPSBASEFWRV9NS1NURU1QQCBASEFWRV9NS0RU RU1QQCBASEFWRV9IWVBPVEAKIAogIyBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGFibGUg ZmlsZS4KIAo= ------=_Part_9768_1366625.1159671538533 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ gs-code-review mailing list [email protected] http://www.ghostscript.com/mailman/listinfo/gs-code-review ------=_Part_9768_1366625.1159671538533--