From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19382 invoked by alias); 5 Mar 2013 12:01:22 -0000 Received: (qmail 19326 invoked by uid 22791); 5 Mar 2013 12:01:21 -0000 X-SWARE-Spam-Status: No, hits=-4.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CP X-Spam-Check-By: sourceware.org Received: from mail-ve0-f181.google.com (HELO mail-ve0-f181.google.com) (209.85.128.181) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 05 Mar 2013 12:01:01 +0000 Received: by mail-ve0-f181.google.com with SMTP id d10so5536584vea.26 for ; Tue, 05 Mar 2013 04:01:00 -0800 (PST) X-Received: by 10.52.89.83 with SMTP id bm19mr8145026vdb.123.1362484860144; Tue, 05 Mar 2013 04:01:00 -0800 (PST) MIME-Version: 1.0 Received: by 10.58.237.1 with HTTP; Tue, 5 Mar 2013 04:00:19 -0800 (PST) From: Steven Bosscher Date: Tue, 05 Mar 2013 12:01:00 -0000 Message-ID: Subject: [patch][RFC] bitmaps as lists *or* trees To: GCC Patches Cc: Michael Matz , Richard Biener , Jeff Law Content-Type: multipart/mixed; boundary=20cf307f326419d21604d72c3aaf X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2013-03/txt/msg00170.txt.bz2 --20cf307f326419d21604d72c3aaf Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1449 Hello, A recurring problem with GCC's sparse bitmap data structure is that it performs poorly for random access patterns. Such patterns result in linked-list walks, and can trigger behavior quadratic in the number of linked-list member elements in the set. The attached patch is a first stab at an idea I've had for a while: Implement a "change of view" for bitmaps, such that a bitmap can be either a linked list, or a binary tree. I've implemented this idea with top-down splay trees because splay tree nodes do not need meta-data on (unlike e.g. color for RB-trees, rank for AVL trees, etc.) and top-down splay tree operations are very simple to implement (less than 200 lines of code). As far as I'm aware, this is the first attempt at allowing different views on bitmaps. The idea came from Andrew Macleod's tree-ssa-live implementation. The idea is to convert the bitmap to a tree view if the set represented by the bitmap is mostly used for membership testing, and not for iterations over the items (as e.g. for bitmap dataflow). A typical example of this is e.g. invalid_mode_changes, which just explodes for the test case of PR55135 at -O0. I haven't tested this patch at all, except making sure that it compiles. Just posting this for discussion, and for feedback on the idea. I know there have been many others before me who've tried different data structures for bitmaps, perhaps someone has already tried this before. Ciao! Steven --20cf307f326419d21604d72c3aaf Content-Type: text/plain; charset=US-ASCII; name="tbitmap.diff.txt" Content-Disposition: attachment; filename="tbitmap.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hdx096im0 Content-length: 68760 SW5kZXg6IGJpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJp dG1hcC5oCShyZXZpc2lvbiAxOTY0MTApCisrKyBiaXRtYXAuaAkod29ya2lu ZyBjb3B5KQpAQCAtMjAsMTYgKzIwLDIxIEBAIGFsb25nIHdpdGggR0NDOyBz ZWUgdGhlIGZpbGUgQ09QWUlORzMuCiAjaWZuZGVmIEdDQ19CSVRNQVBfSAog I2RlZmluZSBHQ0NfQklUTUFQX0gKIAotLyogSW1wbGVtZW50YXRpb24gb2Yg c3BhcnNlIGludGVnZXIgc2V0cyBhcyBhIGxpbmtlZCBsaXN0LgorLyogSW1w bGVtZW50YXRpb24gb2Ygc3BhcnNlIGludGVnZXIgc2V0cyBhcyBhIGxpbmtl ZCBsaXN0IG9yIHRyZWVzLgogCiAgICBUaGlzIHNwYXJzZSBzZXQgcmVwcmVz ZW50YXRpb24gaXMgc3VpdGFibGUgZm9yIHNwYXJzZSBzZXRzIHdpdGggYW4K LSAgIHVua25vd24gKGEgcHJpb3JpKSB1bml2ZXJzZS4gIFRoZSBzZXQgaXMg cmVwcmVzZW50ZWQgYXMgYSBkb3VibGUtbGlua2VkCi0gICBsaXN0IG9mIGNv bnRhaW5lciBub2RlcyAoc3RydWN0IGJpdG1hcF9lbGVtZW50X2RlZikuICBF YWNoIG5vZGUgY29uc2lzdHMKLSAgIG9mIGFuIGluZGV4IGZvciB0aGUgZmly c3QgbWVtYmVyIHRoYXQgY291bGQgYmUgaGVsZCBpbiB0aGUgY29udGFpbmVy LAotICAgYSBzbWFsbCBhcnJheSBvZiBpbnRlZ2VycyB0aGF0IHJlcHJlc2Vu dCB0aGUgbWVtYmVycyBpbiB0aGUgY29udGFpbmVyLAotICAgYW5kIHBvaW50 ZXJzIHRvIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBlbGVtZW50IGluIHRoZSBs aW5rZWQgbGlzdC4gIFRoZQotICAgZWxlbWVudHMgaW4gdGhlIGxpc3QgYXJl IHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIsIGkuZS4gdGhlIGhlYWQgb2YK KyAgIHVua25vd24gKGEgcHJpb3JpKSB1bml2ZXJzZS4KKyAgIAorICAgU2V0 cyBhcmUgcmVwcmVzZW50ZWQgYXMgZG91YmxlLWxpbmtlZCBsaXN0cyBvZiBj b250YWluZXIgbm9kZXMgb2YKKyAgIHR5cGUgInN0cnVjdCBiaXRtYXBfZWxl bWVudF9kZWYiIG9yIGFzIGEgYmluYXJ5IHRyZWVzIG9mIHRoZSBzYW1lCisg ICBjb250YWluZXIgbm9kZXMuICBFYWNoIGNvbnRhaW5lciBub2RlIGNvbnNp c3RzIG9mIGFuIGluZGV4IGZvciB0aGUKKyAgIGZpcnN0IG1lbWJlciB0aGF0 IGNvdWxkIGJlIGhlbGQgaW4gdGhlIGNvbnRhaW5lciwgYSBzbWFsbCBhcnJh eSBvZgorICAgaW50ZWdlcnMgdGhhdCByZXByZXNlbnQgdGhlIG1lbWJlcnMg aW4gdGhlIGNvbnRhaW5lciwgYW5kIHBvaW50ZXJzCisgICB0byB0aGUgbmV4 dCBhbmQgcHJldmlvdXMgZWxlbWVudCBpbiB0aGUgbGlua2VkIGxpc3QsIG9y IGxlZnQgYW5kCisgICByaWdodCBjaGlsZHJlbiBpbiB0aGUgdHJlZS4gIElu IGxpbmtlZC1saXN0IGZvcm0sIHRoZSBjb250YWluZXIKKyAgIG5vZGVzIGlu IHRoZSBsaXN0IGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLCBpLmUu IHRoZSBoZWFkIG9mCiAgICB0aGUgbGlzdCBob2xkcyB0aGUgZWxlbWVudCB3 aXRoIHRoZSBzbWFsbGVzdCBtZW1iZXIgb2YgdGhlIHNldC4KKyAgIEluIHRy ZWUgZm9ybSwgbm9kZXMgdG8gdGhlIGxlZnQgaGF2ZSBhIHNtYWxsZXIgY29u dGFpbmVyIGluZGV4LgogCiAgICBGb3IgYSBnaXZlbiBtZW1iZXIgSSBpbiB0 aGUgc2V0OgogICAgICAtIHRoZSBlbGVtZW50IGZvciBJIHdpbGwgaGF2ZSBp bmRleCBpcyBJIC8gKGJpdHMgcGVyIGVsZW1lbnQpCkBAIC00MiwxNyArNDcs NjcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4K ICAgIGhpZ2ggc3RvcmFnZSBvdmVyaGVhZCAqcGVyIGVsZW1lbnQqLCBidXQg YSBzbWFsbCBvdmVyYWxsIG92ZXJoZWFkIGlmCiAgICB0aGUgc2V0IGlzIHZl cnkgc3BhcnNlLgogCi0gICBUaGUgZG93bnNpZGUgaXMgdGhhdCBtYW55IG9w ZXJhdGlvbnMgYXJlIHJlbGF0aXZlbHkgc2xvdyBiZWNhdXNlIHRoZQotICAg bGlua2VkIGxpc3QgaGFzIHRvIGJlIHRyYXZlcnNlZCB0byB0ZXN0IG1lbWJl cnNoaXAgKGkuZS4gbWVtYmVyX3AvCi0gICBhZGRfbWVtYmVyL3JlbW92ZV9t ZW1iZXIpLiAgVG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhpcyBz ZXQKLSAgIHJlcHJlc2VudGF0aW9uLCB0aGUgbGFzdCBhY2Nlc3NlZCBlbGVt ZW50IGFuZCBpdHMgaW5kZXggYXJlIGNhY2hlZC4KLSAgIEZvciBtZW1iZXJz aGlwIHRlc3RzIG9uIG1lbWJlcnMgY2xvc2UgdG8gcmVjZW50bHkgYWNjZXNz ZWQgbWVtYmVycywKLSAgIHRoZSBjYWNoZWQgbGFzdCBlbGVtZW50IGltcHJv dmVzIG1lbWJlcnNoaXAgdGVzdCB0byBhIGNvbnN0YW50LXRpbWUKLSAgIG9w ZXJhdGlvbi4KKyAgIFRoZSBzdG9yYWdlIHJlcXVpcmVtZW50cyBmb3IgbGlu a2VkLWxpc3Qgc3BhcnNlIHNldHMgYXJlIE8oRSksIHdpdGggRS0+TgorICAg aW4gdGhlIHdvcnN0IGNhc2UgKGEgc3BhcnNlIHNldCB3aXRoIGxhcmdlIGRp c3RhbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMKKyAgIG9mIHRoZSBzZXQgbWVt YmVycykuCisKKyAgIFRoaXMgcmVwcmVzZW50YXRpb24gYWxzbyB3b3JrcyB3 ZWxsIGZvciBkYXRhIGZsb3cgcHJvYmxlbXMgd2hlcmUgdGhlIHNpemUKKyAg IG9mIHRoZSBzZXQgbWF5IGdyb3cgZHluYW1pY2FsbHksIGJ1dCBjYXJlIG11 c3QgYmUgdGFrZW4gdGhhdCB0aGUgbWVtYmVyX3AsCisgICBhZGRfbWVtYmVy LCBhbmQgcmVtb3ZlX21lbWJlciBvcGVyYXRpb25zIG9jY3VyIHdpdGggYSBz dWl0YWJsZSBhY2Nlc3MKKyAgIHBhdHRlcm4uCisKKyAgIFRoZSBsaW5rZWQt bGlzdCBzZXQgcmVwcmVzZW50YXRpb24gd29ya3Mgd2VsbCBmb3IgcHJvYmxl bXMgaW52b2x2aW5nIHZlcnkKKyAgIHNwYXJzZSBzZXRzLiAgVGhlIGNhbm9u aWNhbCBleGFtcGxlIGluIEdDQyBpcywgb2YgY291cnNlLCB0aGUgInNldCBv ZgorICAgc2V0cyIgZm9yIHNvbWUgQ0ZHLWJhc2VkIGRhdGEgZmxvdyBwcm9i bGVtcyAobGl2ZW5lc3MgYW5hbHlzaXMsIGRvbWluYW5jZQorICAgZnJvbnRp ZXJzLCBldGMuKS4KKyAgIAorICAgRm9yIHJhbmRvbS1hY2Nlc3Mgc3BhcnNl IHNldHMgb2YgdW5rbm93biB1bml2ZXJzZSwgdGhlIGJpbmFyeSB0cmVlCisg ICByZXByZXNlbnRhdGlvbiBpcyBsaWtlbHkgdG8gYmUgYSBtb3JlIHN1aXRh YmxlIGNob2ljZS4gIFRoZW9yZXRpY2FsCisgICBhY2Nlc3MgdGltZXMgZm9y IHRoZSBiaW5hcnkgdHJlZSByZXByZXNlbnRhdGlvbiBhcmUgYmV0dGVyIHRo YW4gdGhvc2UKKyAgIGZvciB0aGUgbGlua2VkLWxpc3QsIGJ1dCBpbiBwcmFj dGljZSB0aGlzIGlzIG9ubHkgdHJ1ZSBmb3IgdHJ1ZWx5CisgICByYW5kb20g YWNjZXNzLgorCisgICBPZnRlbiB0aGUgbW9zdCBzdWl0YWJsZSByZXByZXNl bnRhdGlvbiBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoZSBzZXQKKyAgIGlz IG5vdCB0aGUgYmVzdCBjaG9pY2UgZm9yIHRoZSB1c2FnZSBvZiB0aGUgc2V0 LiAgRm9yIHN1Y2ggY2FzZXMsIHRoZQorICAgInZpZXciIG9mIHRoZSBzZXQg Y2FuIGJlIGNoYW5nZWQgZnJvbSBvbmUgcmVwcmVzZW50YXRpb24gdG8gdGhl IG90aGVyLgorICAgVGhpcyBpcyBhbiBPKEUpIG9wZXJhdGlvbi4KKworICAg VE9ETzogRG9jdW1lbnQgYml0bWFwIHZpZXcgY2hhbmdlcyEgLS0gU1RFVkVO CisKKyAgIFRyYXZlcnNpbmcgbGlua2VkIGxpc3RzIG9yIHRyZWVzIGNhbiBi ZSBjYWNoZS11bmZyaWVuZGx5LiAgUGVyZm9ybWFuY2UKKyAgIGNhbiBiZSBp bXByb3ZlZCBieSBrZWVwaW5nIGNvbnRhaW5lciBub2RlcyBpbiB0aGUgc2V0 IGdyb3VwZWQgdG9nZXRoZXIKKyAgIGluICBtZW1vcnksIHVzaW5nIGEgZGVk aWNhdGVkIG9ic3RhY2sgZm9yIGEgc2V0IChvciBncm91cCBvZiByZWxhdGVk CisgICBzZXRzKS4gIEVsZW1lbnRzIGFsbG9jYXRlZCBvbiBvYnN0YWNrcyBh cmUgcmVsZWFzZWQgdG8gYSBmcmVlLWxpc3QgYW5kCisgICB0YWtlbiBvZmYg dGhlIGZyZWUgbGlzdC4gIElmIG11bHRpcGxlIHNldHMgYXJlIGFsbG9jYXRl ZCBvbiB0aGUgc2FtZQorICAgb2JzdGFjaywgZWxlbWVudHMgZnJlZWQgZnJv bSBvbmUgc2V0IG1heSBiZSByZS11c2VkIGZvciBvbmUgb2YgdGhlIG90aGVy CisgICBzZXRzLiAgVGhpcyB1c3VhbGx5IGhlbHBzIGF2b2lkIGNhY2hlIG1p c3Nlcy4KKworICAgQSBzaW5nbGUgZnJlZS1saXN0IGlzIHVzZWQgZm9yIGFs bCBzZXRzIGFsbG9jYXRlZCBpbiBHR0Mgc3BhY2UuICBUaGlzIGlzCisgICBi YWQgZm9yIHBlcnNpc3RlbnQgc2V0cywgc28gcGVyc2lzdGVudCBzZXRzIHNo b3VsZCBiZSBhbGxvY2F0ZWQgb24gYW4KKyAgIG9ic3RhY2sgd2hlbmV2ZXIg cG9zc2libGUuCisKKyAgIEZvciByYW5kb20tYWNjZXNzIHNldHMgd2l0aCBh IGtub3duLCByZWxhdGl2ZWx5IHNtYWxsIHVuaXZlcnNlIHNpemUsIHRoZQor ICAgU3BhcnNlU2V0IG9yIHNpbXBsZSBiaXRtYXAgcmVwcmVzZW50YXRpb25z IG1heSBiZSBtb3JlIGVmZmljaWVudCB0aGFuIGEKKyAgIGxpbmtlZC1saXN0 IHNldC4KKworCisgICBMSU5LRUQgTElTVCBGT1JNCisgICA9PT09PT09PT09 PT09PT09CisKKyAgIEluIGxpbmtlZC1saXN0IGZvcm0sIGluLW9yZGVyIGl0 ZXJhdGlvbnMgb2YgdGhlIHNldCBjYW4gYmUgZXhlY3V0ZWQKKyAgIGVmZmlj aWVudGx5LiAgVGhlIGRvd25zaWRlIGlzIHRoYXQgbWFueSByYW5kb20tYWNj ZXNzIG9wZXJhdGlvbnMgYXJlCisgICByZWxhdGl2ZWx5IHNsb3csIGJlY2F1 c2UgdGhlIGxpbmtlZCBsaXN0IGhhcyB0byBiZSB0cmF2ZXJzZWQgdG8gdGVz dAorICAgbWVtYmVyc2hpcCAoaS5lLiBtZW1iZXJfcC8gYWRkX21lbWJlci9y ZW1vdmVfbWVtYmVyKS4KKyAgIAorICAgVG8gaW1wcm92ZSB0aGUgcGVyZm9y bWFuY2Ugb2YgdGhpcyBzZXQgcmVwcmVzZW50YXRpb24sIHRoZSBsYXN0Cisg ICBhY2Nlc3NlZCBlbGVtZW50IGFuZCBpdHMgaW5kZXggYXJlIGNhY2hlZC4g IEZvciBtZW1iZXJzaGlwIHRlc3RzIG9uCisgICBtZW1iZXJzIGNsb3NlIHRv IHJlY2VudGx5IGFjY2Vzc2VkIG1lbWJlcnMsIHRoZSBjYWNoZWQgbGFzdCBl bGVtZW50CisgICBpbXByb3ZlcyBtZW1iZXJzaGlwIHRlc3QgdG8gYSBjb25z dGFudC10aW1lIG9wZXJhdGlvbi4KIAogICAgVGhlIGZvbGxvd2luZyBvcGVy YXRpb25zIGNhbiBhbHdheXMgYmUgcGVyZm9ybWVkIGluIE8oMSkgdGltZToK IAogICAgICAqIGNsZWFyCQkJOiBiaXRtYXBfY2xlYXIKKyAgICAgKiBzbWFs bGVzdF9tZW1iZXIJCTogYml0bWFwX2ZpcnN0X3NldF9iaXQKICAgICAgKiBj aG9vc2Vfb25lCQk6IChub3QgaW1wbGVtZW50ZWQsIGJ1dCBjb3VsZCBiZQog CQkJCSAgIGltcGxlbWVudGVkIGluIGNvbnN0YW50IHRpbWUpCiAKQEAgLTYx LDE1ICsxMTYsMTYgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBD T1BZSU5HMy4KICAgIHN1aXRhYmxlIGFjY2VzcyBwYXR0ZXJuczoKIAogICAg ICAqIG1lbWJlcl9wCQkJOiBiaXRtYXBfYml0X3AKLSAgICAgKiBhZGRfbWVt YmVyCQk6IGJpdG1hcF9zZXRfYml0Ci0gICAgICogcmVtb3ZlX21lbWJlcgkJ OiBiaXRtYXBfY2xlYXJfYml0CisgICAgICogYWRkX21lbWJlcgkJOiBiaXRt YXBfc2V0X2JpdCAvIGJpdG1hcF9zZXRfcmFuZ2UKKyAgICAgKiByZW1vdmVf bWVtYmVyCQk6IGJpdG1hcF9jbGVhcl9iaXQgLyBiaXRtYXBfY2xlYXJfcmFu Z2UKIAogICAgVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGNhbiBiZSBwZXJm b3JtZWQgaW4gTyhFKSB0aW1lOgogCiAgICAgICogY2FyZGluYWxpdHkJCTog Yml0bWFwX2NvdW50X2JpdHMKLSAgICAgKiBzZXRfc2l6ZQkJCTogYml0bWFw X2xhc3Rfc2V0X2JpdCAoYnV0IHRoaXMgY291bGQKKyAgICAgKiBsYXJnZXN0 X21lbWJlcgkJOiBiaXRtYXBfbGFzdF9zZXRfYml0IChidXQgdGhpcyBjb3Vs ZAogCQkJCSAgaW4gY29uc3RhbnQgdGltZSB3aXRoIGEgcG9pbnRlciB0bwog CQkJCSAgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgY2hhaW4pCisgICAgICog c2V0X3NpemUJCQk6IGJpdG1hcF9sYXN0X3NldF9iaXQKIAogICAgQWRkaXRp b25hbGx5LCB0aGUgbGlua2VkLWxpc3Qgc3BhcnNlIHNldCByZXByZXNlbnRh dGlvbiBzdXBwb3J0cwogICAgZW51bWVyYXRpb24gb2YgdGhlIG1lbWJlcnMg aW4gTyhFKSB0aW1lOgpAQCAtOTMsMzkgKzE0OSw1MyBAQCBhbG9uZyB3aXRo IEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgogICAgICAqIEEgfCAoQiAm IH5DKQkJOiBiaXRtYXBfaW9yX2FuZF9jb21wbCAvCiAJCQkJICBiaXRtYXBf aW9yX2FuZF9jb21wbF9pbnRvCiAKLSAgIFRoZSBzdG9yYWdlIHJlcXVpcmVt ZW50cyBmb3IgbGlua2VkLWxpc3Qgc3BhcnNlIHNldHMgYXJlIE8oRSksIHdp dGggRS0+TgotICAgaW4gdGhlIHdvcnN0IGNhc2UgKGEgc3BhcnNlIHNldCB3 aXRoIGxhcmdlIGRpc3RhbmNlcyBiZXR3ZWVuIHRoZSB2YWx1ZXMKLSAgIG9m IHRoZSBzZXQgbWVtYmVycykuCiAKLSAgIFRoZSBsaW5rZWQtbGlzdCBzZXQg cmVwcmVzZW50YXRpb24gd29ya3Mgd2VsbCBmb3IgcHJvYmxlbXMgaW52b2x2 aW5nIHZlcnkKLSAgIHNwYXJzZSBzZXRzLiAgVGhlIGNhbm9uaWNhbCBleGFt cGxlIGluIEdDQyBpcywgb2YgY291cnNlLCB0aGUgInNldCBvZgotICAgc2V0 cyIgZm9yIHNvbWUgQ0ZHLWJhc2VkIGRhdGEgZmxvdyBwcm9ibGVtcyAobGl2 ZW5lc3MgYW5hbHlzaXMsIGRvbWluYW5jZQotICAgZnJvbnRpZXJzLCBldGMu KS4KLSAgIAotICAgVGhpcyByZXByZXNlbnRhdGlvbiBhbHNvIHdvcmtzIHdl bGwgZm9yIGRhdGEgZmxvdyBwcm9ibGVtcyB3aGVyZSB0aGUgc2l6ZQotICAg b2YgdGhlIHNldCBtYXkgZ3JvdyBkeW5hbWljYWxseSwgYnV0IGNhcmUgbXVz dCBiZSB0YWtlbiB0aGF0IHRoZSBtZW1iZXJfcCwKLSAgIGFkZF9tZW1iZXIs IGFuZCByZW1vdmVfbWVtYmVyIG9wZXJhdGlvbnMgb2NjdXIgd2l0aCBhIHN1 aXRhYmxlIGFjY2VzcwotICAgcGF0dGVybi4KKyAgIEJJTkFSWSBUUkVFIEZP Uk0KKyAgID09PT09PT09PT09PT09PT0KKyAgIEFuIGFsdGVybmF0ZSAidmll dyIgb2YgYSBiaXRtYXAgaXMgaXRzIGJpbmFyeSB0cmVlIHJlcHJlc2VudGF0 aW9uLgorICAgRm9yIHRoaXMgcmVwcmVzZW50YXRpb24sIHNwbGF5IHRyZWVz IGFyZSB1c2VkIGJlY2F1c2UgdGhleSBjYW4gYmUKKyAgIGltcGxlbWVudGVk IHVzaW5nIHRoZSBzYW1lIGRhdGEgc3RydWN0dXJlcyBhcyB0aGUgbGlua2Vk IGxpc3QsIHdpdGgKKyAgIG5vIG92ZXJoZWFkIGZvciBtZXRhLWRhdGEgKGxp a2UgY29sb3IsIG9yIHJhbmspIG9uIHRoZSB0cmVlIG5vZGVzLgorCisgICBJ biBiaW5hcnkgdHJlZSBmb3JtLCByYW5kb20tYWNjZXNzIHRvIHRoZSBzZXQg aXMgbXVjaCBtb3JlIGVmZmljaWVudAorICAgdGhhbiBmb3IgdGhlIGxpbmtl ZC1saXN0IHJlcHJlc2VudGF0aW9uLiAgRG93bnNpZGVzIGFyZSB0aGUgaGln aCBjb3N0CisgICBvZiBjbGVhcmluZyB0aGUgc2V0LCBhbmQgdGhlIHJlbGF0 aXZlbHkgbGFyZ2UgbnVtYmVyIG9mIG9wZXJhdGlvbnMKKyAgIG5lY2Vzc2Fy eSB0byBiYWxhbmNlIHRoZSB0cmVlLiAgQWxzbywgaXRlcmF0aW5nIHRoZSBz ZXQgbWVtYmVycyBpcworICAgbm90IHN1cHBvcnRlZC4KICAgIAotICAgRm9y IHJhbmRvbS1hY2Nlc3Mgc2V0cyB3aXRoIGEga25vd24sIHJlbGF0aXZlbHkg c21hbGwgdW5pdmVyc2Ugc2l6ZSwgdGhlCi0gICBTcGFyc2VTZXQgb3Igc2lt cGxlIGJpdG1hcCByZXByZXNlbnRhdGlvbnMgbWF5IGJlIG1vcmUgZWZmaWNp ZW50IHRoYW4gYQotICAgbGlua2VkLWxpc3Qgc2V0LiAgRm9yIHJhbmRvbS1h Y2Nlc3Mgc2V0cyBvZiB1bmtub3duIHVuaXZlcnNlLCBhIGhhc2ggdGFibGUK LSAgIG9yIGEgYmFsYW5jZWQgYmluYXJ5IHRyZWUgcmVwcmVzZW50YXRpb24g aXMgbGlrZWx5IHRvIGJlIGEgbW9yZSBzdWl0YWJsZQotICAgY2hvaWNlLgor ICAgQXMgZm9yIHRoZSBsaW5rZWQtbGlzdCByZXByZXNlbnRhdGlvbiwgdGhl IGxhc3QgYWNjZXNzZWQgZWxlbWVudCBhbmQKKyAgIGl0cyBpbmRleCBhcmUg Y2FjaGVkLCBzbyB0aGF0IG1lbWJlcnNoaXAgdGVzdHMgb24gdGhlIGxhdGVz dCBhY2Nlc3NlZAorICAgbWVtYmVycyBpcyBhIGNvbnN0YW50LXRpbWUgb3Bl cmF0aW9uLiAgT3RoZXIgbG9va3VwcyB0YWtlIE8obG9nRSkKKyAgIHRpbWUg YW1vcnRpemVkIChidXQgTyhFKSB0aW1lIHdvcnN0LWNhc2UpLgogCi0gICBU cmF2ZXJzaW5nIGxpbmtlZCBsaXN0cyBpcyB1c3VhbGx5IGNhY2hlLXVuZnJp ZW5kbHksIGV2ZW4gd2l0aCB0aGUgbGFzdAotICAgYWNjZXNzZWQgZWxlbWVu dCBjYWNoZWQuCi0gICAKLSAgIENhY2hlIHBlcmZvcm1hbmNlIGNhbiBiZSBp bXByb3ZlZCBieSBrZWVwaW5nIHRoZSBlbGVtZW50cyBpbiB0aGUgc2V0Ci0g ICBncm91cGVkIHRvZ2V0aGVyIGluIG1lbW9yeSwgdXNpbmcgYSBkZWRpY2F0 ZWQgb2JzdGFjayBmb3IgYSBzZXQgKG9yIGdyb3VwCi0gICBvZiByZWxhdGVk IHNldHMpLiAgRWxlbWVudHMgYWxsb2NhdGVkIG9uIG9ic3RhY2tzIGFyZSBy ZWxlYXNlZCB0byBhCi0gICBmcmVlLWxpc3QgYW5kIHRha2VuIG9mZiB0aGUg ZnJlZSBsaXN0LiAgSWYgbXVsdGlwbGUgc2V0cyBhcmUgYWxsb2NhdGVkIG9u Ci0gICB0aGUgc2FtZSBvYnN0YWNrLCBlbGVtZW50cyBmcmVlZCBmcm9tIG9u ZSBzZXQgbWF5IGJlIHJlLXVzZWQgZm9yIG9uZSBvZgotICAgdGhlIG90aGVy IHNldHMuICBUaGlzIHVzdWFsbHkgaGVscHMgYXZvaWQgY2FjaGUgbWlzc2Vz LgorICAgVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGNhbiBhbHdheXMgYmUg cGVyZm9ybWVkIGluIE8oMSkgdGltZToKIAotICAgQSBzaW5nbGUgZnJlZS1s aXN0IGlzIHVzZWQgZm9yIGFsbCBzZXRzIGFsbG9jYXRlZCBpbiBHR0Mgc3Bh Y2UuICBUaGlzIGlzCi0gICBiYWQgZm9yIHBlcnNpc3RlbnQgc2V0cywgc28g cGVyc2lzdGVudCBzZXRzIHNob3VsZCBiZSBhbGxvY2F0ZWQgb24gYW4KLSAg IG9ic3RhY2sgd2hlbmV2ZXIgcG9zc2libGUuICAqLworICAgICAqIGNob29z ZV9vbmUJCTogKG5vdCBpbXBsZW1lbnRlZCwgYnV0IGNvdWxkIGJlCisJCQkJ ICAgaW1wbGVtZW50ZWQgaW4gY29uc3RhbnQgdGltZSkKKworICAgVGhlIGZv bGxvd2luZyBvcGVyYXRpb25zIGNhbiBiZSBwZXJmb3JtZWQgaW4gTyhsb2dF KSB0aW1lIGFtb3J0aXplZAorICAgYnV0IE8oRSkgdGltZSB3b3JzdC1jYXNl LCBidXQgaW4gTygxKSB0aW1lIGlmIHRoZSBzYW1lIGVsZW1lbnQgaXMKKyAg IGFjY2Vzc2VkLgorCisgICAgICogbWVtYmVyX3AJCQk6IGJpdG1hcF9iaXRf cAorICAgICAqIGFkZF9tZW1iZXIJCTogYml0bWFwX3NldF9iaXQKKyAgICAg KiByZW1vdmVfbWVtYmVyCQk6IGJpdG1hcF9jbGVhcl9iaXQKKworICAgVGhl IGZvbGxvd2luZyBvcGVyYXRpb25zIGNhbiBiZSBwZXJmb3JtZWQgaW4gTyhs b2dFKSB0aW1lIGFtb3J0aXplZAorICAgYnV0IE8oRSkgdGltZSB3b3JzdC1j YXNlOgorCisgICAgICogc21hbGxlc3RfbWVtYmVyCQk6IGJpdG1hcF9maXJz dF9zZXRfYml0CisgICAgICogbGFyZ2VzdF9tZW1iZXIJCTogYml0bWFwX2xh c3Rfc2V0X2JpdAorICAgICAqIHNldF9zaXplCQkJOiBiaXRtYXBfbGFzdF9z ZXRfYml0CisKKyAgIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBjYW4gYmUg cGVyZm9ybWVkIGluIE8oRSkgdGltZToKKworICAgICAqIGNsZWFyCQkJOiBi aXRtYXBfY2xlYXIKKworICAgVGhlIGJpbmFyeSB0cmVlIHNwYXJzZSBzZXQg cmVwcmVzZW50YXRpb24gZG9lcyAqbm90KiBzdXBwb3J0IGFueSBmb3JtCisg ICBvZiBlbnVtZXJhdGlvbiwgYW5kIGRvZXMgYWxzbyAqbm90KiBzdXBwb3J0 IGxvZ2ljYWwgb3BlcmF0aW9ucyBvbiBzZXRzLgorICAgVGhlIGJpbmFyeSB0 cmVlIHJlcHJlc2VudGF0aW9uIGlzIG9ubHkgc3VwcG9zZWQgdG8gYmUgdXNl ZCBmb3Igc2V0cworICAgb24gd2hpY2ggbWFueSByYW5kb20tYWNjZXNzIG1l bWJlcnNoaXAgdGVzdHMgd2lsbCBoYXBwZW4uICAqLwogCiAjaW5jbHVkZSAi aGFzaHRhYi5oIgogI2luY2x1ZGUgInN0YXRpc3RpY3MuaCIKQEAgLTE2OCwy NCArMjM4LDQ2IEBAIHR5cGVkZWYgc3RydWN0IEdUWSAoKCkpIGJpdG1hcF9v YnN0YWNrIHsKICAgIGxpbmVhciBpbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz IHRvIGJlIGZyZWVkLiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgR1RZKChjaGFp bl9uZXh0ICgiJWgubmV4dCIpLCBjaGFpbl9wcmV2ICgiJWgucHJldiIpKSkg Yml0bWFwX2VsZW1lbnRfZGVmIHsKLSAgc3RydWN0IGJpdG1hcF9lbGVtZW50 X2RlZiAqbmV4dDsJLyogTmV4dCBlbGVtZW50LiAgKi8KLSAgc3RydWN0IGJp dG1hcF9lbGVtZW50X2RlZiAqcHJldjsJLyogUHJldmlvdXMgZWxlbWVudC4g ICovCi0gIHVuc2lnbmVkIGludCBpbmR4OwkJCS8qIHJlZ25vL0JJVE1BUF9F TEVNRU5UX0FMTF9CSVRTLiAgKi8KLSAgQklUTUFQX1dPUkQgYml0c1tCSVRN QVBfRUxFTUVOVF9XT1JEU107IC8qIEJpdHMgdGhhdCBhcmUgc2V0LiAgKi8K KyAgLyogSW4gbGlzdCBmb3JtLCB0aGUgbmV4dCBlbGVtZW50IGluIHRoZSBs aW5rZWQgbGlzdDsKKyAgICAgaW4gdHJlZSBmb3JtLCB0aGUgbGVmdCBjaGls ZCBub2RlIGluIHRoZSB0cmVlLiAgKi8KKyAgc3RydWN0IGJpdG1hcF9lbGVt ZW50X2RlZiAqbmV4dDsKKworICAvKiBJbiBsaXN0IGZvcm0sIHRoZSBwcmV2 aW91cyBlbGVtZW50IGluIHRoZSBsaW5rZWQgbGlzdDsKKyAgICAgaW4gdHJl ZSBmb3JtLCB0aGUgcmlnaHQgY2hpbGQgbm9kZSBpbiB0aGUgdHJlZS4gICov CisgIHN0cnVjdCBiaXRtYXBfZWxlbWVudF9kZWYgKnByZXY7CisKKyAgLyog cmVnbm8vQklUTUFQX0VMRU1FTlRfQUxMX0JJVFMuICAqLworICB1bnNpZ25l ZCBpbnQgaW5keDsKKworICAvKiBCaXRzIHRoYXQgYXJlIHNldCwgY291bnRp bmcgZnJvbSBJTkRYLCBpbmNsdXNpdmUuICAqLworICBCSVRNQVBfV09SRCBi aXRzW0JJVE1BUF9FTEVNRU5UX1dPUkRTXTsKIH0gYml0bWFwX2VsZW1lbnQ7 CiAKIC8qIEhlYWQgb2YgYml0bWFwIGxpbmtlZCBsaXN0LiAgVGhlICdjdXJy ZW50JyBtZW1iZXIgcG9pbnRzIHRvIHNvbWV0aGluZwogICAgYWxyZWFkeSBw b2ludGVkIHRvIGJ5IHRoZSBjaGFpbiBzdGFydGVkIGJ5IGZpcnN0LCBzbyBH VFkoKHNraXApKSBpdC4gICovCiAKIHR5cGVkZWYgc3RydWN0IEdUWSgoKSkg Yml0bWFwX2hlYWRfZGVmIHsKLSAgdW5zaWduZWQgaW50IGluZHg7CQkJLyog SW5kZXggb2YgbGFzdCBlbGVtZW50IGxvb2tlZCBhdC4gICovCi0gIHVuc2ln bmVkIGludCBkZXNjcmlwdG9yX2lkOwkJLyogVW5pcXVlIGlkZW50aWZpZXIg Zm9yIHRoZSBhbGxvY2F0aW9uCi0JCQkJCSAgIHNpdGUgb2YgdGhpcyBiaXRt YXAsIGZvciBkZXRhaWxlZAotCQkJCQkgICBzdGF0aXN0aWNzIGdhdGhlcmlu Zy4gICovCi0gIGJpdG1hcF9lbGVtZW50ICpmaXJzdDsJCS8qIEZpcnN0IGVs ZW1lbnQgaW4gbGlua2VkIGxpc3QuICAqLwotICBiaXRtYXBfZWxlbWVudCAq IEdUWSgoc2tpcCgiIikpKSBjdXJyZW50OyAvKiBMYXN0IGVsZW1lbnQgbG9v a2VkIGF0LiAgKi8KLSAgYml0bWFwX29ic3RhY2sgKm9ic3RhY2s7CQkvKiBP YnN0YWNrIHRvIGFsbG9jYXRlIGVsZW1lbnRzIGZyb20uCi0JCQkJCSAgIElm IE5VTEwsIHRoZW4gdXNlIEdHQyBhbGxvY2F0aW9uLiAgKi8KKyAgLyogSW5k ZXggb2YgbGFzdCBlbGVtZW50IGxvb2tlZCBhdC4gICovCisgIHVuc2lnbmVk IGludCBpbmR4OworCisgIC8qIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUg YWxsb2NhdGlvbiBzaXRlIG9mIHRoaXMgYml0bWFwLAorICAgICBmb3IgZGV0 YWlsZWQgc3RhdGlzdGljcyBnYXRoZXJpbmcuICAqLworICB1bnNpZ25lZCBp bnQgZGVzY3JpcHRvcl9pZCA6IDMxOworCisgIC8qIDAgaWYgdGhlIGJpdG1h cCBpcyBpbiBsaXN0IGZvcm07IDEgaWYgdGhlIGJpdG1hcCBpcyBpbiB0cmVl IGZvcm0uCisgICAgIEJpdG1hcCBpdGVyYXRvcnMgb25seSB3b3JrIG9uIGJp dG1hcHMgaW4gbGlzdCBmb3JtLiAgKi8KKyAgdW5zaWduZWQgaW50IHRyZWVf Zm9ybSA6IDE7CisKKyAgLyogSW4gbGlzdCBmb3JtLCB0aGUgZmlyc3QgZWxl bWVudCBpbiB0aGUgbGlua2VkIGxpc3Q7CisgICAgIGluIHRyZWUgZm9ybSwg VGhlIHJvb3Qgb2YgdGhlIHRyZWUuICAgKi8KKyAgYml0bWFwX2VsZW1lbnQg KmZpcnN0OworCisgIC8qIExhc3QgZWxlbWVudCBsb29rZWQgYXQuICAqLwor ICBiaXRtYXBfZWxlbWVudCAqIEdUWSgoc2tpcCgiIikpKSBjdXJyZW50Owor CisgIC8qIE9ic3RhY2sgdG8gYWxsb2NhdGUgZWxlbWVudHMgZnJvbS4KKyAg ICAgSWYgTlVMTCwgdGhlbiB1c2UgR0dDIGFsbG9jYXRpb24uICAqLworICBi aXRtYXBfb2JzdGFjayAqb2JzdGFjazsKIH0gYml0bWFwX2hlYWQ7CiAKIC8q IEdsb2JhbCBkYXRhICovCkBAIC0yNTIsMTUgKzM0NCwxNSBAQCBleHRlcm4g Ym9vbCBiaXRtYXBfY2xlYXJfYml0IChiaXRtYXAsIGluCiAvKiBTZXQgYSBz aW5nbGUgYml0IGluIGEgYml0bWFwLiAgUmV0dXJuIHRydWUgaWYgdGhlIGJp dCBjaGFuZ2VkLiAgKi8KIGV4dGVybiBib29sIGJpdG1hcF9zZXRfYml0IChi aXRtYXAsIGludCk7CiAKLS8qIFJldHVybiB0cnVlIGlmIGEgcmVnaXN0ZXIg aXMgc2V0IGluIGEgcmVnaXN0ZXIgc2V0LiAgKi8KKy8qIFJldHVybiB0cnVl IGlmIGEgYml0IGlzIHNldCBpbiBhIGJpdG1hcC4gICovCiBleHRlcm4gaW50 IGJpdG1hcF9iaXRfcCAoYml0bWFwLCBpbnQpOwogCi0vKiBEZWJ1ZyBmdW5j dGlvbnMgdG8gcHJpbnQgYSBiaXRtYXAgbGlua2VkIGxpc3QuICAqLwotZXh0 ZXJuIHZvaWQgZGVidWdfYml0bWFwIChjb25zdF9iaXRtYXApOwotZXh0ZXJu IHZvaWQgZGVidWdfYml0bWFwX2ZpbGUgKEZJTEUgKiwgY29uc3RfYml0bWFw KTsKKy8qIERlYnVnIGZ1bmN0aW9ucyB0byBwcmludCBhIGJpdG1hcC4gICov CitleHRlcm4gdm9pZCBkZWJ1Z19iaXRtYXAgKGJpdG1hcCk7CitleHRlcm4g dm9pZCBkZWJ1Z19iaXRtYXBfZmlsZSAoRklMRSAqLCBiaXRtYXApOwogCiAv KiBQcmludCBhIGJpdG1hcC4gICovCi1leHRlcm4gdm9pZCBiaXRtYXBfcHJp bnQgKEZJTEUgKiwgY29uc3RfYml0bWFwLCBjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKik7CitleHRlcm4gdm9pZCBiaXRtYXBfcHJpbnQgKEZJTEUgKiwg Yml0bWFwLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiAKIC8qIElu aXRpYWxpemUgYW5kIHJlbGVhc2UgYSBiaXRtYXAgb2JzdGFjay4gICovCiBl eHRlcm4gdm9pZCBiaXRtYXBfb2JzdGFja19pbml0aWFsaXplIChiaXRtYXBf b2JzdGFjayAqKTsKQEAgLTI3NSw2ICszNjcsNyBAQCBzdGF0aWMgaW5saW5l IHZvaWQKIGJpdG1hcF9pbml0aWFsaXplX3N0YXQgKGJpdG1hcCBoZWFkLCBi aXRtYXBfb2JzdGFjayAqb2JzdGFjayBNRU1fU1RBVF9ERUNMKQogewogICBo ZWFkLT5maXJzdCA9IGhlYWQtPmN1cnJlbnQgPSBOVUxMOworICBoZWFkLT5p bmR4ID0gaGVhZC0+dHJlZV9mb3JtID0gMDsKICAgaGVhZC0+b2JzdGFjayA9 IG9ic3RhY2s7CiAgIGlmIChHQVRIRVJfU1RBVElTVElDUykKICAgICBiaXRt YXBfcmVnaXN0ZXIgKGhlYWQgUEFTU19NRU1fU1RBVCk7CkBAIC0yODksNyAr MzgyLDcgQEAgZXh0ZXJuIGJpdG1hcCBiaXRtYXBfZ2NfYWxsb2Nfc3RhdCAo QUxPTgogZXh0ZXJuIHZvaWQgYml0bWFwX29ic3RhY2tfZnJlZSAoYml0bWFw KTsKIAogLyogQSBmZXcgY29tcGF0aWJpbGl0eS9mdW5jdGlvbnMgbWFjcm9z IGZvciBjb21wYXRpYmlsaXR5IHdpdGggc2JpdG1hcHMgKi8KLWlubGluZSB2 b2lkIGR1bXBfYml0bWFwIChGSUxFICpmaWxlLCBjb25zdF9iaXRtYXAgbWFw KQoraW5saW5lIHZvaWQgZHVtcF9iaXRtYXAgKEZJTEUgKmZpbGUsIGJpdG1h cCBtYXApCiB7CiAgIGJpdG1hcF9wcmludCAoZmlsZSwgbWFwLCAiIiwgIlxu Iik7CiB9CkBAIC0zMTAsNyArNDAzLDkgQEAgZXh0ZXJuIGhhc2h2YWxfdCBi aXRtYXBfaGFzaChjb25zdF9iaXRtYQogI2RlZmluZSBCSVRNQVBfRlJFRShC SVRNQVApIFwKICAgICAgICAoKHZvaWQpIChiaXRtYXBfb2JzdGFja19mcmVl ICgoYml0bWFwKSBCSVRNQVApLCAoQklUTUFQKSA9IChiaXRtYXApIE5VTEwp KQogCi0vKiBJdGVyYXRvciBmb3IgYml0bWFwcy4gICovCisvKiBJdGVyYXRv ciBmb3IgYml0bWFwcy4KKyAgIFRPRE86IFRoZXNlIGl0ZXJhdG9ycyBvbmx5 IHdvcmsgb24gYml0bWFwcyBpbiBsaXN0IGZvcm0uCisgICAgICAgICBIYXZp bmcgdGhlbSB3b3JraW5nIGZvciB0cmVlIGJpdG1hcHMgYWxzbyB3b3VsZCBi ZSBuaWNlLiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTMzOSw2ICs0 MzQsOCBAQCBibXBfaXRlcl9zZXRfaW5pdCAoYml0bWFwX2l0ZXJhdG9yICpi aSwKICAgYmktPmVsdDEgPSBtYXAtPmZpcnN0OwogICBiaS0+ZWx0MiA9IE5V TEw7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIW1hcC0+dHJlZV9mb3Jt KTsKKwogICAvKiBBZHZhbmNlIGVsdDEgdW50aWwgaXQgaXMgbm90IGJlZm9y ZSB0aGUgYmxvY2sgY29udGFpbmluZyBzdGFydF9iaXQuICAqLwogICB3aGls ZSAoMSkKICAgICB7CkBAIC0zODEsNiArNDc4LDggQEAgYm1wX2l0ZXJfYW5k X2luaXQgKGJpdG1hcF9pdGVyYXRvciAqYmksCiAgIGJpLT5lbHQxID0gbWFw MS0+Zmlyc3Q7CiAgIGJpLT5lbHQyID0gbWFwMi0+Zmlyc3Q7CiAKKyAgZ2Nj X2NoZWNraW5nX2Fzc2VydCAoIW1hcDEtPnRyZWVfZm9ybSAmJiAhbWFwMi0+ dHJlZV9mb3JtKTsKKwogICAvKiBBZHZhbmNlIGVsdDEgdW50aWwgaXQgaXMg bm90IGJlZm9yZSB0aGUgYmxvY2sgY29udGFpbmluZwogICAgICBzdGFydF9i aXQuICAqLwogICB3aGlsZSAoMSkKQEAgLTQzOSw4ICs1MzgsNyBAQCBibXBf aXRlcl9hbmRfaW5pdCAoYml0bWFwX2l0ZXJhdG9yICpiaSwKICAgKmJpdF9u byA9IHN0YXJ0X2JpdDsKIH0KIAotLyogSW5pdGlhbGl6ZSBhbiBpdGVyYXRv ciB0byBpdGVyYXRlIG92ZXIgdGhlIGJpdHMgaW4gTUFQMSAmIH5NQVAyLgot ICAgKi8KKy8qIEluaXRpYWxpemUgYW4gaXRlcmF0b3IgdG8gaXRlcmF0ZSBv dmVyIHRoZSBiaXRzIGluIE1BUDEgJiB+TUFQMi4gICovCiAKIHN0YXRpYyBp bmxpbmUgdm9pZAogYm1wX2l0ZXJfYW5kX2NvbXBsX2luaXQgKGJpdG1hcF9p dGVyYXRvciAqYmksCkBAIC00NTAsNiArNTQ4LDggQEAgYm1wX2l0ZXJfYW5k X2NvbXBsX2luaXQgKGJpdG1hcF9pdGVyYXRvcgogICBiaS0+ZWx0MSA9IG1h cDEtPmZpcnN0OwogICBiaS0+ZWx0MiA9IG1hcDItPmZpcnN0OwogCisgIGdj Y19jaGVja2luZ19hc3NlcnQgKCFtYXAxLT50cmVlX2Zvcm0gJiYgIW1hcDIt PnRyZWVfZm9ybSk7CisKICAgLyogQWR2YW5jZSBlbHQxIHVudGlsIGl0IGlz IG5vdCBiZWZvcmUgdGhlIGJsb2NrIGNvbnRhaW5pbmcgc3RhcnRfYml0LiAg Ki8KICAgd2hpbGUgKDEpCiAgICAgewpJbmRleDogYml0bWFwLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gYml0bWFwLmMJKHJldmlzaW9uIDE5NjQx MCkKKysrIGJpdG1hcC5jCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4 IEBAIHN0cnVjdCBiaXRtYXBfZGVzY3JpcHRvcl9kCiB0eXBlZGVmIHN0cnVj dCBiaXRtYXBfZGVzY3JpcHRvcl9kICpiaXRtYXBfZGVzY3JpcHRvcjsKIHR5 cGVkZWYgY29uc3Qgc3RydWN0IGJpdG1hcF9kZXNjcmlwdG9yX2QgKmNvbnN0 X2JpdG1hcF9kZXNjcmlwdG9yOwogCitzdGF0aWMgYml0bWFwX2VsZW1lbnQg KmJpdG1hcF90cmVlX2xpc3RpZnlfZnJvbSAoYml0bWFwLCBiaXRtYXBfZWxl bWVudCAqKTsKKwogLyogTmV4dCBhdmFpbGFibGUgdW5pcXVlIGlkIG51bWJl ciBmb3IgYml0bWFwIGRlc2NpcHRvcnMuICAqLwogc3RhdGljIGludCBuZXh0 X2JpdG1hcF9kZXNjX2lkID0gMDsKIApAQCAtOTUsNiArOTcsMTEgQEAgZ2V0 X2JpdG1hcF9kZXNjcmlwdG9yIChjb25zdCBjaGFyICpmaWxlLAogICBpZiAo KnNsb3QpCiAgICAgcmV0dXJuICpzbG90OwogCisgIC8qIFRoZSBkZXNjcmlw dG9yIElEIGNhbiBiZSBhdCBtb3N0IDMxIGJpdHMgbG9uZywgYmVjYXVzZSB0 aGUgbW9zdAorICAgICBzaWduaWZpY2FudCBvZiB0aGUgKGhhbGYpd29yZCBp cyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RlIG9mCisgICAgIHRoZSBiaXRt YXAsIGkuZS4gd2hldGhlciBpdHMgY3VycmVudCBmb3JtIGlzIGxpc3Qgb3Ig dHJlZS4gICovCisgIGdjY19hc3NlcnQgKG5leHRfYml0bWFwX2Rlc2NfaWQg PCAoMSA8PCAzMCkgLSAxKTsgLy8gVE9ETzogbWFrZSBkZXNjcmlwdG9yIElE IHVuc2lnbmVkCisKICAgKnNsb3QgPSBYQ05FVyAoc3RydWN0IGJpdG1hcF9k ZXNjcmlwdG9yX2QpOwogICBiaXRtYXBfZGVzY3JpcHRvcnMuc2FmZV9wdXNo ICgqc2xvdCk7CiAgICgqc2xvdCktPmlkID0gbmV4dF9iaXRtYXBfZGVzY19p ZCsrOwpAQCAtMTMzLDIyICsxNDAsMTggQEAgc3RhdGljIGludCBiaXRtYXBf ZGVmYXVsdF9vYnN0YWNrX2RlcHRoOwogc3RhdGljIEdUWSgoZGVsZXRhYmxl KSkgYml0bWFwX2VsZW1lbnQgKmJpdG1hcF9nZ2NfZnJlZTsgLyogRnJlZWxp c3Qgb2YKIAkJCQkJCQkgICAgR0MnZCBlbGVtZW50cy4gICovCiAKLXN0YXRp YyB2b2lkIGJpdG1hcF9lbGVtX3RvX2ZyZWVsaXN0IChiaXRtYXAsIGJpdG1h cF9lbGVtZW50ICopOwotc3RhdGljIHZvaWQgYml0bWFwX2VsZW1lbnRfZnJl ZSAoYml0bWFwLCBiaXRtYXBfZWxlbWVudCAqKTsKLXN0YXRpYyBiaXRtYXBf ZWxlbWVudCAqYml0bWFwX2VsZW1lbnRfYWxsb2NhdGUgKGJpdG1hcCk7Ci1z dGF0aWMgaW50IGJpdG1hcF9lbGVtZW50X3plcm9wIChjb25zdCBiaXRtYXBf ZWxlbWVudCAqKTsKLXN0YXRpYyB2b2lkIGJpdG1hcF9lbGVtZW50X2xpbmsg KGJpdG1hcCwgYml0bWFwX2VsZW1lbnQgKik7Ci1zdGF0aWMgYml0bWFwX2Vs ZW1lbnQgKmJpdG1hcF9lbHRfaW5zZXJ0X2FmdGVyIChiaXRtYXAsIGJpdG1h cF9lbGVtZW50ICosIHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgdm9pZCBiaXRt YXBfZWx0X2NsZWFyX2Zyb20gKGJpdG1hcCwgYml0bWFwX2VsZW1lbnQgKik7 Ci1zdGF0aWMgYml0bWFwX2VsZW1lbnQgKmJpdG1hcF9maW5kX2JpdCAoYml0 bWFwLCB1bnNpZ25lZCBpbnQpOwogDAorLyogQml0bWFwIG1lbW9yeSBtYW5h Z2VtZW50LiAgKi8KIAotLyogQWRkIEVMRU0gdG8gdGhlIGFwcHJvcHJpYXRl IGZyZWVsaXN0LiAgKi8KKy8qIEFkZCBFTFQgdG8gdGhlIGFwcHJvcHJpYXRl IGZyZWVsaXN0LiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogYml0bWFwX2Vs ZW1fdG9fZnJlZWxpc3QgKGJpdG1hcCBoZWFkLCBiaXRtYXBfZWxlbWVudCAq ZWx0KQogewogICBiaXRtYXBfb2JzdGFjayAqYml0X29ic3RhY2sgPSBoZWFk LT5vYnN0YWNrOwogCisgIGlmIChHQVRIRVJfU1RBVElTVElDUykKKyAgICBy ZWdpc3Rlcl9vdmVyaGVhZCAoaGVhZCwgLSgoaW50KXNpemVvZiAoYml0bWFw X2VsZW1lbnQpKSk7CisKICAgZWx0LT5uZXh0ID0gTlVMTDsKICAgaWYgKGJp dF9vYnN0YWNrKQogICAgIHsKQEAgLTE2Miw0MSArMTY1LDYgQEAgYml0bWFw X2VsZW1fdG9fZnJlZWxpc3QgKGJpdG1hcCBoZWFkLCBiaQogICAgIH0KIH0K IAotLyogRnJlZSBhIGJpdG1hcCBlbGVtZW50LiAgU2luY2UgdGhlc2UgYXJl IGFsbG9jYXRlZCBvZmYgdGhlCi0gICBiaXRtYXBfb2JzdGFjaywgImZyZWUi IGFjdHVhbGx5IG1lYW5zICJwdXQgb250byB0aGUgZnJlZWxpc3QiLiAgKi8K LQotc3RhdGljIGlubGluZSB2b2lkCi1iaXRtYXBfZWxlbWVudF9mcmVlIChi aXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmVsdCkKLXsKLSAgYml0bWFw X2VsZW1lbnQgKm5leHQgPSBlbHQtPm5leHQ7Ci0gIGJpdG1hcF9lbGVtZW50 ICpwcmV2ID0gZWx0LT5wcmV2OwotCi0gIGlmIChwcmV2KQotICAgIHByZXYt Pm5leHQgPSBuZXh0OwotCi0gIGlmIChuZXh0KQotICAgIG5leHQtPnByZXYg PSBwcmV2OwotCi0gIGlmIChoZWFkLT5maXJzdCA9PSBlbHQpCi0gICAgaGVh ZC0+Zmlyc3QgPSBuZXh0OwotCi0gIC8qIFNpbmNlIHRoZSBmaXJzdCB0aGlu ZyB3ZSB0cnkgaXMgdG8gaW5zZXJ0IGJlZm9yZSBjdXJyZW50LAotICAgICBt YWtlIGN1cnJlbnQgdGhlIG5leHQgZW50cnkgaW4gcHJlZmVyZW5jZSB0byB0 aGUgcHJldmlvdXMuICAqLwotICBpZiAoaGVhZC0+Y3VycmVudCA9PSBlbHQp Ci0gICAgewotICAgICAgaGVhZC0+Y3VycmVudCA9IG5leHQgIT0gMCA/IG5l eHQgOiBwcmV2OwotICAgICAgaWYgKGhlYWQtPmN1cnJlbnQpCi0JaGVhZC0+ aW5keCA9IGhlYWQtPmN1cnJlbnQtPmluZHg7Ci0gICAgICBlbHNlCi0JaGVh ZC0+aW5keCA9IDA7Ci0gICAgfQotCi0gIGlmIChHQVRIRVJfU1RBVElTVElD UykKLSAgICByZWdpc3Rlcl9vdmVyaGVhZCAoaGVhZCwgLSgoaW50KXNpemVv ZiAoYml0bWFwX2VsZW1lbnQpKSk7Ci0KLSAgYml0bWFwX2VsZW1fdG9fZnJl ZWxpc3QgKGhlYWQsIGVsdCk7Ci19Ci0MCiAvKiBBbGxvY2F0ZSBhIGJpdG1h cCBlbGVtZW50LiAgVGhlIGJpdHMgYXJlIGNsZWFyZWQsIGJ1dCBub3RoaW5n IGVsc2UgaXMuICAqLwogCiBzdGF0aWMgaW5saW5lIGJpdG1hcF9lbGVtZW50 ICoKQEAgLTI0OSw3ICsyMTcsOCBAQCBiaXRtYXBfZWxlbWVudF9hbGxvY2F0 ZSAoYml0bWFwIGhlYWQpCiAgIHJldHVybiBlbGVtZW50OwogfQogCi0vKiBS ZW1vdmUgRUxUIGFuZCBhbGwgZm9sbG93aW5nIGVsZW1lbnRzIGZyb20gYml0 bWFwIEhFQUQuICAqLworLyogUmVtb3ZlIEVMVCBhbmQgYWxsIGZvbGxvd2lu ZyBlbGVtZW50cyBmcm9tIGJpdG1hcCBIRUFELgorICAgUHV0IHRoZSByZWxl YXNlZCBlbGVtZW50cyBpbiB0aGUgZnJlZWxpc3QgZm9yIEhFQUQuICAqLwog CiB2b2lkCiBiaXRtYXBfZWx0X2NsZWFyX2Zyb20gKGJpdG1hcCBoZWFkLCBi aXRtYXBfZWxlbWVudCAqZWx0KQpAQCAtMjU3LDcgKzIyNiwxMSBAQCBiaXRt YXBfZWx0X2NsZWFyX2Zyb20gKGJpdG1hcCBoZWFkLCBiaXRtCiAgIGJpdG1h cF9lbGVtZW50ICpwcmV2OwogICBiaXRtYXBfb2JzdGFjayAqYml0X29ic3Rh Y2sgPSBoZWFkLT5vYnN0YWNrOwogCi0gIGlmICghZWx0KSByZXR1cm47Cisg IGlmICghZWx0KQorICAgIHJldHVybjsKKworICBpZiAoaGVhZC0+dHJlZV9m b3JtKQorICAgIGVsdCA9IGJpdG1hcF90cmVlX2xpc3RpZnlfZnJvbSAoaGVh ZCwgZWx0KTsKIAogICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCiAgICAgewpA QCAtMjg0LDcgKzI1Nyw3IEBAIGJpdG1hcF9lbHRfY2xlYXJfZnJvbSAoYml0 bWFwIGhlYWQsIGJpdG0KICAgICAgIGhlYWQtPmluZHggPSAwOwogICAgIH0K IAotICAvKiBQdXQgdGhlIGVudGlyZSBsaXN0IG9udG8gdGhlIGZyZWUgbGlz dCBpbiBvbmUgb3BlcmF0aW9uLiAqLworICAvKiBQdXQgdGhlIGVudGlyZSBs aXN0IG9udG8gdGhlIGZyZWVsaXN0IGluIG9uZSBvcGVyYXRpb24uICovCiAg IGlmIChiaXRfb2JzdGFjaykKICAgICB7CiAgICAgICBlbHQtPnByZXYgPSBi aXRfb2JzdGFjay0+ZWxlbWVudHM7CkBAIC0yOTYsMTIgKzI2OSw0NTMgQEAg Yml0bWFwX2VsdF9jbGVhcl9mcm9tIChiaXRtYXAgaGVhZCwgYml0bQogICAg ICAgYml0bWFwX2dnY19mcmVlID0gZWx0OwogICAgIH0KIH0KKwwKKy8qIExp bmtlZC1saXN0IHZpZXcgb2YgYml0bWFwcy4KKworICAgSW4gdGhpcyByZXBy ZXNlbnRhdGlvbiwgdGhlIGJpdG1hcCBlbGVtZW50cyBmb3JtIGEgZG91Ymxl LWxpbmtlZCBsaXN0CisgICB3aXRoIGVsZW1lbnRzIHNvcnRlZCBieSBpbmNy ZWFzaW5nIGluZGV4LiAgKi8KKworLyogTGluayB0aGUgYml0bWFwIGVsZW1l bnQgaW50byB0aGUgY3VycmVudCBiaXRtYXAgbGlua2VkIGxpc3QuICAqLwor CitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdG1hcF9saXN0X2xpbmtfZWxlbWVu dCAoYml0bWFwIGhlYWQsIGJpdG1hcF9lbGVtZW50ICplbGVtZW50KQorewor ICB1bnNpZ25lZCBpbnQgaW5keCA9IGVsZW1lbnQtPmluZHg7CisgIGJpdG1h cF9lbGVtZW50ICpwdHI7CisKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWhl YWQtPnRyZWVfZm9ybSk7CisKKyAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3Qg YW5kIG9ubHkgZWxlbWVudCwgc2V0IGl0IGluLiAgKi8KKyAgaWYgKGhlYWQt PmZpcnN0ID09IDApCisgICAgeworICAgICAgZWxlbWVudC0+bmV4dCA9IGVs ZW1lbnQtPnByZXYgPSAwOworICAgICAgaGVhZC0+Zmlyc3QgPSBlbGVtZW50 OworICAgIH0KKworICAvKiBJZiB0aGlzIGluZGV4IGlzIGxlc3MgdGhhbiB0 aGF0IG9mIHRoZSBjdXJyZW50IGVsZW1lbnQsIGl0IGdvZXMgc29tZXBsYWNl CisgICAgIGJlZm9yZSB0aGUgY3VycmVudCBlbGVtZW50LiAgKi8KKyAgZWxz ZSBpZiAoaW5keCA8IGhlYWQtPmluZHgpCisgICAgeworICAgICAgZm9yIChw dHIgPSBoZWFkLT5jdXJyZW50OworCSAgIHB0ci0+cHJldiAhPSAwICYmIHB0 ci0+cHJldi0+aW5keCA+IGluZHg7CisJICAgcHRyID0gcHRyLT5wcmV2KQor CTsKKworICAgICAgaWYgKHB0ci0+cHJldikKKwlwdHItPnByZXYtPm5leHQg PSBlbGVtZW50OworICAgICAgZWxzZQorCWhlYWQtPmZpcnN0ID0gZWxlbWVu dDsKKworICAgICAgZWxlbWVudC0+cHJldiA9IHB0ci0+cHJldjsKKyAgICAg IGVsZW1lbnQtPm5leHQgPSBwdHI7CisgICAgICBwdHItPnByZXYgPSBlbGVt ZW50OworICAgIH0KKworICAvKiBPdGhlcndpc2UsIGl0IG11c3QgZ28gc29t ZXBsYWNlIGFmdGVyIHRoZSBjdXJyZW50IGVsZW1lbnQuICAqLworICBlbHNl CisgICAgeworICAgICAgZm9yIChwdHIgPSBoZWFkLT5jdXJyZW50OworCSAg IHB0ci0+bmV4dCAhPSAwICYmIHB0ci0+bmV4dC0+aW5keCA8IGluZHg7CisJ ICAgcHRyID0gcHRyLT5uZXh0KQorCTsKKworICAgICAgaWYgKHB0ci0+bmV4 dCkKKwlwdHItPm5leHQtPnByZXYgPSBlbGVtZW50OworCisgICAgICBlbGVt ZW50LT5uZXh0ID0gcHRyLT5uZXh0OworICAgICAgZWxlbWVudC0+cHJldiA9 IHB0cjsKKyAgICAgIHB0ci0+bmV4dCA9IGVsZW1lbnQ7CisgICAgfQorCisg IC8qIFNldCB1cCBzbyB0aGlzIGlzIHRoZSBmaXJzdCBlbGVtZW50IHNlYXJj aGVkLiAgKi8KKyAgaGVhZC0+Y3VycmVudCA9IGVsZW1lbnQ7CisgIGhlYWQt PmluZHggPSBpbmR4OworfQorCisvKiBVbmxpbmsgdGhlIGJpdG1hcCBlbGVt ZW50IGZyb20gdGhlIGN1cnJlbnQgYml0bWFwIGxpbmtlZCBsaXN0LAorICAg YW5kIHJldHVybiBpdCB0byB0aGUgZnJlZWxpc3QuICAqLworCitzdGF0aWMg aW5saW5lIHZvaWQKK2JpdG1hcF9saXN0X3VubGlua19lbGVtZW50IChiaXRt YXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmVsZW1lbnQpCit7CisgIGJpdG1h cF9lbGVtZW50ICpuZXh0ID0gZWxlbWVudC0+bmV4dDsKKyAgYml0bWFwX2Vs ZW1lbnQgKnByZXYgPSBlbGVtZW50LT5wcmV2OworCisgIGdjY19jaGVja2lu Z19hc3NlcnQgKCFoZWFkLT50cmVlX2Zvcm0pOworCisgIGlmIChwcmV2KQor ICAgIHByZXYtPm5leHQgPSBuZXh0OworCisgIGlmIChuZXh0KQorICAgIG5l eHQtPnByZXYgPSBwcmV2OworCisgIGlmIChoZWFkLT5maXJzdCA9PSBlbGVt ZW50KQorICAgIGhlYWQtPmZpcnN0ID0gbmV4dDsKKworICAvKiBTaW5jZSB0 aGUgZmlyc3QgdGhpbmcgd2UgdHJ5IGlzIHRvIGluc2VydCBiZWZvcmUgY3Vy cmVudCwKKyAgICAgbWFrZSBjdXJyZW50IHRoZSBuZXh0IGVudHJ5IGluIHBy ZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzLiAgKi8KKyAgaWYgKGhlYWQtPmN1 cnJlbnQgPT0gZWxlbWVudCkKKyAgICB7CisgICAgICBoZWFkLT5jdXJyZW50 ID0gbmV4dCAhPSAwID8gbmV4dCA6IHByZXY7CisgICAgICBpZiAoaGVhZC0+ Y3VycmVudCkKKwloZWFkLT5pbmR4ID0gaGVhZC0+Y3VycmVudC0+aW5keDsK KyAgICAgIGVsc2UKKwloZWFkLT5pbmR4ID0gMDsKKyAgICB9CisKKyAgYml0 bWFwX2VsZW1fdG9fZnJlZWxpc3QgKGhlYWQsIGVsZW1lbnQpOworfQorCisv KiBJbnNlcnQgYSBuZXcgdW5pbml0aWFsaXplZCBlbGVtZW50IGludG8gYml0 bWFwIEhFQUQgYWZ0ZXIgZWxlbWVudAorICAgRUxULiAgSWYgRUxUIGlzIE5V TEwsIGluc2VydCB0aGUgZWxlbWVudCBhdCB0aGUgc3RhcnQuICBSZXR1cm4g dGhlCisgICBuZXcgZWxlbWVudC4gICovCisKK3N0YXRpYyBiaXRtYXBfZWxl bWVudCAqCitiaXRtYXBfbGlzdF9pbnNlcnRfZWxlbWVudF9hZnRlciAoYml0 bWFwIGhlYWQsCisJCQkJICBiaXRtYXBfZWxlbWVudCAqZWx0LCB1bnNpZ25l ZCBpbnQgaW5keCkKK3sKKyAgYml0bWFwX2VsZW1lbnQgKm5vZGUgPSBiaXRt YXBfZWxlbWVudF9hbGxvY2F0ZSAoaGVhZCk7CisgIG5vZGUtPmluZHggPSBp bmR4OworCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFoZWFkLT50cmVlX2Zv cm0pOworCisgIGlmICghZWx0KQorICAgIHsKKyAgICAgIGlmICghaGVhZC0+ Y3VycmVudCkKKwl7CisJICBoZWFkLT5jdXJyZW50ID0gbm9kZTsKKwkgIGhl YWQtPmluZHggPSBpbmR4OworCX0KKyAgICAgIG5vZGUtPm5leHQgPSBoZWFk LT5maXJzdDsKKyAgICAgIGlmIChub2RlLT5uZXh0KQorCW5vZGUtPm5leHQt PnByZXYgPSBub2RlOworICAgICAgaGVhZC0+Zmlyc3QgPSBub2RlOworICAg ICAgbm9kZS0+cHJldiA9IE5VTEw7CisgICAgfQorICBlbHNlCisgICAgewor ICAgICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoaGVhZC0+Y3VycmVudCk7Cisg ICAgICBub2RlLT5uZXh0ID0gZWx0LT5uZXh0OworICAgICAgaWYgKG5vZGUt Pm5leHQpCisJbm9kZS0+bmV4dC0+cHJldiA9IG5vZGU7CisgICAgICBlbHQt Pm5leHQgPSBub2RlOworICAgICAgbm9kZS0+cHJldiA9IGVsdDsKKyAgICB9 CisgIHJldHVybiBub2RlOworfQorCisvKiBSZXR1cm4gdGhlIGVsZW1lbnQg Zm9yIElORFgsIG9yIE5VTEwgaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBleGlz dC4gICovCisKK3N0YXRpYyBpbmxpbmUgYml0bWFwX2VsZW1lbnQgKgorYml0 bWFwX2xpc3RfZmluZF9lbGVtZW50IChiaXRtYXAgaGVhZCwgdW5zaWduZWQg aW50IGluZHgpCit7CisgIGJpdG1hcF9lbGVtZW50ICplbGVtZW50OworICBp ZiAoaGVhZC0+aW5keCA8IGluZHgpCisgICAgLyogSU5EWCBpcyBiZXlvbmQg aGVhZC0+aW5keC4gIFNlYXJjaCBmcm9tIGhlYWQtPmN1cnJlbnQKKyAgICAg ICBmb3J3YXJkLiAgKi8KKyAgICBmb3IgKGVsZW1lbnQgPSBoZWFkLT5jdXJy ZW50OworCSBlbGVtZW50LT5uZXh0ICE9IDAgJiYgZWxlbWVudC0+aW5keCA8 IGluZHg7CisJIGVsZW1lbnQgPSBlbGVtZW50LT5uZXh0KQorICAgICAgewor CWlmIChHQVRIRVJfU1RBVElTVElDUykKKwkgIGJpdG1hcF9kZXNjcmlwdG9y c1toZWFkLT5kZXNjcmlwdG9yX2lkXS0+c2VhcmNoX2l0ZXIrKzsKKyAgICAg IH0KKworICBlbHNlIGlmIChoZWFkLT5pbmR4IC8gMiA8IGluZHgpCisgICAg LyogSU5EWCBpcyBsZXNzIHRoYW4gaGVhZC0+aW5keCBhbmQgY2xvc2VyIHRv IGhlYWQtPmluZHggdGhhbiB0bworICAgICAgIDAuICBTZWFyY2ggZnJvbSBo ZWFkLT5jdXJyZW50IGJhY2t3YXJkLiAgKi8KKyAgICBmb3IgKGVsZW1lbnQg PSBoZWFkLT5jdXJyZW50OworCSBlbGVtZW50LT5wcmV2ICE9IDAgJiYgZWxl bWVudC0+aW5keCA+IGluZHg7CisJIGVsZW1lbnQgPSBlbGVtZW50LT5wcmV2 KQorICAgICAgeworCWlmIChHQVRIRVJfU1RBVElTVElDUykKKwkgIGJpdG1h cF9kZXNjcmlwdG9yc1toZWFkLT5kZXNjcmlwdG9yX2lkXS0+c2VhcmNoX2l0 ZXIrKzsKKyAgICAgIH0KKworICBlbHNlCisgICAgLyogSU5EWCBpcyBsZXNz IHRoYW4gaGVhZC0+aW5keCBhbmQgY2xvc2VyIHRvIDAgdGhhbiB0bworICAg ICAgIGhlYWQtPmluZHguICBTZWFyY2ggZnJvbSBoZWFkLT5maXJzdCBmb3J3 YXJkLiAgKi8KKyAgICBmb3IgKGVsZW1lbnQgPSBoZWFkLT5maXJzdDsKKwkg ZWxlbWVudC0+bmV4dCAhPSAwICYmIGVsZW1lbnQtPmluZHggPCBpbmR4Owor CSBlbGVtZW50ID0gZWxlbWVudC0+bmV4dCkKKyAgICAgIGlmIChHQVRIRVJf U1RBVElTVElDUykKKwl7CisJICBiaXRtYXBfZGVzY3JpcHRvcnNbaGVhZC0+ ZGVzY3JpcHRvcl9pZF0tPnNlYXJjaF9pdGVyKys7CisJfQorCisgIC8qIGBl bGVtZW50JyBpcyB0aGUgbmVhcmVzdCB0byB0aGUgb25lIHdlIHdhbnQuICBJ ZiBpdCdzIG5vdCB0aGUgb25lIHdlCisgICAgIHdhbnQsIHRoZSBvbmUgd2Ug d2FudCBkb2Vzbid0IGV4aXN0LiAgKi8KKyAgaGVhZC0+Y3VycmVudCA9IGVs ZW1lbnQ7CisgIGhlYWQtPmluZHggPSBlbGVtZW50LT5pbmR4OworICBpZiAo ZWxlbWVudCAhPSAwICYmIGVsZW1lbnQtPmluZHggIT0gaW5keCkKKyAgICBl bGVtZW50ID0gMDsKKyAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKKwwKKy8qIFNw bGF5LXRyZWUgdmlldyBvZiBiaXRtYXBzLgorCisgICBUaGlzIGlzIGFuIGFs bW9zdCBvbmUtdG8tb25lIHRoZSBpbXBsZW1lbnRhdGluIG9mIHRoZSBzaW1w bGUgdG9wLWRvd24KKyAgIHNwbGF5IHRyZWUgaW4gU2xlYXRvciBhbmQgVGFy amFuJ3MgIlNlbGYtYWRqdXN0aW5nIEJpbmFyeSBTZWFyY2ggVHJlZXMiLgor ICAgSXQgaXMgcHJvYmFibHkgbm90IHRoZSBtb3N0IGVmZmljaWVudCBmb3Jt IG9mIHNwbGF5IHRyZWVzLCBidXQgaXQgc2hvdWxkCisgICBiZSBnb29kIGVu b3VnaCB0byBleHBlcmltZW50IHdpdGggdGhpcyBpZGVhIG9mIGJpdG1hcHMt YXMtdHJlZXMuCisgICAKKyAgIEZvciBhbGwgZnVuY3Rpb25zIGJlbG93LCB0 aGUgdmFyaWFibGUgb3IgZnVuY3Rpb24gYXJndW1lbnQgInQiIGlzIGEgbm9k ZQorICAgaW4gdGhlIHRyZWUsIGFuZCAiZSIgaXMgYSB0ZW1wb3Jhcnkgb3Ig bmV3IG5vZGUgaW4gdGhlIHRyZWUuICBUaGUgcmVzdAorICAgaXMgc3VmZmlj aWVudGx5IHN0cmFpZ2gtZm9yd2FyZCAoYW5kIHZlcnkgd2VsbCBleHBsYWlu ZWQgaW4gdGhlIHBhcGVyKQorICAgdGhhdCBjb21tZW50IHdvdWxkIG9ubHkg Y2x1dHRlciB0aGluZ3MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2Jp dG1hcF90cmVlX2xpbmtfbGVmdCAoYml0bWFwX2VsZW1lbnQgKiAmdCwgYml0 bWFwX2VsZW1lbnQgKiAmbCkKK3sKKyAgbC0+bmV4dCA9IHQ7CisgIGwgPSB0 OworICB0ID0gdC0+bmV4dDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCiti aXRtYXBfdHJlZV9saW5rX3JpZ2h0IChiaXRtYXBfZWxlbWVudCAqICZ0LCBi aXRtYXBfZWxlbWVudCAqICZyKQoreworICByLT5wcmV2ID0gdDsKKyAgciA9 IHQ7CisgIHQgPSB0LT5wcmV2OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQK K2JpdG1hcF90cmVlX3JvdGF0ZV9sZWZ0IChiaXRtYXBfZWxlbWVudCAqICZ0 KQoreworICBiaXRtYXBfZWxlbWVudCAqZSA9IHQtPm5leHQ7CisgIHQtPm5l eHQgPSB0LT5uZXh0LT5wcmV2OworICBlLT5wcmV2ID0gdDsKKyAgdCA9IGU7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0bWFwX3RyZWVfcm90YXRl X3JpZ2h0IChiaXRtYXBfZWxlbWVudCAqICZ0KQoreworICBiaXRtYXBfZWxl bWVudCAqZSA9IHQtPnByZXY7CisgIHQtPnByZXYgPSB0LT5wcmV2LT5uZXh0 OworICBlLT5uZXh0ID0gdDsKKyAgdCA9IGU7Cit9CisKK3N0YXRpYyBiaXRt YXBfZWxlbWVudCAqCitiaXRtYXBfdHJlZV9zcGxheSAoYml0bWFwIGhlYWQs IGJpdG1hcF9lbGVtZW50ICp0LCB1bnNpZ25lZCBpbnQgaW5keCkKK3sKKyAg Yml0bWFwX2VsZW1lbnQgTiwgKmwsICpyOworCisgIGlmICh0ID09IE5VTEwp CisgICAgcmV0dXJuIE5VTEw7CisKKyAgTi5wcmV2ID0gTi5uZXh0ID0gTlVM TDsKKyAgbCA9IHIgPSAmTjsKKworICB3aGlsZSAoaW5keCAhPSB0LT5pbmR4 KQorICAgIHsKKyAgICAgIGlmIChHQVRIRVJfU1RBVElTVElDUykKKwliaXRt YXBfZGVzY3JpcHRvcnNbaGVhZC0+ZGVzY3JpcHRvcl9pZF0tPnNlYXJjaF9p dGVyKys7CisKKyAgICAgIGlmIChpbmR4IDwgdC0+aW5keCkKKwl7CisJICBp ZiAodC0+cHJldiAhPSBOVUxMICYmIGluZHggPCB0LT5wcmV2LT5pbmR4KQor CSAgICBiaXRtYXBfdHJlZV9yb3RhdGVfcmlnaHQgKHQpOworCSAgaWYgKHQt PnByZXYgPT0gTlVMTCkKKwkgICAgYnJlYWs7CisJICBiaXRtYXBfdHJlZV9s aW5rX3JpZ2h0ICh0LCByKTsKKwl9CisgICAgICBlbHNlIGlmIChpbmR4ID4g dC0+aW5keCkKKwl7CisJICBpZiAodC0+bmV4dCAhPSBOVUxMICYmIGluZHgg PiB0LT5uZXh0LT5pbmR4KQorCSAgICBiaXRtYXBfdHJlZV9yb3RhdGVfbGVm dCAodCk7CisJICBpZiAodC0+bmV4dCA9PSBOVUxMKQorCSAgICBicmVhazsK KwkgIGJpdG1hcF90cmVlX2xpbmtfbGVmdCAodCwgbCk7CisJfQorICAgIH0K KworICBsLT5uZXh0ID0gdC0+cHJldjsKKyAgci0+cHJldiA9IHQtPm5leHQ7 CisgIHQtPnByZXYgPSBOLm5leHQ7CisgIHQtPm5leHQgPSBOLnByZXY7Cisg IHJldHVybiB0OworfQogCi0vKiBDbGVhciBhIGJpdG1hcCBieSBmcmVlaW5n IHRoZSBsaW5rZWQgbGlzdC4gICovCisvKiBMaW5rIGJpdG1hcCBlbGVtZW50 IEUgaW50byB0aGUgY3VycmVudCBiaXRtYXAgc3BsYXkgdHJlZS4gICovCisK K3N0YXRpYyBpbmxpbmUgdm9pZAorYml0bWFwX3RyZWVfbGlua19lbGVtZW50 IChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmUpCit7CisgIGlmICho ZWFkLT5maXJzdCA9PSBOVUxMKQorICAgIGUtPnByZXYgPSBlLT5uZXh0ID0g TlVMTDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGJpdG1hcF9lbGVtZW50ICp0 ID0gYml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGhlYWQtPmZpcnN0LCBlLT5p bmR4KTsKKyAgICAgIGlmIChlLT5pbmR4IDwgdC0+aW5keCkKKwl7CisJICBl LT5wcmV2ID0gdC0+cHJldjsKKwkgIGUtPm5leHQgPSB0OworCSAgdC0+cHJl diA9IE5VTEw7CisJfQorICAgICAgZWxzZSBpZiAoZS0+aW5keCA+IHQtPmlu ZHgpCisJeworCSAgZS0+bmV4dCA9IHQtPm5leHQ7CisJICBlLT5wcmV2ID0g dDsKKwkgIHQtPm5leHQgPSBOVUxMOworCX0KKyAgICAgIGVsc2UKKwlnY2Nf dW5yZWFjaGFibGUgKCk7CisgICAgfQorICBoZWFkLT5maXJzdCA9IGU7Cisg IGhlYWQtPmN1cnJlbnQgPSBlOworICBoZWFkLT5pbmR4ID0gZS0+aW5keDsK K30KKworLyogVW5saW5rIGJpdG1hcCBlbGVtZW50IEUgZnJvbSB0aGUgY3Vy cmVudCBiaXRtYXAgc3BsYXkgdHJlZSwKKyAgIGFuZCByZXR1cm4gaXQgdG8g dGhlIGZyZWVsaXN0LiAgKi8KKworc3RhdGljIHZvaWQKK2JpdG1hcF90cmVl X3VubGlua19lbGVtZW50IChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQg KmUpCit7CisgIGJpdG1hcF9lbGVtZW50ICp0ID0gYml0bWFwX3RyZWVfc3Bs YXkgKGhlYWQsIGhlYWQtPmZpcnN0LCBlLT5pbmR4KTsKKworICBnY2NfY2hl Y2tpbmdfYXNzZXJ0ICh0ID09IGUpOworCisgIGlmIChlLT5wcmV2ID09IE5V TEwpCisgICAgdCA9IGUtPm5leHQ7CisgIGVsc2UKKyAgICB7CisgICAgICB0 ID0gYml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGUtPnByZXYsIGUtPmluZHgp OworICAgICAgdC0+bmV4dCA9IGUtPm5leHQ7CisgICAgfQorICBoZWFkLT5m aXJzdCA9IHQ7CisgIGhlYWQtPmN1cnJlbnQgPSB0OworICBoZWFkLT5pbmR4 ID0gKHQgIT0gTlVMTCkgPyB0LT5pbmR4IDogMDsKK30KKworLyogUmV0dXJu IHRoZSBlbGVtZW50IGZvciBJTkRYLCBvciBOVUxMIGlmIHRoZSBlbGVtZW50 IGRvZXNuJ3QgZXhpc3QuICAqLworCitzdGF0aWMgaW5saW5lIGJpdG1hcF9l bGVtZW50ICoKK2JpdG1hcF90cmVlX2ZpbmRfZWxlbWVudCAoYml0bWFwIGhl YWQsIHVuc2lnbmVkIGludCBpbmR4KQoreworICBiaXRtYXBfZWxlbWVudCAq ZT0gYml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGhlYWQtPmZpcnN0LCBpbmR4 KTsKKyAgaGVhZC0+Zmlyc3QgPSBlOworICBpZiAoZS0+aW5keCA9PSBpbmR4 KQorICAgIHsKKyAgICAgIGhlYWQtPmN1cnJlbnQgPSBlOworICAgICAgaGVh ZC0+aW5keCA9IGUtPmluZHg7CisgICAgfQorICByZXR1cm4gZTsKK30KKwwK Ky8qIENvbnZlcnRpbmcgYml0bWFwIHZpZXdzIGZyb20gbGlua2VkLWxpc3Qg dG8gdHJlZSBhbmQgdmljZSB2ZXJzYS4gICovCisKKy8qIFNwbGljZSBlbGVt ZW50IEUgYW5kIGFsbCBlbGVtZW50cyB3aXRoIGEgbGFyZ2VyIGluZGV4IGZy b20KKyAgIGJpdG1hcCBIRUFELCBjb252ZXJ0IHRoZSBzcGxpY2VkIGVsZW1l bnRzIHRvIHRoZSBsaW5rZWQtbGlzdAorICAgdmlldywgYW5kIHJldHVybiB0 aGUgaGVhZCBvZiB0aGUgbGlzdCAod2hpY2ggc2hvdWxkIGJlIEUgYWdhaW4p LCAgKi8KKworc3RhdGljIGJpdG1hcF9lbGVtZW50ICoKK2JpdG1hcF90cmVl X2xpc3RpZnlfZnJvbSAoYml0bWFwIGhlYWQsIGJpdG1hcF9lbGVtZW50ICpl KQoreworICBiaXRtYXBfZWxlbWVudCAqdCA9IGJpdG1hcF90cmVlX3NwbGF5 IChoZWFkLCBoZWFkLT5maXJzdCwgZS0+aW5keCk7CisgIGdjY19jaGVja2lu Z19hc3NlcnQgKHQgPT0gZSk7CisKKyAgdCA9IHQtPnByZXY7CisgIGhlYWQt PmZpcnN0ID0gdDsKKyAgaGVhZC0+Y3VycmVudCA9IHQ7CisgIGhlYWQtPmlu ZHggPSAodCAhPSBOVUxMKSA/IHQtPmluZHggOiAwOworCisgIC8qIFRoZSB0 cmVlIGlzIG5vdyB2YWxpZCBhZ2Fpbi4gIE5vdyB3ZSBuZWVkIHRvICJ1bi10 cmVlIiBFLgorICAgICBJdCBpcyBpbXBlcmF0aXZlIHRoYXQgYSBub24tcmVj dXJzaXZlIGltcGxlbWVudGF0aW9uIGlzIHVzZWQKKyAgICAgZm9yIHRoaXMs IGJlY2F1c2Ugc3BsYXkgdHJlZXMgaGF2ZSBhIHdvcnN0IGNhc2UgZGVwdGgg b2YgTyhFKS4KKyAgICAgQSByZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gd291 bGQgcmVzdWx0IGluIGEgc3RhY2sgb3ZlcmZsb3cKKyAgICAgZm9yIGEgc3Vm ZmljaWVudGx5IGxhcmdlLCB1bmJhbGFuY2VkIGJpdG1hcCB0cmVlLiAgKi8K KyAgdmVjPGJpdG1hcF9lbGVtZW50ICo+IHN0YWNrID0gdk5VTEw7CisgIHZl YzxiaXRtYXBfZWxlbWVudCAqPiBzb3J0ZWRfZWxlbWVudHMgPSB2TlVMTDsK KyAgYml0bWFwX2VsZW1lbnQgKm4gPSBlOworCisgIHdoaWxlICh0cnVlKQor ICAgIHsKKyAgICAgIHdoaWxlIChuICE9IE5VTEwpCisJeworCSAgc3RhY2su c2FmZV9wdXNoIChuKTsKKwkgIG4gPSBuLT5wcmV2OworCX0KKworICAgICAg aWYgKHN0YWNrLmlzX2VtcHR5ICgpKQorCWJyZWFrOworCisgICAgICBuID0g c3RhY2sucG9wICgpOworICAgICAgc29ydGVkX2VsZW1lbnRzLnNhZmVfcHVz aCAobik7CisgICAgICBuID0gbi0+bmV4dDsKKyAgICB9CisgIHN0YWNrLnJl bGVhc2UgKCk7CisKKyAgZ2NjX2Fzc2VydCAoc29ydGVkX2VsZW1lbnRzWzBd ID09IGUpOworCisgIGJpdG1hcF9lbGVtZW50ICpwcmV2ID0gTlVMTDsKKyAg dW5zaWduZWQgaXg7CisgIEZPUl9FQUNIX1ZFQ19FTFQgKHNvcnRlZF9lbGVt ZW50cywgaXgsIG4pCisgICAgeworICAgICAgaWYgKHByZXYgIT0gTlVMTCkK KyAgICAgICAgcHJldi0+bmV4dCA9IG47CisgICAgICBuLT5wcmV2ID0gcHJl djsKKyAgICAgIG4tPm5leHQgPSBOVUxMOworICAgIH0KKyAgc29ydGVkX2Vs ZW1lbnRzLnJlbGVhc2UgKCk7CisKKyAgcmV0dXJuIGU7Cit9CisKKy8qIENv bnZlcnQgYml0bWFwIEhFQUQgZnJvbSBzcGxheS10cmVlIHZpZXcgdG8gbGlu a2VkLWxpc3Qgdmlldy4gICovCisKK3ZvaWQKK2JpdG1hcF9saXN0X3ZpZXcg KGJpdG1hcCBoZWFkKQoreworICBiaXRtYXBfZWxlbWVudCAqcHRyOworCisg IGhlYWQtPnRyZWVfZm9ybSA9IDA7CisgIGlmICghIGhlYWQtPmZpcnN0KQor ICAgIHJldHVybjsKKworICBwdHIgPSBoZWFkLT5maXJzdDsKKyAgd2hpbGUg KHB0ci0+cHJldikKKyAgICBwdHIgPSBwdHItPnByZXY7CisgIGhlYWQtPmZp cnN0ID0gYml0bWFwX3RyZWVfbGlzdGlmeV9mcm9tIChoZWFkLCBwdHIpOwor CisgIGhlYWQtPmN1cnJlbnQgPSBoZWFkLT5maXJzdDsKKyAgaGVhZC0+aW5k eCA9IGhlYWQtPmZpcnN0LT5pbmR4OworfQorCisvKiBDb252ZXJ0IGJpdG1h cCBIRUFEIGZyb20gbGlua2VkLWxpc3QgdmlldyB0byBzcGxheS10cmVlIHZp ZXcuCisgICBUaGlzIGlzIHNpbXBseSBhIG1hdHRlciBvZiBkcm9wcGluZyB0 aGUgcHJldiBvciBuZXh0IHBvaW50ZXJzCisgICBhbmQgc2V0dGluZyB0aGUg dHJlZV9mb3JtIGZsYWcuICBUaGUgdHJlZSB3aWxsIGJhbGFuY2UgaXRzZWxm CisgICBpZiBhbmQgd2hlbiBpdCBpcyB1c2VkLiAgKi8KKwordm9pZAorYml0 bWFwX3RyZWVfdmlldyAoYml0bWFwIGhlYWQpCit7CisgIGJpdG1hcF9lbGVt ZW50ICpwdHI7CisKKyAgaGVhZC0+dHJlZV9mb3JtID0gMTsKKyAgaWYgKCEg aGVhZC0+Zmlyc3QpCisgICAgcmV0dXJuOworCisgIHB0ciA9IGhlYWQtPmZp cnN0OworICB3aGlsZSAocHRyKQorICAgIHsKKyAgICAgIHB0ci0+cHJldiA9 IE5VTEw7CisgICAgICBwdHIgPSBwdHItPm5leHQ7CisgICAgfQorICBoZWFk LT5jdXJyZW50ID0gaGVhZC0+Zmlyc3Q7CisgIGhlYWQtPmluZHggPSBoZWFk LT5maXJzdC0+aW5keDsKK30KKwwKKy8qIENsZWFyIGEgYml0bWFwIGJ5IGZy ZWVpbmcgYWxsIGl0cyBlbGVtZW50cy4gICovCiAKIHZvaWQKIGJpdG1hcF9j bGVhciAoYml0bWFwIGhlYWQpCiB7CisvL2xpc3RpZnkgdGhlIHRyZWUgaWYg aGVhZCBpcyBpbiB0cmVlIGZvcm0KICAgaWYgKGhlYWQtPmZpcnN0KQogICAg IGJpdG1hcF9lbHRfY2xlYXJfZnJvbSAoaGVhZCwgaGVhZC0+Zmlyc3QpOwog fQpAQCAtNDI3LDk2ICs4NDEsNiBAQCBiaXRtYXBfZWxlbWVudF96ZXJvcCAo Y29uc3QgYml0bWFwX2VsZW1lCiAjZW5kaWYKIH0KIAwKLS8qIExpbmsgdGhl IGJpdG1hcCBlbGVtZW50IGludG8gdGhlIGN1cnJlbnQgYml0bWFwIGxpbmtl ZCBsaXN0LiAgKi8KLQotc3RhdGljIGlubGluZSB2b2lkCi1iaXRtYXBfZWxl bWVudF9saW5rIChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmVsZW1l bnQpCi17Ci0gIHVuc2lnbmVkIGludCBpbmR4ID0gZWxlbWVudC0+aW5keDsK LSAgYml0bWFwX2VsZW1lbnQgKnB0cjsKLQotICAvKiBJZiB0aGlzIGlzIHRo ZSBmaXJzdCBhbmQgb25seSBlbGVtZW50LCBzZXQgaXQgaW4uICAqLwotICBp ZiAoaGVhZC0+Zmlyc3QgPT0gMCkKLSAgICB7Ci0gICAgICBlbGVtZW50LT5u ZXh0ID0gZWxlbWVudC0+cHJldiA9IDA7Ci0gICAgICBoZWFkLT5maXJzdCA9 IGVsZW1lbnQ7Ci0gICAgfQotCi0gIC8qIElmIHRoaXMgaW5kZXggaXMgbGVz cyB0aGFuIHRoYXQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCwgaXQgZ29lcyBz b21lcGxhY2UKLSAgICAgYmVmb3JlIHRoZSBjdXJyZW50IGVsZW1lbnQuICAq LwotICBlbHNlIGlmIChpbmR4IDwgaGVhZC0+aW5keCkKLSAgICB7Ci0gICAg ICBmb3IgKHB0ciA9IGhlYWQtPmN1cnJlbnQ7Ci0JICAgcHRyLT5wcmV2ICE9 IDAgJiYgcHRyLT5wcmV2LT5pbmR4ID4gaW5keDsKLQkgICBwdHIgPSBwdHIt PnByZXYpCi0JOwotCi0gICAgICBpZiAocHRyLT5wcmV2KQotCXB0ci0+cHJl di0+bmV4dCA9IGVsZW1lbnQ7Ci0gICAgICBlbHNlCi0JaGVhZC0+Zmlyc3Qg PSBlbGVtZW50OwotCi0gICAgICBlbGVtZW50LT5wcmV2ID0gcHRyLT5wcmV2 OwotICAgICAgZWxlbWVudC0+bmV4dCA9IHB0cjsKLSAgICAgIHB0ci0+cHJl diA9IGVsZW1lbnQ7Ci0gICAgfQotCi0gIC8qIE90aGVyd2lzZSwgaXQgbXVz dCBnbyBzb21lcGxhY2UgYWZ0ZXIgdGhlIGN1cnJlbnQgZWxlbWVudC4gICov Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBmb3IgKHB0ciA9IGhlYWQtPmN1cnJl bnQ7Ci0JICAgcHRyLT5uZXh0ICE9IDAgJiYgcHRyLT5uZXh0LT5pbmR4IDwg aW5keDsKLQkgICBwdHIgPSBwdHItPm5leHQpCi0JOwotCi0gICAgICBpZiAo cHRyLT5uZXh0KQotCXB0ci0+bmV4dC0+cHJldiA9IGVsZW1lbnQ7Ci0KLSAg ICAgIGVsZW1lbnQtPm5leHQgPSBwdHItPm5leHQ7Ci0gICAgICBlbGVtZW50 LT5wcmV2ID0gcHRyOwotICAgICAgcHRyLT5uZXh0ID0gZWxlbWVudDsKLSAg ICB9Ci0KLSAgLyogU2V0IHVwIHNvIHRoaXMgaXMgdGhlIGZpcnN0IGVsZW1l bnQgc2VhcmNoZWQuICAqLwotICBoZWFkLT5jdXJyZW50ID0gZWxlbWVudDsK LSAgaGVhZC0+aW5keCA9IGluZHg7Ci19Ci0KLS8qIEluc2VydCBhIG5ldyB1 bmluaXRpYWxpemVkIGVsZW1lbnQgaW50byBiaXRtYXAgSEVBRCBhZnRlciBl bGVtZW50Ci0gICBFTFQuICBJZiBFTFQgaXMgTlVMTCwgaW5zZXJ0IHRoZSBl bGVtZW50IGF0IHRoZSBzdGFydC4gIFJldHVybiB0aGUKLSAgIG5ldyBlbGVt ZW50LiAgKi8KLQotc3RhdGljIGJpdG1hcF9lbGVtZW50ICoKLWJpdG1hcF9l bHRfaW5zZXJ0X2FmdGVyIChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQg KmVsdCwgdW5zaWduZWQgaW50IGluZHgpCi17Ci0gIGJpdG1hcF9lbGVtZW50 ICpub2RlID0gYml0bWFwX2VsZW1lbnRfYWxsb2NhdGUgKGhlYWQpOwotICBu b2RlLT5pbmR4ID0gaW5keDsKLQotICBpZiAoIWVsdCkKLSAgICB7Ci0gICAg ICBpZiAoIWhlYWQtPmN1cnJlbnQpCi0JewotCSAgaGVhZC0+Y3VycmVudCA9 IG5vZGU7Ci0JICBoZWFkLT5pbmR4ID0gaW5keDsKLQl9Ci0gICAgICBub2Rl LT5uZXh0ID0gaGVhZC0+Zmlyc3Q7Ci0gICAgICBpZiAobm9kZS0+bmV4dCkK LQlub2RlLT5uZXh0LT5wcmV2ID0gbm9kZTsKLSAgICAgIGhlYWQtPmZpcnN0 ID0gbm9kZTsKLSAgICAgIG5vZGUtPnByZXYgPSBOVUxMOwotICAgIH0KLSAg ZWxzZQotICAgIHsKLSAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKGhlYWQt PmN1cnJlbnQpOwotICAgICAgbm9kZS0+bmV4dCA9IGVsdC0+bmV4dDsKLSAg ICAgIGlmIChub2RlLT5uZXh0KQotCW5vZGUtPm5leHQtPnByZXYgPSBub2Rl OwotICAgICAgZWx0LT5uZXh0ID0gbm9kZTsKLSAgICAgIG5vZGUtPnByZXYg PSBlbHQ7Ci0gICAgfQotICByZXR1cm4gbm9kZTsKLX0KLQwKIC8qIENvcHkg YSBiaXRtYXAgdG8gYW5vdGhlciBiaXRtYXAuICAqLwogCiB2b2lkCkBAIC01 MjUsNiArODQ5LDggQEAgYml0bWFwX2NvcHkgKGJpdG1hcCB0bywgY29uc3Rf Yml0bWFwIGZybwogICBjb25zdCBiaXRtYXBfZWxlbWVudCAqZnJvbV9wdHI7 CiAgIGJpdG1hcF9lbGVtZW50ICp0b19wdHIgPSAwOwogCisgIGdjY19jaGVj a2luZ19hc3NlcnQgKCF0by0+dHJlZV9mb3JtICYmICFmcm9tLT50cmVlX2Zv cm0pOworCiAgIGJpdG1hcF9jbGVhciAodG8pOwogCiAgIC8qIENvcHkgZWxl bWVudHMgaW4gZm9yd2FyZCBkaXJlY3Rpb24gb25lIGF0IGEgdGltZS4gICov CkBAIC01MzUsOCArODYxLDkgQEAgYml0bWFwX2NvcHkgKGJpdG1hcCB0bywg Y29uc3RfYml0bWFwIGZybwogICAgICAgdG9fZWx0LT5pbmR4ID0gZnJvbV9w dHItPmluZHg7CiAgICAgICBtZW1jcHkgKHRvX2VsdC0+Yml0cywgZnJvbV9w dHItPmJpdHMsIHNpemVvZiAodG9fZWx0LT5iaXRzKSk7CiAKLSAgICAgIC8q IEhlcmUgd2UgaGF2ZSBhIHNwZWNpYWwgY2FzZSBvZiBiaXRtYXBfZWxlbWVu dF9saW5rLCBmb3IgdGhlIGNhc2UKLQkgd2hlcmUgd2Uga25vdyB0aGUgbGlu a3MgYXJlIGJlaW5nIGVudGVyZWQgaW4gc2VxdWVuY2UuICAqLworICAgICAg LyogSGVyZSB3ZSBoYXZlIGEgc3BlY2lhbCBjYXNlIG9mIGJpdG1hcF9saXN0 X2xpbmtfZWxlbWVudCwKKyAgICAgICAgIGZvciB0aGUgY2FzZSB3aGVyZSB3 ZSBrbm93IHRoZSBsaW5rcyBhcmUgYmVpbmcgZW50ZXJlZAorCSBpbiBzZXF1 ZW5jZS4gICovCiAgICAgICBpZiAodG9fcHRyID09IDApCiAJewogCSAgdG8t PmZpcnN0ID0gdG8tPmN1cnJlbnQgPSB0b19lbHQ7CkBAIC01NzIsNDUgKzg5 OSwxMCBAQCBiaXRtYXBfZmluZF9iaXQgKGJpdG1hcCBoZWFkLCB1bnNpZ25l ZCBpCiAgIGlmIChHQVRIRVJfU1RBVElTVElDUykKICAgICBiaXRtYXBfZGVz Y3JpcHRvcnNbaGVhZC0+ZGVzY3JpcHRvcl9pZF0tPm5zZWFyY2hlcysrOwog Ci0gIGlmIChoZWFkLT5pbmR4IDwgaW5keCkKLSAgICAvKiBJTkRYIGlzIGJl eW9uZCBoZWFkLT5pbmR4LiAgU2VhcmNoIGZyb20gaGVhZC0+Y3VycmVudAot ICAgICAgIGZvcndhcmQuICAqLwotICAgIGZvciAoZWxlbWVudCA9IGhlYWQt PmN1cnJlbnQ7Ci0JIGVsZW1lbnQtPm5leHQgIT0gMCAmJiBlbGVtZW50LT5p bmR4IDwgaW5keDsKLQkgZWxlbWVudCA9IGVsZW1lbnQtPm5leHQpCi0gICAg ICB7Ci0JaWYgKEdBVEhFUl9TVEFUSVNUSUNTKQotCSAgYml0bWFwX2Rlc2Ny aXB0b3JzW2hlYWQtPmRlc2NyaXB0b3JfaWRdLT5zZWFyY2hfaXRlcisrOwot ICAgICAgfQotCi0gIGVsc2UgaWYgKGhlYWQtPmluZHggLyAyIDwgaW5keCkK LSAgICAvKiBJTkRYIGlzIGxlc3MgdGhhbiBoZWFkLT5pbmR4IGFuZCBjbG9z ZXIgdG8gaGVhZC0+aW5keCB0aGFuIHRvCi0gICAgICAgMC4gIFNlYXJjaCBm cm9tIGhlYWQtPmN1cnJlbnQgYmFja3dhcmQuICAqLwotICAgIGZvciAoZWxl bWVudCA9IGhlYWQtPmN1cnJlbnQ7Ci0JIGVsZW1lbnQtPnByZXYgIT0gMCAm JiBlbGVtZW50LT5pbmR4ID4gaW5keDsKLQkgZWxlbWVudCA9IGVsZW1lbnQt PnByZXYpCi0gICAgICB7Ci0JaWYgKEdBVEhFUl9TVEFUSVNUSUNTKQotCSAg Yml0bWFwX2Rlc2NyaXB0b3JzW2hlYWQtPmRlc2NyaXB0b3JfaWRdLT5zZWFy Y2hfaXRlcisrOwotICAgICAgfQotCisgIGlmICghaGVhZC0+dHJlZV9mb3Jt KQorICAgIGVsZW1lbnQgPSBiaXRtYXBfbGlzdF9maW5kX2VsZW1lbnQgKGhl YWQsIGluZHgpOwogICBlbHNlCi0gICAgLyogSU5EWCBpcyBsZXNzIHRoYW4g aGVhZC0+aW5keCBhbmQgY2xvc2VyIHRvIDAgdGhhbiB0bwotICAgICAgIGhl YWQtPmluZHguICBTZWFyY2ggZnJvbSBoZWFkLT5maXJzdCBmb3J3YXJkLiAg Ki8KLSAgICBmb3IgKGVsZW1lbnQgPSBoZWFkLT5maXJzdDsKLQkgZWxlbWVu dC0+bmV4dCAhPSAwICYmIGVsZW1lbnQtPmluZHggPCBpbmR4OwotCSBlbGVt ZW50ID0gZWxlbWVudC0+bmV4dCkKLSAgICAgIGlmIChHQVRIRVJfU1RBVElT VElDUykKLQl7Ci0JICBiaXRtYXBfZGVzY3JpcHRvcnNbaGVhZC0+ZGVzY3Jp cHRvcl9pZF0tPnNlYXJjaF9pdGVyKys7Ci0JfQotCi0gIC8qIGBlbGVtZW50 JyBpcyB0aGUgbmVhcmVzdCB0byB0aGUgb25lIHdlIHdhbnQuICBJZiBpdCdz IG5vdCB0aGUgb25lIHdlCi0gICAgIHdhbnQsIHRoZSBvbmUgd2Ugd2FudCBk b2Vzbid0IGV4aXN0LiAgKi8KLSAgaGVhZC0+Y3VycmVudCA9IGVsZW1lbnQ7 Ci0gIGhlYWQtPmluZHggPSBlbGVtZW50LT5pbmR4OwotICBpZiAoZWxlbWVu dCAhPSAwICYmIGVsZW1lbnQtPmluZHggIT0gaW5keCkKLSAgICBlbGVtZW50 ID0gMDsKKyAgICBlbGVtZW50ID0gYml0bWFwX3RyZWVfZmluZF9lbGVtZW50 IChoZWFkLCBpbmR4KTsKIAogICByZXR1cm4gZWxlbWVudDsKIH0KQEAgLTYz NCw3ICs5MjYsMTIgQEAgYml0bWFwX2NsZWFyX2JpdCAoYml0bWFwIGhlYWQs IGludCBiaXQpCiAJICAvKiBJZiB3ZSBjbGVhcmVkIHRoZSBlbnRpcmUgd29y ZCwgZnJlZSB1cCB0aGUgZWxlbWVudC4gICovCiAJICBpZiAoIXB0ci0+Yml0 c1t3b3JkX251bV0KIAkgICAgICAmJiBiaXRtYXBfZWxlbWVudF96ZXJvcCAo cHRyKSkKLQkgICAgYml0bWFwX2VsZW1lbnRfZnJlZSAoaGVhZCwgcHRyKTsK KwkgICAgeworCSAgICAgIGlmICghaGVhZC0+dHJlZV9mb3JtKQorCQliaXRt YXBfbGlzdF91bmxpbmtfZWxlbWVudCAoaGVhZCwgcHRyKTsKKwkgICAgICBl bHNlCisJCWJpdG1hcF90cmVlX3VubGlua19lbGVtZW50IChoZWFkLCBwdHIp OworCSAgICB9CiAJfQogCiAgICAgICByZXR1cm4gcmVzOwpAQCAtNjUzLDIx ICs5NTAsMjIgQEAgYml0bWFwX3NldF9iaXQgKGJpdG1hcCBoZWFkLCBpbnQg Yml0KQogICB1bnNpZ25lZCBiaXRfbnVtICA9IGJpdCAlIEJJVE1BUF9XT1JE X0JJVFM7CiAgIEJJVE1BUF9XT1JEIGJpdF92YWwgPSAoKEJJVE1BUF9XT1JE KSAxKSA8PCBiaXRfbnVtOwogCi0gIGlmIChwdHIgPT0gMCkKLSAgICB7Ci0g ICAgICBwdHIgPSBiaXRtYXBfZWxlbWVudF9hbGxvY2F0ZSAoaGVhZCk7Ci0g ICAgICBwdHItPmluZHggPSBiaXQgLyBCSVRNQVBfRUxFTUVOVF9BTExfQklU UzsKLSAgICAgIHB0ci0+Yml0c1t3b3JkX251bV0gPSBiaXRfdmFsOwotICAg ICAgYml0bWFwX2VsZW1lbnRfbGluayAoaGVhZCwgcHRyKTsKLSAgICAgIHJl dHVybiB0cnVlOwotICAgIH0KLSAgZWxzZQorICBpZiAocHRyICE9IDApCiAg ICAgewogICAgICAgYm9vbCByZXMgPSAocHRyLT5iaXRzW3dvcmRfbnVtXSAm IGJpdF92YWwpID09IDA7CiAgICAgICBpZiAocmVzKQogCXB0ci0+Yml0c1t3 b3JkX251bV0gfD0gYml0X3ZhbDsKICAgICAgIHJldHVybiByZXM7CiAgICAg fQorCisgIHB0ciA9IGJpdG1hcF9lbGVtZW50X2FsbG9jYXRlIChoZWFkKTsK KyAgcHRyLT5pbmR4ID0gYml0IC8gQklUTUFQX0VMRU1FTlRfQUxMX0JJVFM7 CisgIHB0ci0+Yml0c1t3b3JkX251bV0gPSBiaXRfdmFsOworICBpZiAoIWhl YWQtPnRyZWVfZm9ybSkKKyAgICBiaXRtYXBfbGlzdF9saW5rX2VsZW1lbnQg KGhlYWQsIHB0cik7CisgIGVsc2UKKyAgICBiaXRtYXBfdHJlZV9saW5rX2Vs ZW1lbnQgKGhlYWQsIHB0cik7CisgIHJldHVybiB0cnVlOwogfQogCiAvKiBS ZXR1cm4gd2hldGhlciBhIGJpdCBpcyBzZXQgd2l0aGluIGEgYml0bWFwLiAg Ki8KQEAgLTcyNCwxMyArMTAyMiwxNCBAQCBiaXRtYXBfY291bnRfYml0cyAo Y29uc3RfYml0bWFwIGEpCiAgIGNvbnN0IGJpdG1hcF9lbGVtZW50ICplbHQ7 CiAgIHVuc2lnbmVkIGl4OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFh LT50cmVlX2Zvcm0pOwogICBmb3IgKGVsdCA9IGEtPmZpcnN0OyBlbHQ7IGVs dCA9IGVsdC0+bmV4dCkKICAgICB7CiAgICAgICBmb3IgKGl4ID0gMDsgaXgg IT0gQklUTUFQX0VMRU1FTlRfV09SRFM7IGl4KyspCiAJewogI2lmIEdDQ19W RVJTSU9OID49IDM0MDAKLSAJICAvKiBOb3RlIHRoYXQgcG9wY291bnRsIG1h dGNoZXMgQklUTUFQX1dPUkQgaW4gdHlwZSwgc28gdGhlIGFjdHVhbCBzaXpl Ci0JIG9mIEJJVE1BUF9XT1JEIGlzIG5vdCBtYXRlcmlhbC4gICovCisgCSAg LyogTm90ZSB0aGF0IHBvcGNvdW50bCBtYXRjaGVzIEJJVE1BUF9XT1JEIGlu IHR5cGUsCisJICAgICBzbyB0aGUgYWN0dWFsIHNpemUgb2YgQklUTUFQX1dP UkQgaXMgbm90IG1hdGVyaWFsLiAgKi8KIAkgIGNvdW50ICs9IF9fYnVpbHRp bl9wb3Bjb3VudGwgKGVsdC0+Yml0c1tpeF0pOwogI2Vsc2UKIAkgIGNvdW50 ICs9IGJpdG1hcF9wb3Bjb3VudCAoZWx0LT5iaXRzW2l4XSk7CkBAIC03NTQs OSArMTA1MywxMSBAQCBiaXRtYXBfc2luZ2xlX2JpdF9zZXRfcCAoY29uc3Rf Yml0bWFwIGEpCiAgICAgcmV0dXJuIGZhbHNlOwogCiAgIGVsdCA9IGEtPmZp cnN0OworCiAgIC8qIEFzIHRoZXJlIGFyZSBubyBjb21wbGV0ZWx5IGVtcHR5 IGJpdG1hcCBlbGVtZW50cywgYSBzZWNvbmQgb25lCiAgICAgIG1lYW5zIHdl IGhhdmUgbW9yZSB0aGFuIG9uZSBiaXQgc2V0LiAgKi8KLSAgaWYgKGVsdC0+ bmV4dCAhPSBOVUxMKQorICBpZiAoZWx0LT5uZXh0ICE9IE5VTEwKKyAgICAg ICYmICghYS0+dHJlZV9mb3JtIHx8IGVsdC0+cHJldiAhPSBOVUxMKSkKICAg ICByZXR1cm4gZmFsc2U7CiAKICAgZm9yIChpeCA9IDA7IGl4ICE9IEJJVE1B UF9FTEVNRU5UX1dPUkRTOyBpeCsrKQpAQCAtNzg4LDYgKzEwODksMTEgQEAg Yml0bWFwX2ZpcnN0X3NldF9iaXQgKGNvbnN0X2JpdG1hcCBhKQogICB1bnNp Z25lZCBpeDsKIAogICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChlbHQpOworCisg IGlmIChhLT50cmVlX2Zvcm0pCisgICAgd2hpbGUgKGVsdC0+cHJldikKKyAg ICAgIGVsdCA9IGVsdC0+cHJldjsKKwogICBiaXRfbm8gPSBlbHQtPmluZHgg KiBCSVRNQVBfRUxFTUVOVF9BTExfQklUUzsKICAgZm9yIChpeCA9IDA7IGl4 ICE9IEJJVE1BUF9FTEVNRU5UX1dPUkRTOyBpeCsrKQogICAgIHsKQEAgLTgz OSw4ICsxMTQ1LDExIEBAIGJpdG1hcF9sYXN0X3NldF9iaXQgKGNvbnN0X2Jp dG1hcCBhKQogICBpbnQgaXg7CiAKICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAo ZWx0KTsKKworICAvKiBUaGlzIHdvcmtzIGZvciBsaW5rZWQtbGlzdCBhbmQg YmluYXJ5IHRyZWUgcmVwcmVzZW50YXRpb24gYWxpa2UuICAqLwogICB3aGls ZSAoZWx0LT5uZXh0KQogICAgIGVsdCA9IGVsdC0+bmV4dDsKKwogICBiaXRf bm8gPSBlbHQtPmluZHggKiBCSVRNQVBfRUxFTUVOVF9BTExfQklUUzsKICAg Zm9yIChpeCA9IEJJVE1BUF9FTEVNRU5UX1dPUkRTIC0gMTsgaXggPj0gMDsg aXgtLSkKICAgICB7CkBAIC04ODIsNiArMTE5MSw3IEBAIGJpdG1hcF9hbmQg KGJpdG1hcCBkc3QsIGNvbnN0X2JpdG1hcCBhLAogICBjb25zdCBiaXRtYXBf ZWxlbWVudCAqYl9lbHQgPSBiLT5maXJzdDsKICAgYml0bWFwX2VsZW1lbnQg KmRzdF9wcmV2ID0gTlVMTDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICgh ZHN0LT50cmVlX2Zvcm0gJiYgIWEtPnRyZWVfZm9ybSAmJiAhYi0+dHJlZV9m b3JtKTsKICAgZ2NjX2Fzc2VydCAoZHN0ICE9IGEgJiYgZHN0ICE9IGIpOwog CiAgIGlmIChhID09IGIpCkBAIC05MDMsNyArMTIxMyw4IEBAIGJpdG1hcF9h bmQgKGJpdG1hcCBkc3QsIGNvbnN0X2JpdG1hcCBhLAogCSAgQklUTUFQX1dP UkQgaW9yID0gMDsKIAogCSAgaWYgKCFkc3RfZWx0KQotCSAgICBkc3RfZWx0 ID0gYml0bWFwX2VsdF9pbnNlcnRfYWZ0ZXIgKGRzdCwgZHN0X3ByZXYsIGFf ZWx0LT5pbmR4KTsKKwkgICAgZHN0X2VsdCA9IGJpdG1hcF9saXN0X2luc2Vy dF9lbGVtZW50X2FmdGVyIChkc3QsIGRzdF9wcmV2LAorCQkJCQkJCWFfZWx0 LT5pbmR4KTsKIAkgIGVsc2UKIAkgICAgZHN0X2VsdC0+aW5keCA9IGFfZWx0 LT5pbmR4OwogCSAgZm9yIChpeCA9IDA7IGl4IDwgQklUTUFQX0VMRU1FTlRf V09SRFM7IGl4KyspCkBAIC05NDAsNiArMTI1MSw4IEBAIGJpdG1hcF9hbmRf aW50byAoYml0bWFwIGEsIGNvbnN0X2JpdG1hcAogICBiaXRtYXBfZWxlbWVu dCAqbmV4dDsKICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAKKyAgZ2NjX2No ZWNraW5nX2Fzc2VydCAoIWEtPnRyZWVfZm9ybSAmJiAhYi0+dHJlZV9mb3Jt KTsKKwogICBpZiAoYSA9PSBiKQogICAgIHJldHVybiBmYWxzZTsKIApAQCAt OTQ4LDcgKzEyNjEsNyBAQCBiaXRtYXBfYW5kX2ludG8gKGJpdG1hcCBhLCBj b25zdF9iaXRtYXAKICAgICAgIGlmIChhX2VsdC0+aW5keCA8IGJfZWx0LT5p bmR4KQogCXsKIAkgIG5leHQgPSBhX2VsdC0+bmV4dDsKLQkgIGJpdG1hcF9l bGVtZW50X2ZyZWUgKGEsIGFfZWx0KTsKKwkgIGJpdG1hcF9saXN0X3VubGlu a19lbGVtZW50IChhLCBhX2VsdCk7CiAJICBhX2VsdCA9IG5leHQ7CiAJICBj aGFuZ2VkID0gdHJ1ZTsKIAl9CkBAIC05NzAsNyArMTI4Myw3IEBAIGJpdG1h cF9hbmRfaW50byAoYml0bWFwIGEsIGNvbnN0X2JpdG1hcAogCSAgICB9CiAJ ICBuZXh0ID0gYV9lbHQtPm5leHQ7CiAJICBpZiAoIWlvcikKLQkgICAgYml0 bWFwX2VsZW1lbnRfZnJlZSAoYSwgYV9lbHQpOworCSAgICBiaXRtYXBfbGlz dF91bmxpbmtfZWxlbWVudCAoYSwgYV9lbHQpOwogCSAgYV9lbHQgPSBuZXh0 OwogCSAgYl9lbHQgPSBiX2VsdC0+bmV4dDsKIAl9CkBAIC0xMDEyLDcgKzEz MjUsOCBAQCBiaXRtYXBfZWx0X2NvcHkgKGJpdG1hcCBkc3QsIGJpdG1hcF9l bGVtCiAgICAgewogICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICBpZiAo IWRzdF9lbHQpCi0JZHN0X2VsdCA9IGJpdG1hcF9lbHRfaW5zZXJ0X2FmdGVy IChkc3QsIGRzdF9wcmV2LCBzcmNfZWx0LT5pbmR4KTsKKwlkc3RfZWx0ID0g Yml0bWFwX2xpc3RfaW5zZXJ0X2VsZW1lbnRfYWZ0ZXIgKGRzdCwgZHN0X3By ZXYsCisJCQkJCQkgICAgc3JjX2VsdC0+aW5keCk7CiAgICAgICBlbHNlCiAJ ZHN0X2VsdC0+aW5keCA9IHNyY19lbHQtPmluZHg7CiAgICAgICBtZW1jcHkg KGRzdF9lbHQtPmJpdHMsIHNyY19lbHQtPmJpdHMsIHNpemVvZiAoZHN0X2Vs dC0+Yml0cykpOwpAQCAtMTAzNCw2ICsxMzQ4LDcgQEAgYml0bWFwX2FuZF9j b21wbCAoYml0bWFwIGRzdCwgY29uc3RfYml0bQogICBiaXRtYXBfZWxlbWVu dCAqKmRzdF9wcmV2X3BuZXh0ID0gJmRzdC0+Zmlyc3Q7CiAgIGJvb2wgY2hh bmdlZCA9IGZhbHNlOwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFkc3Qt PnRyZWVfZm9ybSAmJiAhYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0p OwogICBnY2NfYXNzZXJ0IChkc3QgIT0gYSAmJiBkc3QgIT0gYik7CiAKICAg aWYgKGEgPT0gYikKQEAgLTEwODIsNyArMTM5Nyw4IEBAIGJpdG1hcF9hbmRf Y29tcGwgKGJpdG1hcCBkc3QsIGNvbnN0X2JpdG0KIAkgICAgICBib29sIG5l d19lbGVtZW50OwogCSAgICAgIGlmICghZHN0X2VsdCB8fCBkc3RfZWx0LT5p bmR4ID4gYV9lbHQtPmluZHgpCiAJCXsKLQkJICBkc3RfZWx0ID0gYml0bWFw X2VsdF9pbnNlcnRfYWZ0ZXIgKGRzdCwgZHN0X3ByZXYsIGFfZWx0LT5pbmR4 KTsKKwkJICBkc3RfZWx0ID0gYml0bWFwX2xpc3RfaW5zZXJ0X2VsZW1lbnRf YWZ0ZXIgKGRzdCwgZHN0X3ByZXYsCisJCQkJCQkJICAgICAgYV9lbHQtPmlu ZHgpOwogCQkgIG5ld19lbGVtZW50ID0gdHJ1ZTsKIAkJfQogCSAgICAgIGVs c2UKQEAgLTExMDQsNyArMTQyMCw3IEBAIGJpdG1hcF9hbmRfY29tcGwgKGJp dG1hcCBkc3QsIGNvbnN0X2JpdG0KIAkgICAgICBlbHNlCiAJICAgICAgICB7 CiAJICAgICAgICAgIGNoYW5nZWQgfD0gIW5ld19lbGVtZW50OwotCQkgIGJp dG1hcF9lbGVtZW50X2ZyZWUgKGRzdCwgZHN0X2VsdCk7CisJCSAgYml0bWFw X2xpc3RfdW5saW5rX2VsZW1lbnQgKGRzdCwgZHN0X2VsdCk7CiAJCSAgZHN0 X2VsdCA9ICpkc3RfcHJldl9wbmV4dDsKIAkJfQogCSAgICB9CkBAIC0xMTQ1 LDYgKzE0NjEsOCBAQCBiaXRtYXBfYW5kX2NvbXBsX2ludG8gKGJpdG1hcCBh LCBjb25zdF9iCiAgIGJpdG1hcF9lbGVtZW50ICpuZXh0OwogICBCSVRNQVBf V09SRCBjaGFuZ2VkID0gMDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICgh YS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0pOworCiAgIGlmIChhID09 IGIpCiAgICAgewogICAgICAgaWYgKGJpdG1hcF9lbXB0eV9wIChhKSkKQEAg LTExNzksNyArMTQ5Nyw3IEBAIGJpdG1hcF9hbmRfY29tcGxfaW50byAoYml0 bWFwIGEsIGNvbnN0X2IKIAkgICAgfQogCSAgbmV4dCA9IGFfZWx0LT5uZXh0 OwogCSAgaWYgKCFpb3IpCi0JICAgIGJpdG1hcF9lbGVtZW50X2ZyZWUgKGEs IGFfZWx0KTsKKwkgICAgYml0bWFwX2xpc3RfdW5saW5rX2VsZW1lbnQgKGEs IGFfZWx0KTsKIAkgIGFfZWx0ID0gbmV4dDsKIAkgIGJfZWx0ID0gYl9lbHQt Pm5leHQ7CiAJfQpAQCAtMTE5Nyw2ICsxNTE1LDggQEAgYml0bWFwX3NldF9y YW5nZSAoYml0bWFwIGhlYWQsIHVuc2lnbmVkCiAgIGJpdG1hcF9lbGVtZW50 ICplbHQsICplbHRfcHJldjsKICAgdW5zaWduZWQgaW50IGk7CiAKKyAgZ2Nj X2NoZWNraW5nX2Fzc2VydCAoIWhlYWQtPnRyZWVfZm9ybSk7CisKICAgaWYg KCFjb3VudCkKICAgICByZXR1cm47CiAKQEAgLTEyMTMsNyArMTUzMyw3IEBA IGJpdG1hcF9zZXRfcmFuZ2UgKGJpdG1hcCBoZWFkLCB1bnNpZ25lZAogICAg IHsKICAgICAgIGVsdCA9IGJpdG1hcF9lbGVtZW50X2FsbG9jYXRlIChoZWFk KTsKICAgICAgIGVsdC0+aW5keCA9IGZpcnN0X2luZGV4OwotICAgICAgYml0 bWFwX2VsZW1lbnRfbGluayAoaGVhZCwgZWx0KTsKKyAgICAgIGJpdG1hcF9s aXN0X2xpbmtfZWxlbWVudCAoaGVhZCwgZWx0KTsKICAgICB9CiAKICAgZ2Nj X2NoZWNraW5nX2Fzc2VydCAoZWx0LT5pbmR4ID09IGZpcnN0X2luZGV4KTsK QEAgLTEyMzAsNyArMTU1MCw3IEBAIGJpdG1hcF9zZXRfcmFuZ2UgKGJpdG1h cCBoZWFkLCB1bnNpZ25lZAogICAgICAgdW5zaWduZWQgaW50IGl4OwogCiAg ICAgICBpZiAoIWVsdCB8fCBlbHQtPmluZHggIT0gaSkKLQllbHQgPSBiaXRt YXBfZWx0X2luc2VydF9hZnRlciAoaGVhZCwgZWx0X3ByZXYsIGkpOworCWVs dCA9IGJpdG1hcF9saXN0X2luc2VydF9lbGVtZW50X2FmdGVyIChoZWFkLCBl bHRfcHJldiwgaSk7CiAKICAgICAgIGlmIChlbHRfc3RhcnRfYml0IDw9IHN0 YXJ0KQogCXsKQEAgLTEyOTYsNiArMTYxNiw4IEBAIGJpdG1hcF9jbGVhcl9y YW5nZSAoYml0bWFwIGhlYWQsIHVuc2lnbmUKICAgdW5zaWduZWQgaW50IGZp cnN0X2luZGV4LCBlbmRfYml0X3BsdXMxLCBsYXN0X2luZGV4OwogICBiaXRt YXBfZWxlbWVudCAqZWx0OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFo ZWFkLT50cmVlX2Zvcm0pOworCiAgIGlmICghY291bnQpCiAgICAgcmV0dXJu OwogCkBAIC0xMzMzLDcgKzE2NTUsNyBAQCBiaXRtYXBfY2xlYXJfcmFuZ2Ug KGJpdG1hcCBoZWFkLCB1bnNpZ25lCiAKICAgICAgIGlmIChlbHRfc3RhcnRf Yml0ID49IHN0YXJ0ICYmIGVsdF9lbmRfYml0X3BsdXMxIDw9IGVuZF9iaXRf cGx1czEpCiAJLyogR2V0IHJpZCBvZiB0aGUgZW50aXJlIGVsdCBhbmQgZ28g dG8gdGhlIG5leHQgb25lLiAgKi8KLQliaXRtYXBfZWxlbWVudF9mcmVlICho ZWFkLCBlbHQpOworCWJpdG1hcF9saXN0X3VubGlua19lbGVtZW50IChoZWFk LCBlbHQpOwogICAgICAgZWxzZQogCXsKIAkgIC8qIEdvaW5nIHRvIGhhdmUg dG8ga25vY2sgb3V0IHNvbWUgYml0cyBpbiB0aGlzIGVsdC4gICovCkBAIC0x NDAzLDcgKzE3MjUsNyBAQCBiaXRtYXBfY2xlYXJfcmFuZ2UgKGJpdG1hcCBo ZWFkLCB1bnNpZ25lCiAJICAgICAgfQogCSAgLyogQ2hlY2sgdG8gc2VlIGlm IHRoZXJlIGFyZSBhbnkgYml0cyBsZWZ0LiAgKi8KIAkgIGlmIChjbGVhcikK LQkgICAgYml0bWFwX2VsZW1lbnRfZnJlZSAoaGVhZCwgZWx0KTsKKwkgICAg Yml0bWFwX2xpc3RfdW5saW5rX2VsZW1lbnQgKGhlYWQsIGVsdCk7CiAJfQog ICAgICAgZWx0ID0gbmV4dF9lbHQ7CiAgICAgfQpAQCAtMTQyNSw2ICsxNzQ3 LDcgQEAgYml0bWFwX2NvbXBsX2FuZF9pbnRvIChiaXRtYXAgYSwgY29uc3Rf YgogICBiaXRtYXBfZWxlbWVudCAqYV9wcmV2ID0gTlVMTDsKICAgYml0bWFw X2VsZW1lbnQgKm5leHQ7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWEt PnRyZWVfZm9ybSAmJiAhYi0+dHJlZV9mb3JtKTsKICAgZ2NjX2Fzc2VydCAo YSAhPSBiKTsKIAogICBpZiAoYml0bWFwX2VtcHR5X3AgKGEpKQpAQCAtMTQ0 NSwxMyArMTc2OCwxMyBAQCBiaXRtYXBfY29tcGxfYW5kX2ludG8gKGJpdG1h cCBhLCBjb25zdF9iCiAJICAvKiBBIGlzIGJlZm9yZSBCLiAgUmVtb3ZlIEEg Ki8KIAkgIG5leHQgPSBhX2VsdC0+bmV4dDsKIAkgIGFfcHJldiA9IGFfZWx0 LT5wcmV2OwotCSAgYml0bWFwX2VsZW1lbnRfZnJlZSAoYSwgYV9lbHQpOwor CSAgYml0bWFwX2xpc3RfdW5saW5rX2VsZW1lbnQgKGEsIGFfZWx0KTsKIAkg IGFfZWx0ID0gbmV4dDsKIAl9CiAgICAgICBlbHNlIGlmICghYV9lbHQgfHwg Yl9lbHQtPmluZHggPCBhX2VsdC0+aW5keCkKIAl7CiAJICAvKiBCIGlzIGJl Zm9yZSBBLiAgQ29weSBCLiAqLwotCSAgbmV4dCA9IGJpdG1hcF9lbHRfaW5z ZXJ0X2FmdGVyIChhLCBhX3ByZXYsIGJfZWx0LT5pbmR4KTsKKwkgIG5leHQg PSBiaXRtYXBfbGlzdF9pbnNlcnRfZWxlbWVudF9hZnRlciAoYSwgYV9wcmV2 LCBiX2VsdC0+aW5keCk7CiAJICBtZW1jcHkgKG5leHQtPmJpdHMsIGJfZWx0 LT5iaXRzLCBzaXplb2YgKG5leHQtPmJpdHMpKTsKIAkgIGFfcHJldiA9IG5l eHQ7CiAJICBiX2VsdCA9IGJfZWx0LT5uZXh0OwpAQCAtMTQ3Miw3ICsxNzk1 LDcgQEAgYml0bWFwX2NvbXBsX2FuZF9pbnRvIChiaXRtYXAgYSwgY29uc3Rf YgogCSAgICB9CiAJICBuZXh0ID0gYV9lbHQtPm5leHQ7CiAJICBpZiAoIWlv cikKLQkgICAgYml0bWFwX2VsZW1lbnRfZnJlZSAoYSwgYV9lbHQpOworCSAg ICBiaXRtYXBfbGlzdF91bmxpbmtfZWxlbWVudCAoYSwgYV9lbHQpOwogCSAg ZWxzZQogCSAgICBhX3ByZXYgPSBhX2VsdDsKIAkgIGFfZWx0ID0gbmV4dDsK QEAgLTE1MTcsNyArMTg0MCw4IEBAIGJpdG1hcF9lbHRfaW9yIChiaXRtYXAg ZHN0LCBiaXRtYXBfZWxlbWUKIAl7CiAJICBjaGFuZ2VkID0gdHJ1ZTsKIAkg IGlmICghZHN0X2VsdCkKLQkgICAgZHN0X2VsdCA9IGJpdG1hcF9lbHRfaW5z ZXJ0X2FmdGVyIChkc3QsIGRzdF9wcmV2LCBhX2VsdC0+aW5keCk7CisJICAg IGRzdF9lbHQgPSBiaXRtYXBfbGlzdF9pbnNlcnRfZWxlbWVudF9hZnRlciAo ZHN0LCBkc3RfcHJldiwKKwkJCQkJCQlhX2VsdC0+aW5keCk7CiAJICBlbHNl CiAJICAgIGRzdF9lbHQtPmluZHggPSBhX2VsdC0+aW5keDsKIAkgIGZvciAo aXggPSAwOyBpeCA8IEJJVE1BUF9FTEVNRU5UX1dPUkRTOyBpeCsrKQpAQCAt MTU1Niw2ICsxODgwLDcgQEAgYml0bWFwX2lvciAoYml0bWFwIGRzdCwgY29u c3RfYml0bWFwIGEsCiAgIGJpdG1hcF9lbGVtZW50ICoqZHN0X3ByZXZfcG5l eHQgPSAmZHN0LT5maXJzdDsKICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAK KyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWRzdC0+dHJlZV9mb3JtICYmICFh LT50cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9ybSk7CiAgIGdjY19hc3NlcnQg KGRzdCAhPSBhICYmIGRzdCAhPSBiKTsKIAogICB3aGlsZSAoYV9lbHQgfHwg Yl9lbHQpCkBAIC0xNjAyLDYgKzE5MjcsNyBAQCBiaXRtYXBfaW9yX2ludG8g KGJpdG1hcCBhLCBjb25zdF9iaXRtYXAKICAgYml0bWFwX2VsZW1lbnQgKiph X3ByZXZfcG5leHQgPSAmYS0+Zmlyc3Q7CiAgIGJvb2wgY2hhbmdlZCA9IGZh bHNlOwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFhLT50cmVlX2Zvcm0g JiYgIWItPnRyZWVfZm9ybSk7CiAgIGlmIChhID09IGIpCiAgICAgcmV0dXJu IGZhbHNlOwogCkBAIC0xNjQwLDcgKzE5NjYsOSBAQCBiaXRtYXBfeG9yIChi aXRtYXAgZHN0LCBjb25zdF9iaXRtYXAgYSwKICAgY29uc3QgYml0bWFwX2Vs ZW1lbnQgKmJfZWx0ID0gYi0+Zmlyc3Q7CiAgIGJpdG1hcF9lbGVtZW50ICpk c3RfcHJldiA9IE5VTEw7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWRz dC0+dHJlZV9mb3JtICYmICFhLT50cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9y bSk7CiAgIGdjY19hc3NlcnQgKGRzdCAhPSBhICYmIGRzdCAhPSBiKTsKKwog ICBpZiAoYSA9PSBiKQogICAgIHsKICAgICAgIGJpdG1hcF9jbGVhciAoZHN0 KTsKQEAgLTE2NTYsNyArMTk4NCw4IEBAIGJpdG1hcF94b3IgKGJpdG1hcCBk c3QsIGNvbnN0X2JpdG1hcCBhLAogCSAgQklUTUFQX1dPUkQgaW9yID0gMDsK IAogCSAgaWYgKCFkc3RfZWx0KQotCSAgICBkc3RfZWx0ID0gYml0bWFwX2Vs dF9pbnNlcnRfYWZ0ZXIgKGRzdCwgZHN0X3ByZXYsIGFfZWx0LT5pbmR4KTsK KwkgICAgZHN0X2VsdCA9IGJpdG1hcF9saXN0X2luc2VydF9lbGVtZW50X2Fm dGVyIChkc3QsIGRzdF9wcmV2LAorCQkJCQkJCWFfZWx0LT5pbmR4KTsKIAkg IGVsc2UKIAkgICAgZHN0X2VsdC0+aW5keCA9IGFfZWx0LT5pbmR4OwogCSAg Zm9yIChpeCA9IDA7IGl4IDwgQklUTUFQX0VMRU1FTlRfV09SRFM7IGl4Kysp CkBAIC0xNjkxLDcgKzIwMjAsOCBAQCBiaXRtYXBfeG9yIChiaXRtYXAgZHN0 LCBjb25zdF9iaXRtYXAgYSwKIAkgICAgfQogCiAJICBpZiAoIWRzdF9lbHQp Ci0JICAgIGRzdF9lbHQgPSBiaXRtYXBfZWx0X2luc2VydF9hZnRlciAoZHN0 LCBkc3RfcHJldiwgc3JjLT5pbmR4KTsKKwkgICAgZHN0X2VsdCA9IGJpdG1h cF9saXN0X2luc2VydF9lbGVtZW50X2FmdGVyIChkc3QsIGRzdF9wcmV2LAor CQkJCQkJCXNyYy0+aW5keCk7CiAJICBlbHNlCiAJICAgIGRzdF9lbHQtPmlu ZHggPSBzcmMtPmluZHg7CiAJICBtZW1jcHkgKGRzdF9lbHQtPmJpdHMsIHNy Yy0+Yml0cywgc2l6ZW9mIChkc3RfZWx0LT5iaXRzKSk7CkBAIC0xNzE2LDYg KzIwNDYsOCBAQCBiaXRtYXBfeG9yX2ludG8gKGJpdG1hcCBhLCBjb25zdF9i aXRtYXAKICAgY29uc3QgYml0bWFwX2VsZW1lbnQgKmJfZWx0ID0gYi0+Zmly c3Q7CiAgIGJpdG1hcF9lbGVtZW50ICphX3ByZXYgPSBOVUxMOwogCisgIGdj Y19jaGVja2luZ19hc3NlcnQgKCFhLT50cmVlX2Zvcm0gJiYgIWItPnRyZWVf Zm9ybSk7CisKICAgaWYgKGEgPT0gYikKICAgICB7CiAgICAgICBiaXRtYXBf Y2xlYXIgKGEpOwpAQCAtMTcyNyw3ICsyMDU5LDggQEAgYml0bWFwX3hvcl9p bnRvIChiaXRtYXAgYSwgY29uc3RfYml0bWFwCiAgICAgICBpZiAoIWFfZWx0 IHx8IGJfZWx0LT5pbmR4IDwgYV9lbHQtPmluZHgpCiAJewogCSAgLyogQ29w eSBiX2VsdC4gICovCi0JICBiaXRtYXBfZWxlbWVudCAqZHN0ID0gYml0bWFw X2VsdF9pbnNlcnRfYWZ0ZXIgKGEsIGFfcHJldiwgYl9lbHQtPmluZHgpOwor CSAgYml0bWFwX2VsZW1lbnQgKmRzdCA9IGJpdG1hcF9saXN0X2luc2VydF9l bGVtZW50X2FmdGVyIChhLCBhX3ByZXYsCisJCQkJCQkJCSAgYl9lbHQtPmlu ZHgpOwogCSAgbWVtY3B5IChkc3QtPmJpdHMsIGJfZWx0LT5iaXRzLCBzaXpl b2YgKGRzdC0+Yml0cykpOwogCSAgYV9wcmV2ID0gZHN0OwogCSAgYl9lbHQg PSBiX2VsdC0+bmV4dDsKQEAgLTE3NTUsNyArMjA4OCw3IEBAIGJpdG1hcF94 b3JfaW50byAoYml0bWFwIGEsIGNvbnN0X2JpdG1hcAogCSAgaWYgKGlvcikK IAkgICAgYV9wcmV2ID0gYV9lbHQ7CiAJICBlbHNlCi0JICAgIGJpdG1hcF9l bGVtZW50X2ZyZWUgKGEsIGFfZWx0KTsKKwkgICAgYml0bWFwX2xpc3RfdW5s aW5rX2VsZW1lbnQgKGEsIGFfZWx0KTsKIAkgIGFfZWx0ID0gbmV4dDsKIAl9 CiAgICAgfQpAQCAtMTc3NSw2ICsyMTA4LDggQEAgYml0bWFwX2VxdWFsX3Ag KGNvbnN0X2JpdG1hcCBhLCBjb25zdF9iaQogICBjb25zdCBiaXRtYXBfZWxl bWVudCAqYl9lbHQ7CiAgIHVuc2lnbmVkIGl4OwogCisgIGdjY19jaGVja2lu Z19hc3NlcnQgKCFhLT50cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9ybSk7CisK ICAgZm9yIChhX2VsdCA9IGEtPmZpcnN0LCBiX2VsdCA9IGItPmZpcnN0Owog ICAgICAgIGFfZWx0ICYmIGJfZWx0OwogICAgICAgIGFfZWx0ID0gYV9lbHQt Pm5leHQsIGJfZWx0ID0gYl9lbHQtPm5leHQpCkBAIC0xNzk3LDYgKzIxMzIs OCBAQCBiaXRtYXBfaW50ZXJzZWN0X3AgKGNvbnN0X2JpdG1hcCBhLCBjb25z CiAgIGNvbnN0IGJpdG1hcF9lbGVtZW50ICpiX2VsdDsKICAgdW5zaWduZWQg aXg7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWEtPnRyZWVfZm9ybSAm JiAhYi0+dHJlZV9mb3JtKTsKKwogICBmb3IgKGFfZWx0ID0gYS0+Zmlyc3Qs IGJfZWx0ID0gYi0+Zmlyc3Q7CiAgICAgICAgYV9lbHQgJiYgYl9lbHQ7KQog ICAgIHsKQEAgLTE4MjQsNiArMjE2MSw5IEBAIGJpdG1hcF9pbnRlcnNlY3Rf Y29tcGxfcCAoY29uc3RfYml0bWFwIGEKICAgY29uc3QgYml0bWFwX2VsZW1l bnQgKmFfZWx0OwogICBjb25zdCBiaXRtYXBfZWxlbWVudCAqYl9lbHQ7CiAg IHVuc2lnbmVkIGl4OworCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFhLT50 cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9ybSk7CisKICAgZm9yIChhX2VsdCA9 IGEtPmZpcnN0LCBiX2VsdCA9IGItPmZpcnN0OwogICAgICAgIGFfZWx0ICYm IGJfZWx0OykKICAgICB7CkBAIC0xODU4LDYgKzIxOTgsOSBAQCBiaXRtYXBf aW9yX2FuZF9jb21wbCAoYml0bWFwIGRzdCwgY29uc3RfCiAgIGJpdG1hcF9l bGVtZW50ICpkc3RfcHJldiA9IE5VTEw7CiAgIGJpdG1hcF9lbGVtZW50ICoq ZHN0X3ByZXZfcG5leHQgPSAmZHN0LT5maXJzdDsKIAorICBnY2NfY2hlY2tp bmdfYXNzZXJ0ICghZHN0LT50cmVlX2Zvcm0KKwkJICAgICAgICYmICFhLT50 cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9ybQorCQkgICAgICAgJiYgIWtpbGwt PnRyZWVfZm9ybSk7CiAgIGdjY19hc3NlcnQgKGRzdCAhPSBhICYmIGRzdCAh PSBiICYmIGRzdCAhPSBraWxsKTsKIAogICAvKiBTcGVjaWFsIGNhc2VzLiAg V2UgZG9uJ3QgYm90aGVyIGNoZWNraW5nIGZvciBiaXRtYXBfZXF1YWxfcCAo Yiwga2lsbCkuICAqLwpAQCAtMTk0OCwxNiArMjI5MSwxOCBAQCBiaXRtYXBf aW9yX2FuZF9jb21wbCAoYml0bWFwIGRzdCwgY29uc3RfCiAgIHJldHVybiBj aGFuZ2VkOwogfQogCi0vKiBBIHw9IChGUk9NMSAmIH5GUk9NMikuICBSZXR1 cm4gdHJ1ZSBpZiBBIGNoYW5nZXMuICAqLworLyogQSB8PSAoQiAmIH5DKS4g IFJldHVybiB0cnVlIGlmIEEgY2hhbmdlcy4gICovCiAKIGJvb2wKLWJpdG1h cF9pb3JfYW5kX2NvbXBsX2ludG8gKGJpdG1hcCBhLCBjb25zdF9iaXRtYXAg ZnJvbTEsIGNvbnN0X2JpdG1hcCBmcm9tMikKK2JpdG1hcF9pb3JfYW5kX2Nv bXBsX2ludG8gKGJpdG1hcCBhLCBjb25zdF9iaXRtYXAgYiwgY29uc3RfYml0 bWFwIGMpCiB7CiAgIGJpdG1hcF9oZWFkIHRtcDsKICAgYm9vbCBjaGFuZ2Vk OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFhLT50cmVlX2Zvcm0gJiYg IWItPnRyZWVfZm9ybSAmJiAhYy0+dHJlZV9mb3JtKTsKKwogICBiaXRtYXBf aW5pdGlhbGl6ZSAoJnRtcCwgJmJpdG1hcF9kZWZhdWx0X29ic3RhY2spOwot ICBiaXRtYXBfYW5kX2NvbXBsICgmdG1wLCBmcm9tMSwgZnJvbTIpOworICBi aXRtYXBfYW5kX2NvbXBsICgmdG1wLCBiLCBjKTsKICAgY2hhbmdlZCA9IGJp dG1hcF9pb3JfaW50byAoYSwgJnRtcCk7CiAgIGJpdG1hcF9jbGVhciAoJnRt cCk7CiAKQEAgLTE5NzgsNiArMjMyMyw4IEBAIGJpdG1hcF9pb3JfYW5kX2lu dG8gKGJpdG1hcCBhLCBjb25zdF9iaXQKICAgYm9vbCBjaGFuZ2VkID0gZmFs c2U7CiAgIHVuc2lnbmVkIGl4OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQg KCFhLT50cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9ybSAmJiAhYy0+dHJlZV9m b3JtKTsKKwogICBpZiAoYiA9PSBjKQogICAgIHJldHVybiBiaXRtYXBfaW9y X2ludG8gKGEsIGIpOwogICBpZiAoYml0bWFwX2VtcHR5X3AgKGIpIHx8IGJp dG1hcF9lbXB0eV9wIChjKSkKQEAgLTIwNDQsNiArMjM5MSw3IEBAIGJpdG1h cF9pb3JfYW5kX2ludG8gKGJpdG1hcCBhLCBjb25zdF9iaXQKIH0KIAogLyog Q29tcHV0ZSBoYXNoIG9mIGJpdG1hcCAoZm9yIHB1cnBvc2VzIG9mIGhhc2hp bmcpLiAgKi8KKwogaGFzaHZhbF90CiBiaXRtYXBfaGFzaCAoY29uc3RfYml0 bWFwIGhlYWQpCiB7CkBAIC0yMDUxLDYgKzIzOTksOCBAQCBiaXRtYXBfaGFz aCAoY29uc3RfYml0bWFwIGhlYWQpCiAgIEJJVE1BUF9XT1JEIGhhc2ggPSAw OwogICBpbnQgaXg7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWhlYWQt PnRyZWVfZm9ybSk7CisKICAgZm9yIChwdHIgPSBoZWFkLT5maXJzdDsgcHRy OyBwdHIgPSBwdHItPm5leHQpCiAgICAgewogICAgICAgaGFzaCBePSBwdHIt PmluZHg7CkBAIC0yMDY0LDkgKzI0MTQsMTMgQEAgYml0bWFwX2hhc2ggKGNv bnN0X2JpdG1hcCBoZWFkKQogLyogRGVidWdnaW5nIGZ1bmN0aW9uIHRvIHBy aW50IG91dCB0aGUgY29udGVudHMgb2YgYSBiaXRtYXAuICAqLwogCiBERUJV R19GVU5DVElPTiB2b2lkCi1kZWJ1Z19iaXRtYXBfZmlsZSAoRklMRSAqZmls ZSwgY29uc3RfYml0bWFwIGhlYWQpCitkZWJ1Z19iaXRtYXBfZmlsZSAoRklM RSAqZmlsZSwgYml0bWFwIGhlYWQpCiB7CiAgIGNvbnN0IGJpdG1hcF9lbGVt ZW50ICpwdHI7CisgIGJvb2wgdHJlZV9mb3JtID0gaGVhZC0+dHJlZV9mb3Jt OworCisgIGlmICh0cmVlX2Zvcm0pCisgICAgYml0bWFwX2xpc3RfdmlldyAo aGVhZCk7CiAKICAgZnByaW50ZiAoZmlsZSwgIlxuZmlyc3QgPSAiIEhPU1Rf UFRSX1BSSU5URgogCSAgICIgY3VycmVudCA9ICIgSE9TVF9QVFJfUFJJTlRG ICIgaW5keCA9ICV1XG4iLApAQCAtMjA5OCwxMyArMjQ1MiwxNiBAQCBkZWJ1 Z19iaXRtYXBfZmlsZSAoRklMRSAqZmlsZSwgY29uc3RfYml0CiAKICAgICAg IGZwcmludGYgKGZpbGUsICIgfVxuIik7CiAgICAgfQorCisgIGlmICh0cmVl X2Zvcm0pCisgICAgYml0bWFwX3RyZWVfdmlldyAoaGVhZCk7CiB9CiAKIC8q IEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBkZWJ1Z2dlciB0byBw cmludCB0aGUgY29udGVudHMKICAgIG9mIGEgYml0bWFwLiAgKi8KIAogREVC VUdfRlVOQ1RJT04gdm9pZAotZGVidWdfYml0bWFwIChjb25zdF9iaXRtYXAg aGVhZCkKK2RlYnVnX2JpdG1hcCAoYml0bWFwIGhlYWQpCiB7CiAgIGRlYnVn X2JpdG1hcF9maWxlIChzdGRvdXQsIGhlYWQpOwogfQpAQCAtMjExMywxMSAr MjQ3MCwxNSBAQCBkZWJ1Z19iaXRtYXAgKGNvbnN0X2JpdG1hcCBoZWFkKQog ICAgaXQgZG9lcyBub3QgcHJpbnQgYW55dGhpbmcgYnV0IHRoZSBiaXRzLiAg Ki8KIAogREVCVUdfRlVOQ1RJT04gdm9pZAotYml0bWFwX3ByaW50IChGSUxF ICpmaWxlLCBjb25zdF9iaXRtYXAgaGVhZCwgY29uc3QgY2hhciAqcHJlZml4 LCBjb25zdCBjaGFyICpzdWZmaXgpCitiaXRtYXBfcHJpbnQgKEZJTEUgKmZp bGUsIGJpdG1hcCBoZWFkLCBjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNo YXIgKnN1ZmZpeCkKIHsKICAgY29uc3QgY2hhciAqY29tbWEgPSAiIjsKICAg dW5zaWduZWQgaTsKICAgYml0bWFwX2l0ZXJhdG9yIGJpOworICBib29sIHRy ZWVfZm9ybSA9IGhlYWQtPnRyZWVfZm9ybTsKKworICBpZiAodHJlZV9mb3Jt KQorICAgIGJpdG1hcF9saXN0X3ZpZXcgKGhlYWQpOwogCiAgIGZwdXRzIChw cmVmaXgsIGZpbGUpOwogICBFWEVDVVRFX0lGX1NFVF9JTl9CSVRNQVAgKGhl YWQsIDAsIGksIGJpKQpAQCAtMjEyNiw2ICsyNDg3LDkgQEAgYml0bWFwX3By aW50IChGSUxFICpmaWxlLCBjb25zdF9iaXRtYXAgaAogICAgICAgY29tbWEg PSAiLCAiOwogICAgIH0KICAgZnB1dHMgKHN1ZmZpeCwgZmlsZSk7CisKKyAg aWYgKHRyZWVfZm9ybSkKKyAgICBiaXRtYXBfdHJlZV92aWV3IChoZWFkKTsK IH0KIAogCg== --20cf307f326419d21604d72c3aaf--