From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17901 invoked by alias); 12 Oct 2012 22:19:28 -0000 Received: (qmail 17881 invoked by uid 22791); 12 Oct 2012 22:19:25 -0000 X-SWARE-Spam-Status: No, hits=-6.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD,TW_AV,TW_CF,TW_CP,TW_FN,TW_MX,TW_TM X-Spam-Check-By: sourceware.org Received: from mail-ob0-f175.google.com (HELO mail-ob0-f175.google.com) (209.85.214.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 12 Oct 2012 22:19:05 +0000 Received: by mail-ob0-f175.google.com with SMTP id eq6so3624971obc.20 for ; Fri, 12 Oct 2012 15:19:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=54wHJBpb1gB42B0c9saGI50s3oRLck1AhyQR9d5Z6hA=; b=V3v4je4GRN5881mkl7N5Wmu3hlCzvNRCh6YGj0d4ufwvkF5QbVcgNMD3Ya69Ie13dI 6DmXf2Vw/yyi+fF9T/9uyVE/cwsne36VnzTTESraVFwKZtH2sjhiYfnNK2ZKOmyP8jSx w9FrqiUkYmhv+QemEp/8PK+7yZUfgwEo51UvufWnTxFk7/CrlWXDa3MUsS74f/TpazX3 moyGkSldyfDg2//GTlKvQHDBaHdblPAwQowbSRNFbD65MH3/E0Fbeo9kwNHb0+4q9pyQ o2hlXMcxwFVHPS+87UHhzRcY1e6PZlu1/rCg/wW2j90Pw1Mmm9tphX5AnkcKq103odr0 XOsQ== MIME-Version: 1.0 Received: by 10.60.29.228 with SMTP id n4mr4752441oeh.27.1350080344029; Fri, 12 Oct 2012 15:19:04 -0700 (PDT) Received: by 10.182.176.106 with HTTP; Fri, 12 Oct 2012 15:19:03 -0700 (PDT) In-Reply-To: References: <20120307004630.A503DB21B6@azwildcat.mtv.corp.google.com> <4FF7D1C6.90407@redhat.com> <4FF96D0C.5060406@redhat.com> <4FFBF9F5.6020306@redhat.com> <5008708E.1030109@redhat.com> <506F27AF.3070805@redhat.com> Date: Fri, 12 Oct 2012 22:41:00 -0000 Message-ID: Subject: Re: User directed Function Multiversioning via Function Overloading (issue5752064) From: Sriraman Tallam To: Jason Merrill , Jan Hubicka Cc: Xinliang David Li , mark@codesourcery.com, nathan@codesourcery.com, "H.J. Lu" , Richard Guenther , Uros Bizjak , reply@codereview.appspotmail.com, GCC Patches Content-Type: multipart/mixed; boundary=e89a8ff250ee52fbc304cbe413e9 X-System-Of-Record: true X-Gm-Message-State: ALoCoQmS0Z+3rLoSvo/0rQKwQBj+bs2LqTwlh3zfiQFjDM3Yu3NGg8t4Hhn+kwXBMB8NY8fI49636DVwuftVf6VdHdUS0MyeYtygQ79fMBIHihqu9iIutM4qD02xNhR8NppxAP9EkbldFRNCNf2hcl0kXnHL5yXXy3vR+3wBX2fdzmyTJbp21/1NycltMlRb3cavxyHi3X/A 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: 2012-10/txt/msg01271.txt.bz2 --e89a8ff250ee52fbc304cbe413e9 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 5643 Hi Jason, I have attached the latest patch with more cleanups. Please let me know what you think. Honza, can you please review the cgraph part? Thanks, -Sri. On Wed, Oct 10, 2012 at 4:45 PM, Sriraman Tallam wrote: > Hi Jason, > > I have addressed all your comments and attached the new patch. > > On Fri, Oct 5, 2012 at 11:32 AM, Jason Merrill wrote: >> On 08/24/2012 08:34 PM, Sriraman Tallam wrote: >>> >>> + /* For function versions, their parms and types match >>> + but they are not duplicates. Record function versions >>> + as and when they are found. */ >>> + if (TREE_CODE (fn) == FUNCTION_DECL >>> + && TREE_CODE (method) == FUNCTION_DECL >>> + && (DECL_FUNCTION_SPECIFIC_TARGET (fn) >>> + || DECL_FUNCTION_SPECIFIC_TARGET (method)) >>> + && targetm.target_option.function_versions (fn, method)) >>> + { >>> + targetm.set_version_assembler_name (fn); >>> + targetm.set_version_assembler_name (method); >>> + continue; >>> + } >> >> >> This seems like an odd place to be setting assembler names; better to just >> have the existing mangle_decl_assembler_name hook add the appropriate suffix >> when it's called normally. > > I moved this to mangle_decl_assembler_name. Still, functions may go > from not being a version to then becoming versions after a new > definition is detected. In such cases, I explicitly call mangle_decl > to modify the assembler name. > >> >> >>> + Also, mark this function as needed if it is marked inline but >>> + is a multi-versioned function. */ >> >> >> Why? If it's used, it should be marked needed though the normal process. > > How do I do this? If a versioned function is marked inline, I need to > keep it but it has no explicit callers. How do I mark that it is > needed? > >> >>> + error_at (location_of (DECL_NAME (OVL_CURRENT (fn))), >>> + "Call to multiversioned function %<%D(%A)%> with" >>> + " no default version", DECL_NAME (OVL_CURRENT (fn)), >>> + build_tree_list_vec (*args)); >> >> >> location_of just returns input_location if you ask it for the location of an >> identifier, so you might as well use error with no explicit location. And >> why not print candidates->fn instead of pasting the name/args? Also, >> lowercase "call". > > I removed this since the check already happens elsewhere. > >> >>> + { >>> + tree dispatcher_decl = NULL; >>> + struct cgraph_node *node = cgraph_get_node (fn); >>> + if (node != NULL) >>> + dispatcher_decl = cgraph_get_node (fn)->version_dispatcher_decl; >>> + if (dispatcher_decl == NULL) >>> + { >>> + error_at (input_location, "Call to multiversioned function" >>> + " without a default is not allowed"); >>> + return NULL; >>> + } >>> + retrofit_lang_decl (dispatcher_decl); >>> + gcc_assert (dispatcher_decl != NULL); >>> + fn = dispatcher_decl; >>> + } >> >> >> Let's move this logic into a separate function that returns the dispatcher >> function. > > Done. > >> >>> + /* Both functions must be marked versioned. */ >>> + gcc_assert (DECL_FUNCTION_VERSIONED (cand1->fn) >>> + && DECL_FUNCTION_VERSIONED (cand2->fn)); >> >> >> Why can't you compare a versioned function and a non-versioned one? > > Right, there was a big bug in my code. I have changed this now. This > should address your question. > >> >> The code in joust should go further down in the function, before the >> handling of two declarations of the same function. > > Done. > >> >>> + /* For multiversioned functions, aggregate all the versions here for >>> + generating the dispatcher body later if necessary. */ >>> + >>> + if (TREE_CODE (candidates->fn) == FUNCTION_DECL >>> + && DECL_FUNCTION_VERSIONED (candidates->fn)) >>> + { >>> >>> + VEC (tree, heap) *fn_ver_vec = NULL; >>> + struct z_candidate *ver = candidates; >>> >>> + fn_ver_vec = VEC_alloc (tree, heap, 2); >>> + for (;ver; ver = ver->next) >>> + VEC_safe_push (tree, heap, fn_ver_vec, ver->fn); >>> + gcc_assert (targetm.get_function_versions_dispatcher); >>> + targetm.get_function_versions_dispatcher (fn_ver_vec); >>> + VEC_free (tree, heap, fn_ver_vec); >>> + } >> >> >> This seems to assume that all the functions in the list of candidates are >> versioned, but there might be unrelated functions from different namespaces. >> Also, doing this every time someone calls a versioned function seems like >> the wrong place; I would think it would be better to build up a list of >> versions as you seed declarations, and then use that list to define the >> dispatcher at EOF if it's needed. > > > This was the bug I was referring to earlier. I have moved this to a > separate function. I thought it is better to do this on demand. I have > changed the code so that the aggregation and dispatcher generation > happens exactly once. > > >> >>> + if (TREE_CODE (decl) == FUNCTION_DECL >>> + && DECL_FUNCTION_VERSIONED (decl) >>> + && DECL_ASSEMBLER_NAME_SET_P (decl)) >>> + write_source_name (DECL_ASSEMBLER_NAME (decl)); >>> + else >>> + write_source_name (DECL_NAME (decl)); >> >> >> Again, I think it's better to handle the suffix via >> mangle_decl_assembler_name. > > Removed. > > > Thanks for the comments. Please let me know what you think about the new patch. > > -Sri. > >> >> Jason >> --e89a8ff250ee52fbc304cbe413e9 Content-Type: text/plain; charset=US-ASCII; name="mv_fe_patch_10122012.txt" Content-Disposition: attachment; filename="mv_fe_patch_10122012.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h87uwywd1 Content-length: 103282 T3ZlcnZpZXcgb2YgdGhlIHBhdGNoIHdoaWNoIGFkZHMgc3VwcG9ydCB0byBz cGVjaWZ5IGZ1bmN0aW9uIHZlcnNpb25zLiAgVGhpcyBpcwpvbmx5IGVuYWJs ZWQgZm9yIHRhcmdldCBpMzg2LgoKRXhhbXBsZToKCmludCBmb28gKCk7ICAv KiBEZWZhdWx0IHZlcnNpb24gKi8KaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0KCJhdngscG9wY250IikpKTsvKlNwZWNpYWxpemVkIGZvciBh dnggYW5kIHBvcGNudCAqLwppbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0 YXJnZXQoImFyY2g9Y29yZTIsc3NzZTMiKSkpOy8qU3BlY2lhbGl6ZWQgZm9y IGNvcmUyIGFuZCBzc3NlMyovCgppbnQgbWFpbiAoKQp7CiBpbnQgKCpwKSgp ID0gJmZvbzsKIHJldHVybiBmb28gKCkgKyAoKnApKCk7Cn0KCmludCBmb28g KCkKewogcmV0dXJuIDA7Cn0KCmludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0 KCJhdngscG9wY250IikpKQpmb28gKCkKewogcmV0dXJuIDA7Cn0KCmludCBf X2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmUyLHNzc2UzIikpKQpm b28gKCkKewogcmV0dXJuIDA7Cn0KClRoZSBhYm92ZSBleGFtcGxlIGhhcyBm b28gZGVmaW5lZCAzIHRpbWVzLCBidXQgYWxsIDMgZGVmaW5pdGlvbnMgb2Yg Zm9vIGFyZQpkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgZnVuY3Rp b24uIFRoZSBjYWxsIHRvIGZvbyBpbiBtYWluLCBkaXJlY3RseSBhbmQKdmlh IGEgcG9pbnRlciwgYXJlIGNhbGxzIHRvIHRoZSBtdWx0aS12ZXJzaW9uZWQg ZnVuY3Rpb24gZm9vIHdoaWNoIGlzIGRpc3BhdGNoZWQKdG8gdGhlIHJpZ2h0 IGZvbyBhdCBydW4tdGltZS4KCkZyb250LWVuZCBjaGFuZ2VzOgoKVGhlIGZy b250LWVuZCBjaGFuZ2VzIGFyZSBjYWxscyBhdCBhcHByb3ByaWF0ZSBwbGFj ZXMgdG8gdGFyZ2V0IGhvb2tzIHRoYXQKZGV0ZXJtaW5lIHRoZSBmb2xsb3dp bmc6CgoqIERldGVybWluZSBpZiB0d28gZnVuY3Rpb24gZGVjbHMgd2l0aCB0 aGUgc2FtZSBzaWduYXR1cmUgYXJlIHZlcnNpb25zLgoqIERldGVybWluZSB0 aGUgYXNzZW1ibGVyIG5hbWUgb2YgYSBmdW5jdGlvbiB2ZXJzaW9uLgoqIEdl bmVyYXRlIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uIGZvciBhIHNldCBvZiBm dW5jdGlvbiB2ZXJzaW9ucy4KKiBDb21wYXJlIHZlcnNpb25zIHRvIHNlZSBp ZiBvbmUgaGFzIGEgaGlnaGVyIHByaW9yaXR5IG92ZXIgdGhlIG90aGVyLgoK QWxsIHRoZSBpbXBsZW1lbnRhdGlvbiBoYXBwZW5zIGluIHRoZSB0YXJnZXQt c3BlY2lmaWMgY29uZmlnL2kzODYvaTM4Ni5jLgoKV2hhdCBkb2VzIHRoZSBw YXRjaCBkbz8KCiogVHJhY2tpbmcgZGVjbHMgdGhhdCBjb3JyZXNwb25kIHRv IGZ1bmN0aW9uIHZlcnNpb25zIG9mIGZ1bmN0aW9uCm5hbWUsIHNheSAiZm9v IjoKCldoZW4gdGhlIGZyb250LWVuZCBzZWVzIG1vcmUgdGhhbiBvbmUgZGVj bCBmb3IgImZvbyIsIGl0IGNhbGxzIGEgdGFyZ2V0IGhvb2sgdG8KZGV0ZXJt aW5lIGlmIHRoZXkgYXJlIHZlcnNpb25zLiBUbyBwcmV2ZW50IGR1cGxpY2F0 ZSBkZWZpbml0aW9uIGVycm9ycyB3aXRoIG90aGVyCiB2ZXJzaW9ucyBvZiAi Zm9vIiwgImRlY2xzX21hdGNoIiBmdW5jdGlvbiBpbiBjcC9kZWNsLmMgaXMg bWFkZSB0byByZXR1cm4gZmFsc2UKIHdoZW4gMiBkZWNscyBoYXZlIGFyZSBk ZWVtZWQgdmVyc2lvbnMgYnkgdGhlIHRhcmdldC4gVGhpcyB3aWxsIG1ha2Ug YWxsIGZ1bmN0aW9uCnZlcnNpb25zIG9mICJmb28iIHRvIGJlIGFkZGVkIHRv IHRoZSBvdmVybG9hZCBsaXN0IG9mICJmb28iLgoKKiBDaGFuZ2UgdGhlIGFz c2VtYmxlciBuYW1lcyBvZiB0aGUgZnVuY3Rpb24gdmVyc2lvbnMuCgpGb3Ig aTM4NiwgdGhlIHRhcmdldCBjaGFuZ2VzIHRoZSBhc3NlbWJsZXIgbmFtZXMg b2YgdGhlIGZ1bmN0aW9uIHZlcnNpb25zIGJ5CiBzdWZmaXhpbmcgdGhlIHNv cnRlZCBsaXN0IG9mIGFyZ3MgdG8gInRhcmdldCIgdG8gdGhlIGZ1bmN0aW9u IG5hbWUgb2YgImZvbyIuIEZvcgpleGFtcGxlLCBoZSBhc3NlbWJsZXIgbmFt ZSBvZiAidm9pZCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoInNz ZTQiKSkpIiB3aWxsCmJlY29tZSBfWjNmb292LnNzZTQuICBUaGUgdGFyZ2V0 IGhvb2sgbWFuZ2xlX2RlY2xfYXNzZW1ibGVyX25hbWUgaXMgdXNlZCBmb3Ig dGhpcy4KCiogT3ZlcmxvYWQgcmVzb2x1dGlvbjoKCiBGdW5jdGlvbiAiYnVp bGRfb3Zlcl9jYWxsIiBpbiBjcC9jYWxsLmMgc2VlcyBhIGNhbGwgdG8gZnVu Y3Rpb24KImZvbyIsIHdoaWNoIGlzIG11bHRpLXZlcnNpb25lZC4gVGhlIG92 ZXJsb2FkIHJlc29sdXRpb24gaGFwcGVucyBpbgpmdW5jdGlvbiAiam91c3Qi IGluICJjcC9jYWxsLmMiLiBIZXJlLCB0aGUgY2FsbCB0byAiZm9vIiBoYXMg YWxsCnBvc3NpYmxlIHZlcnNpb25zIG9mICJmb28iIGFzIGNhbmRpZGF0ZXMu IEFsbCB0aGUgY2FuZGlkYXRlcyBvZiAiZm9vIiBhcmUKc3RvcmVkIGluIHRo ZSBjZ3JhcGggZGF0YSBzdHJ1Y3R1cmVzLiBFYWNoIHZlcnNpb24gb2YgZm9v IGlzIGNoYWluZWQgaW4gYSAKZG91Ymx5LWxpbmtlZCBsaXN0IHdpdGggdGhl IGRlZmF1bHQgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGVsZW1lbnQuICBUaGlz IGFsbG93cwphbnkgcGFzcyB0byBhY2Nlc3MgYWxsIHRoZSBzZW1hbnRpY2Fs bHkgaWRlbnRpY2FsIHZlcnNpb25zLiBBIGNhbGwgdG8gYQptdWx0aS12ZXJz aW9uZWQgZnVuY3Rpb24gd2lsbCBiZSByZXBsYWNlZCBieSBhIGNhbGwgdG8g YSBkaXNwYXRjaGVyIGZ1bmN0aW9uLApkZXRlcm1pbmVkIGJ5IGEgdGFyZ2V0 IGhvb2ssIHRvIGV4ZWN1dGUgdGhlIHJpZ2h0IGZ1bmN0aW9uIHZlcnNpb24g YXQgcnVuLXRpbWUuCgpPcHRpbWl6YXRpb24gdG8gZGlyZWN0bHkgY2FsbCBh IHZlcnNpb24gd2hlbiBwb3NzaWJsZToKQWxzbywgaW4gam91c3QsIHdoZXJl IG92ZXJsb2FkIHJlc29sdXRpb24gaGFwcGVucywgYSBtdWx0aXZlcnNpb25l ZCBmdW5jdGlvbgpyZXNvbHV0aW9uIGlzIG1hZGUgdG8gcmV0dXJuIHRoZSBt b3N0IHNwZWNpYWxpemVkIHZlcnNpb24uICBUaGlzIGlzIHRoZSB2ZXJzaW9u CnRoYXQgd2lsbCBiZSBjaGVja2VkIGZvciBkaXNwYXRjaGluZyBmaXJzdCBh bmQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdGFyZ2V0LgpOb3csIGlmIHRoZSBj YWxsZXIgY2FuIGlubGluZSB0aGlzIGZ1bmN0aW9uIHZlcnNpb24gdGhlbiBh IGRpcmVjdCBjYWxsIGlzIG1hZGUKdG8gdGhpcyBmdW5jdGlvbiB2ZXJzaW9u IHJhdGhlciB0aGFuIGdvIHRocm91Z2ggdGhlIGRpc3BhdGNoZXIuIFdoZW4g YSBkaXJlY3QKY2FsbCBjYW5ub3QgYmUgbWFkZSwgYSBjYWxsIHRvIHRoZSBk aXNwYXRjaGVyIGZ1bmN0aW9uIGlzIGNyZWF0ZWQuCgoqIENyZWF0aW5nIHRo ZSBkaXNwYXRjaGVyIGJvZHkuCgpUaGUgZGlzcGF0Y2hlciBib2R5LCBjYWxs ZWQgdGhlIHJlc29sdmVyIGlzIG1hZGUgb25seSB3aGVuIHRoZXJlIGlzIGEg Y2FsbCB0byBhCm11bHRpdmVyc2lvbmVkIGZ1bmN0aW9uIGRpc3BhdGNoZXIg b3IgdGhlIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbiBpcyB0YWtlbi4gVGhpcwpp cyBnZW5lcmF0ZWQgZHVyaW5nIGJ1aWxkX2NncmFwaF9lZGdlcyBmb3IgYSBj YWxsIG9yIGNncmFwaF9tYXJrX2FkZHJlc3NfdGFrZW4KZm9yIGEgcG9pbnRl ciByZWZlcmVuY2UuIFRoaXMgaXMgZG9uZSBieSBhbm90aGVyIHRhcmdldCBo b29rLgoKKiBEaXNwYXRjaCBvcmRlcmluZy4KClRoZSBvcmRlciBpbiB3aGlj aCB0aGUgZnVuY3Rpb24gdmVyc2lvbnMgYXJlIGNoZWNrZWQgZHVyaW5nIGRp c3BhdGNoIGlzIGJhc2VkCm9uIGEgcHJpb3JpdHkgdmFsdWUgYXNzaWduZWQg Zm9yIHRoZSBJU0EgdGhhdCBpcyBjYXRlcmVkLiBNb3JlIHNwZWNpYWxpemVk IAp2ZXJzaW9ucyBhcmUgY2hlY2tlZCBmb3IgZGlzcGF0Y2hpbmcgZmlyc3Qu ICBUaGlzIGlzIHRvIG1pdGlnYXRlIHRoZSBhbWJpZ3VpdHkKdGhhdCBjYW4g YXJpc2Ugd2hlbiBtb3JlIHRoYW4gb25lIGZ1bmN0aW9uIHZlcnNpb24gaXMg dmFsaWQgZm9yIGV4ZWN1dGlvbiBvbgphIHBhcnRpY3VsYXIgcGxhdGZvcm0u ICBUaGlzIGlzIG5vdCBhIHBlcmZlY3Qgc29sdXRpb24gYW5kIGluIGZ1dHVy ZSwgdGhlIHVzZXIKc2hvdWxkIGJlIGFsbG93ZWQgdG8gYXNzaWduIGEgZGlz cGF0Y2hpbmcgcHJpb3JpdHkgdmFsdWUgdG8gZWFjaCB2ZXJzaW9uLgoKCSog ZG9jL3RtLnRleGkuaW4gKFRBUkdFVF9PUFRJT05fRlVOQ1RJT05fVkVSU0lP TlMpOiBOZXcgaG9vayBkZXNjcmlwdGlvbi4KCSogKFRBUkdFVF9DT01QQVJF X1ZFUlNJT05fUFJJT1JJVFkpOiBOZXcgaG9vayBkZXNjcmlwdGlvbi4KCSog KFRBUkdFVF9HRVRfRlVOQ1RJT05fVkVSU0lPTlNfRElTUEFUQ0hFUik6IE5l dyBob29rIGRlc2NyaXB0aW9uLgoJKiAoVEFSR0VUX0dFTkVSQVRFX1ZFUlNJ T05fRElTUEFUQ0hFUl9CT0RZKTogTmV3IGhvb2sgZGVzY3JpcHRpb24uCgkq IGRvYy90bS50ZXhpOiBSZWdlbmVyYXRlLgoJKiBjZ3JhcGhidWlsZC5jIChi dWlsZF9jZ3JhcGhfZWRnZXMpOiBHZW5lcmF0ZSBib2R5IG9mIG11bHRpdmVy c2lvbgoJZnVuY3Rpb24gZGlzcGF0Y2hlci4KCSogYy1mYW1pbHkvYy1jb21t b24uYyAoaGFuZGxlX3RhcmdldF9hdHRyaWJ1dGUpOiBXYXJuIGZvciBpbnZh bGlkIGF0dHJpYnV0ZXMuCgkqIHRhcmdldC5kZWYgKGNvbXBhcmVfdmVyc2lv bl9wcmlvcml0eSk6IE5ldyB0YXJnZXQgaG9vay4KCSogKGdlbmVyYXRlX3Zl cnNpb25fZGlzcGF0Y2hlcl9ib2R5KTogTmV3IHRhcmdldCBob29rLgoJKiAo Z2V0X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNoZXIpOiBOZXcgdGFyZ2V0 IGhvb2suCgkqIChmdW5jdGlvbl92ZXJzaW9ucyk6IE5ldyB0YXJnZXQgaG9v ay4KCSogY2dyYXBoLmMgKGNncmFwaF9tYXJrX2FkZHJlc3NfdGFrZW5fbm9k ZSk6IEdlbmVyYXRlIGJvZHkgb2YgbXVsdGl2ZXJzaW9uCglmdW5jdGlvbiBk aXNwYXRjaGVyLgoJKiBjZ3JhcGguaCAoY2dyYXBoX25vZGUpOiBOZXcgbWVt YmVycyBmdW5jdGlvbl92ZXJzaW9uLAoJZGlzcGF0Y2hlcl9mdW5jdGlvbi4K CSogdHJlZS5oIChERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCk6IE5ldyBtYWNy by4KCSh0cmVlX2Z1bmN0aW9uX2RlY2wpOiBOZXcgYml0LWZpZWxkIHZlcnNp b25lZF9mdW5jdGlvbi4KCSogdGVzdHN1aXRlL2crKy5kZy9tdjEuQzogTmV3 IHRlc3QuCgkqIHRlc3RzdWl0ZS9nKysuZGcvbXYyLkM6IE5ldyB0ZXN0LgoJ KiB0ZXN0c3VpdGUvZysrLmRnL212My5DOiBOZXcgdGVzdC4KCSogdGVzdHN1 aXRlL2crKy5kZy9tdjQuQzogTmV3IHRlc3QuCgkqIGNwL2NsYXNzLmM6Cgko YWRkX21ldGhvZCk6IENoYW5nZSBhc3NlbWJsZXIgbmFtZXMgb2YgZnVuY3Rp b24gdmVyc2lvbnMuCgkocmVzb2x2ZV9hZGRyZXNzX29mX292ZXJsb2FkZWRf ZnVuY3Rpb24pOiBTYXZlIGFsbCBmdW5jdGlvbgoJdmVyc2lvbiBjYW5kaWRh dGVzLiBDcmVhdGUgZGlzcGF0Y2hlciBkZWNsIGFuZCByZXR1cm4gYWRkcmVz cyBvZgoJZGlzcGF0Y2hlciBpbnN0ZWFkLgoJKiBjcC9kZWNsLmMgKGRlY2xz X21hdGNoKTogTWFrZSBkZWNscyB1bm1hdGNoZWQgZm9yIHZlcnNpb25lZAoJ ZnVuY3Rpb25zLgoJKGR1cGxpY2F0ZV9kZWNscyk6IFJlbW92ZSBhbWJpZ3Vp dHkgZm9yIHZlcnNpb25lZCBmdW5jdGlvbnMuIAoJKGN4eF9jb21kYXRfZ3Jv dXApOiBNYWtlIGNvbWRhdCBncm91cCBvZiB2ZXJzaW9uZWQgZnVuY3Rpb25z IGJlIHRoZQoJc2FtZS4KCSogY3AvZXJyb3IuYyAoZHVtcF9leGNlcHRpb25f c3BlYyk6IER1bXAgYXNzZW1ibGVyIG5hbWUgZm9yIGZ1bmN0aW9uCgl2ZXJz aW9ucy4KCSogY3Avc2VtYW50aWNzLmMgKGV4cGFuZF9vcl9kZWZlcl9mbl8x KTogTWFyayBhcyBuZWVkZWQgdmVyc2lvbmVkCglmdW5jdGlvbnMgdGhhdCBh cmUgYWxzbyBtYXJrZWQgaW5saW5lLgoJKiBjcC9kZWNsMi5jOihjaGVja19j bGFzc2ZuKTogQ2hlY2sgYXR0cmlidXRlcyBvZiB2ZXJzaW9uZWQgZnVuY3Rp b25zCglmb3IgbWF0Y2guCgkqIGNwL2NhbGwuYzogKGJ1aWxkX25ld19mdW5j dGlvbl9jYWxsKTogQ2hlY2sgaWYgdmVyc2lvbmVkIGZ1bmN0aW9ucwoJaGF2 ZSBhIGRlZmF1bHQgdmVyc2lvbi4KCShidWlsZF9vdmVyX2NhbGwpOiBNYWtl IGNhbGxzIHRvIG11bHRpdmVyc2lvbmVkIGZ1bmN0aW9ucwoJdG8gY2FsbCB0 aGUgZGlzcGF0Y2hlci4KCShqb3VzdCk6IEZvciBjYWxscyB0byBtdWx0aS12 ZXJzaW9uZWQgZnVuY3Rpb25zLCBtYWtlIHRoZSBtb3N0CglzcGVjaWFsaXpl ZCBmdW5jdGlvbiB2ZXJzaW9uIHdpbi4KCSh0b3VybmV5KTogR2VuZXJhdGUg ZGlzcGF0Y2hlciBkZWNsIGZvciBmdW5jdGlvbiB2ZXJzaW9ucy4KCShnZXRf ZnVuY3Rpb25fdmVyc2lvbl9kaXNwYXRjaGVyKTogTmV3IGZ1bmN0aW9uLgoJ KGdlbmVyYXRlX2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNoZXIpOiBOZXcg ZnVuY3Rpb24uCgkqIE1ha2VmaWxlLmluOiBBZGQgbXVsdGl2ZXJzaW9uLm8K CSogY29uZmlnL2kzODYvaTM4Ni5jIChhZGRfY29uZGl0aW9uX3RvX2JiKTog TmV3IGZ1bmN0aW9uLgoJKGdldF9idWlsdGluX2NvZGVfZm9yX3ZlcnNpb24p OiBOZXcgZnVuY3Rpb24uCgkoaXg4Nl9jb21wYXJlX3ZlcnNpb25fcHJpb3Jp dHkpOiBOZXcgZnVuY3Rpb24uCgkoZmVhdHVyZV9jb21wYXJlKTogTmV3IGZ1 bmN0aW9uLgoJKGRpc3BhdGNoX2Z1bmN0aW9uX3ZlcnNpb25zKTogTmV3IGZ1 bmN0aW9uLgoJKiAoaXg4Nl9mdW5jdGlvbl92ZXJzaW9ucyk6IE5ldyBmdW5j dGlvbi4KCSogKGF0dHJfc3RyY21wKTogTmV3IGZ1bmN0aW9uLgoJKiAoc29y dGVkX2F0dHJfc3RyaW5nKTogTmV3IGZ1bmN0aW9uLgoJKiAoaXg4Nl9tYW5n bGVfZnVuY3Rpb25fdmVyc2lvbl9hc3NlbWJsZXJfbmFtZSk6IE5ldyBmdW5j dGlvbi4KCSogKGl4ODZfbWFuZ2xlX2RlY2xfYXNzZW1ibGVyX25hbWUpOiBO ZXcgZnVuY3Rpb24uCgkqIChtYWtlX25hbWUpOiBOZXcgZnVuY3Rpb24uCgkq IChtYWtlX2Rpc3BhdGNoZXJfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCSogKGlz X2Z1bmN0aW9uX2RlZmF1bHRfdmVyc2lvbik6IE5ldyBmdW5jdGlvbi4KCSog KGl4ODZfZ2V0X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNoZXIpOiBOZXcg ZnVuY3Rpb24uCgkqIChtYWtlX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4K CSogKG1ha2VfcmVzb2x2ZXJfZnVuYyk6IE5ldyBmdW5jdGlvbi4KCSogKGl4 ODZfZ2VuZXJhdGVfdmVyc2lvbl9kaXNwYXRjaGVyX2JvZHkpOiBOZXcgZnVu Y3Rpb24uCgkqIChUQVJHRVRfQ09NUEFSRV9WRVJTSU9OX1BSSU9SSVRZKTog TmV3IG1hY3JvLgoJKiAoVEFSR0VUX0dFVF9GVU5DVElPTl9WRVJTSU9OU19E SVNQQVRDSEVSKTogTmV3IG1hY3JvLgoJKiAoVEFSR0VUX0dFTkVSQVRFX1ZF UlNJT05fRElTUEFUQ0hFUl9CT0RZKTogTmV3IG1hY3JvLgoJKiAoVEFSR0VU X09QVElPTl9GVU5DVElPTl9WRVJTSU9OUyk6IE5ldyBtYWNyby4KCSogKFRB UkdFVF9NQU5HTEVfREVDTF9BU1NFTUJMRVJfTkFNRSk6IE5ldyBtYWNyby4K CkluZGV4OiBnY2MvZG9jL3RtLnRleGkKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gZ2NjL2RvYy90bS50ZXhpCShyZXZpc2lvbiAxOTIzNzgpCisrKyBn Y2MvZG9jL3RtLnRleGkJKHdvcmtpbmcgY29weSkKQEAgLTk5MTMsNiArOTkx MywxMSBAQCBjaGFuZ2VkIHZpYSB0aGUgb3B0aW1pemUgYXR0cmlidXRlIG9y IHByYWdtYSwgc2VlCiBAY29kZXtUQVJHRVRfT1ZFUlJJREVfT1BUSU9OU19B RlRFUl9DSEFOR0V9CiBAZW5kIGRlZnR5cGVmbgogCitAZGVmdHlwZWZuIHtU YXJnZXQgSG9va30gYm9vbCBUQVJHRVRfT1BUSU9OX0ZVTkNUSU9OX1ZFUlNJ T05TICh0cmVlIEB2YXJ7ZGVjbDF9LCB0cmVlIEB2YXJ7ZGVjbDJ9KQorVGhp cyB0YXJnZXQgaG9vayByZXR1cm5zIEBjb2Rle3RydWV9IGlmIEB2YXJ7Rk4x fSBhbmQgQHZhcntGTjJ9IGFyZQordmVyc2lvbnMgb2YgdGhlIHNhbWUgZnVu Y3Rpb24uCitAZW5kIGRlZnR5cGVmbgorCiBAZGVmdHlwZWZuIHtUYXJnZXQg SG9va30gYm9vbCBUQVJHRVRfQ0FOX0lOTElORV9QICh0cmVlIEB2YXJ7Y2Fs bGVyfSwgdHJlZSBAdmFye2NhbGxlZX0pCiBUaGlzIHRhcmdldCBob29rIHJl dHVybnMgQGNvZGV7ZmFsc2V9IGlmIHRoZSBAdmFye2NhbGxlcn0gZnVuY3Rp b24KIGNhbm5vdCBpbmxpbmUgQHZhcntjYWxsZWV9LCBiYXNlZCBvbiB0YXJn ZXQgc3BlY2lmaWMgaW5mb3JtYXRpb24uICBCeQpAQCAtMTA5MzAsNiArMTA5 MzUsMjcgQEAgVGhlIHJlc3VsdCBpcyBhbm90aGVyIHRyZWUgY29udGFpbmlu ZyBhIHNpbXBsaWZpZWQKIGNhbGwncyByZXN1bHQuICBJZiBAdmFye2lnbm9y ZX0gaXMgdHJ1ZSB0aGUgdmFsdWUgd2lsbCBiZSBpZ25vcmVkLgogQGVuZCBk ZWZ0eXBlZm4KIAorQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IGludCBUQVJH RVRfQ09NUEFSRV9WRVJTSU9OX1BSSU9SSVRZICh0cmVlIEB2YXJ7ZGVjbDF9 LCB0cmVlIEB2YXJ7ZGVjbDJ9KQorVGhpcyBob29rIGlzIHVzZWQgdG8gY29t cGFyZSB0aGUgdGFyZ2V0IGF0dHJpYnV0ZXMgaW4gdHdvIGZ1bmN0aW9ucyB0 bworZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbidzIGZlYXR1cmVzIGdldCBo aWdoZXIgcHJpb3JpdHkuICBUaGlzIGlzIHVzZWQKK2R1cmluZyBtdWx0aS12 ZXJzaW9uaW5nIHRvIGZpZ3VyZSBvdXQgdGhlIG9yZGVyIG9mIGRpc3BhdGNo aW5nLiBAdmFye2RlY2wxfQorYW5kIEB2YXJ7ZGVjbDJ9IGFyZSB0aGUgdHdv IGZ1bmN0aW9uIGRlY2xzIHRoYXQgd2lsbCBiZSBjb21wYXJlZC4KK0BlbmQg ZGVmdHlwZWZuCisKK0BkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB0cmVlIFRB UkdFVF9HRVRfRlVOQ1RJT05fVkVSU0lPTlNfRElTUEFUQ0hFUiAodm9pZCAq QHZhcnthcmdsaXN0fSkKK1RoaXMgaG9vayBpcyB1c2VkIHRvIGdldCB0aGUg ZGlzcGF0Y2hlciBmdW5jdGlvbiBmb3IgYSBzZXQgb2YgZnVuY3Rpb24KK3Zl cnNpb25zLiAgVGhlIGRpc3BhdGNoZXIgZnVuY3Rpb24gaXMgY2FsbGVkIHRv IGludm9rZSB0aGUgcmlnbnQgZnVuY3Rpb24KK3ZlcnNpb24gYXQgcnVuLXRp bWUuIEB2YXJ7YXJnbGlzdH0gaXMgdGhlIHZlY3RvciBvZiBmdW5jdGlvbiB2 ZXJzaW9ucwordGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgZGlzcGF0 Y2guCitAZW5kIGRlZnR5cGVmbgorCitAZGVmdHlwZWZuIHtUYXJnZXQgSG9v a30gdHJlZSBUQVJHRVRfR0VORVJBVEVfVkVSU0lPTl9ESVNQQVRDSEVSX0JP RFkgKHZvaWQgKkB2YXJ7YXJnfSkKK1RoaXMgaG9vayBpcyB1c2VkIHRvIGdl bmVyYXRlIHRoZSBkaXNwYXRjaGVyIGxvZ2ljIHRvIGludm9rZSB0aGUgcmln aHQKK2Z1bmN0aW9uIHZlcnNpb24gYXQgcnVudGltZSBmb3IgYSBnaXZlbiBz ZXQgb2YgZnVuY3Rpb24gdmVyc2lvbnMuCitAdmFye2FyZ30gcG9pbnRzIHRv IHRoZSBjYWxsZ3JhcGggbm9kZSBvZiB0aGUgZGlzcGF0Y2hlciBmdW5jdGlv biB3aG9zZQorYm9keSBtdXN0IGJlIGdlbmVyYXRlZC4KK0BlbmQgZGVmdHlw ZWZuCisKIEBkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB7Y29uc3QgY2hhciAq fSBUQVJHRVRfSU5WQUxJRF9XSVRISU5fRE9MT09QIChjb25zdF9ydHggQHZh cntpbnNufSkKIAogVGFrZSBhbiBpbnN0cnVjdGlvbiBpbiBAdmFye2luc259 IGFuZCByZXR1cm4gTlVMTCBpZiBpdCBpcyB2YWxpZCB3aXRoaW4gYQpJbmRl eDogZ2NjL2RvYy90bS50ZXhpLmluCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy9kb2MvdG0udGV4aS5pbgkocmV2aXNpb24gMTkyMzc4KQorKysg Z2NjL2RvYy90bS50ZXhpLmluCSh3b3JraW5nIGNvcHkpCkBAIC05NzgyLDYg Kzk3ODIsMTEgQEAgY2hhbmdlZCB2aWEgdGhlIG9wdGltaXplIGF0dHJpYnV0 ZSBvciBwcmFnbWEsIHNlZQogQGNvZGV7VEFSR0VUX09WRVJSSURFX09QVElP TlNfQUZURVJfQ0hBTkdFfQogQGVuZCBkZWZ0eXBlZm4KIAorQGhvb2sgVEFS R0VUX09QVElPTl9GVU5DVElPTl9WRVJTSU9OUworVGhpcyB0YXJnZXQgaG9v ayByZXR1cm5zIEBjb2Rle3RydWV9IGlmIEB2YXJ7Rk4xfSBhbmQgQHZhcntG TjJ9IGFyZQordmVyc2lvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24uCitAZW5k IGRlZnR5cGVmbgorCiBAaG9vayBUQVJHRVRfQ0FOX0lOTElORV9QCiBUaGlz IHRhcmdldCBob29rIHJldHVybnMgQGNvZGV7ZmFsc2V9IGlmIHRoZSBAdmFy e2NhbGxlcn0gZnVuY3Rpb24KIGNhbm5vdCBpbmxpbmUgQHZhcntjYWxsZWV9 LCBiYXNlZCBvbiB0YXJnZXQgc3BlY2lmaWMgaW5mb3JtYXRpb24uICBCeQpA QCAtMTA3ODgsNiArMTA3OTMsMjcgQEAgVGhlIHJlc3VsdCBpcyBhbm90aGVy IHRyZWUgY29udGFpbmluZyBhIHNpbXBsaWZpZWQKIGNhbGwncyByZXN1bHQu ICBJZiBAdmFye2lnbm9yZX0gaXMgdHJ1ZSB0aGUgdmFsdWUgd2lsbCBiZSBp Z25vcmVkLgogQGVuZCBkZWZ0eXBlZm4KIAorQGhvb2sgVEFSR0VUX0NPTVBB UkVfVkVSU0lPTl9QUklPUklUWQorVGhpcyBob29rIGlzIHVzZWQgdG8gY29t cGFyZSB0aGUgdGFyZ2V0IGF0dHJpYnV0ZXMgaW4gdHdvIGZ1bmN0aW9ucyB0 bworZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbidzIGZlYXR1cmVzIGdldCBo aWdoZXIgcHJpb3JpdHkuICBUaGlzIGlzIHVzZWQKK2R1cmluZyBtdWx0aS12 ZXJzaW9uaW5nIHRvIGZpZ3VyZSBvdXQgdGhlIG9yZGVyIG9mIGRpc3BhdGNo aW5nLiBAdmFye2RlY2wxfQorYW5kIEB2YXJ7ZGVjbDJ9IGFyZSB0aGUgdHdv IGZ1bmN0aW9uIGRlY2xzIHRoYXQgd2lsbCBiZSBjb21wYXJlZC4KK0BlbmQg ZGVmdHlwZWZuCisKK0Bob29rIFRBUkdFVF9HRVRfRlVOQ1RJT05fVkVSU0lP TlNfRElTUEFUQ0hFUgorVGhpcyBob29rIGlzIHVzZWQgdG8gZ2V0IHRoZSBk aXNwYXRjaGVyIGZ1bmN0aW9uIGZvciBhIHNldCBvZiBmdW5jdGlvbgordmVy c2lvbnMuICBUaGUgZGlzcGF0Y2hlciBmdW5jdGlvbiBpcyBjYWxsZWQgdG8g aW52b2tlIHRoZSByaWdudCBmdW5jdGlvbgordmVyc2lvbiBhdCBydW4tdGlt ZS4gQHZhcnthcmdsaXN0fSBpcyB0aGUgdmVjdG9yIG9mIGZ1bmN0aW9uIHZl cnNpb25zCit0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBkaXNwYXRj aC4KK0BlbmQgZGVmdHlwZWZuCisKK0Bob29rIFRBUkdFVF9HRU5FUkFURV9W RVJTSU9OX0RJU1BBVENIRVJfQk9EWQorVGhpcyBob29rIGlzIHVzZWQgdG8g Z2VuZXJhdGUgdGhlIGRpc3BhdGNoZXIgbG9naWMgdG8gaW52b2tlIHRoZSBy aWdodAorZnVuY3Rpb24gdmVyc2lvbiBhdCBydW50aW1lIGZvciBhIGdpdmVu IHNldCBvZiBmdW5jdGlvbiB2ZXJzaW9ucy4KK0B2YXJ7YXJnfSBwb2ludHMg dG8gdGhlIGNhbGxncmFwaCBub2RlIG9mIHRoZSBkaXNwYXRjaGVyIGZ1bmN0 aW9uIHdob3NlCitib2R5IG11c3QgYmUgZ2VuZXJhdGVkLgorQGVuZCBkZWZ0 eXBlZm4KKwogQGhvb2sgVEFSR0VUX0lOVkFMSURfV0lUSElOX0RPTE9PUAog CiBUYWtlIGFuIGluc3RydWN0aW9uIGluIEB2YXJ7aW5zbn0gYW5kIHJldHVy biBOVUxMIGlmIGl0IGlzIHZhbGlkIHdpdGhpbiBhCkluZGV4OiBnY2MvY2dy YXBoYnVpbGQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY2dy YXBoYnVpbGQuYwkocmV2aXNpb24gMTkyMzc4KQorKysgZ2NjL2NncmFwaGJ1 aWxkLmMJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAgYWxvbmcg d2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUK ICNpbmNsdWRlICJpcGEtdXRpbHMuaCIKICNpbmNsdWRlICJleGNlcHQuaCIK ICNpbmNsdWRlICJpcGEtaW5saW5lLmgiCisjaW5jbHVkZSAidGFyZ2V0Lmgi CiAKIC8qIENvbnRleHQgb2YgcmVjb3JkX3JlZmVyZW5jZS4gICovCiBzdHJ1 Y3QgcmVjb3JkX3JlZmVyZW5jZV9jdHgKQEAgLTI4OCw3ICsyODksNiBAQCBt YXJrX3N0b3JlIChnaW1wbGUgc3RtdCwgdHJlZSB0LCB2b2lkICpkYXRhKQog ICAgICB9CiAgIHJldHVybiBmYWxzZTsKIH0KLQogLyogQ3JlYXRlIGNncmFw aCBlZGdlcyBmb3IgZnVuY3Rpb24gY2FsbHMuCiAgICBBbHNvIGxvb2sgZm9y IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGhhdmluZyBhZGRyZXNzZXMgdGFr ZW4uICAqLwogCkBAIC0zMTcsOCArMzE3LDIyIEBAIGJ1aWxkX2NncmFwaF9l ZGdlcyAodm9pZCkKIAkJCQkJCQkgYmIpOwogCSAgICAgIGRlY2wgPSBnaW1w bGVfY2FsbF9mbmRlY2wgKHN0bXQpOwogCSAgICAgIGlmIChkZWNsKQotCQlj Z3JhcGhfY3JlYXRlX2VkZ2UgKG5vZGUsIGNncmFwaF9nZXRfY3JlYXRlX25v ZGUgKGRlY2wpLAotCQkJCSAgICBzdG10LCBiYi0+Y291bnQsIGZyZXEpOwor CQl7CisJCSAgc3RydWN0IGNncmFwaF9ub2RlICpjYWxsZWUgPSBjZ3JhcGhf Z2V0X2NyZWF0ZV9ub2RlIChkZWNsKTsKKwkgICAgICAgICAgLyogSWYgYSBj YWxsIHRvIGEgbXVsdGl2ZXJzaW9uZWQgZnVuY3Rpb24gZGlzcGF0Y2hlciBp cworCQkgICAgIGZvdW5kLCBnZW5lcmF0ZSB0aGUgYm9keSB0byBkaXNwYXRj aCB0aGUgcmlnaHQgZnVuY3Rpb24KKwkJICAgICBhdCBydW4tdGltZS4gICov CisJCSAgaWYgKGNhbGxlZS0+ZGlzcGF0Y2hlcl9mdW5jdGlvbikKKwkJICAg IHsKKwkJICAgICAgdHJlZSByZXNvbHZlcl9kZWNsOworCQkgICAgICBnY2Nf YXNzZXJ0IChjYWxsZWUtPmZ1bmN0aW9uX3ZlcnNpb24ubmV4dCk7CisJCSAg ICAgIGdjY19hc3NlcnQgKHRhcmdldG0uZ2VuZXJhdGVfdmVyc2lvbl9kaXNw YXRjaGVyX2JvZHkpOworCQkgICAgICByZXNvbHZlcl9kZWNsCisJCQkgPSB0 YXJnZXRtLmdlbmVyYXRlX3ZlcnNpb25fZGlzcGF0Y2hlcl9ib2R5IChjYWxs ZWUpOworCQkgICAgICBnY2NfYXNzZXJ0IChyZXNvbHZlcl9kZWNsICE9IE5V TExfVFJFRSk7CisJCSAgICB9CisJCSAgY2dyYXBoX2NyZWF0ZV9lZGdlIChu b2RlLCBjYWxsZWUsIHN0bXQsIGJiLT5jb3VudCwgZnJlcSk7CisJICAgICAg ICB9CiAJICAgICAgZWxzZQogCQljZ3JhcGhfY3JlYXRlX2luZGlyZWN0X2Vk Z2UgKG5vZGUsIHN0bXQsCiAJCQkJCSAgICAgZ2ltcGxlX2NhbGxfZmxhZ3Mg KHN0bXQpLApJbmRleDogZ2NjL2MtZmFtaWx5L2MtY29tbW9uLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL2MtZmFtaWx5L2MtY29tbW9uLmMJ KHJldmlzaW9uIDE5MjM3OCkKKysrIGdjYy9jLWZhbWlseS9jLWNvbW1vbi5j CSh3b3JraW5nIGNvcHkpCkBAIC04NjAxLDkgKzg2MDEsMjIgQEAgaGFuZGxl X3RhcmdldF9hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUgbmFtZSwgdHIK ICAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1 dGUgaWdub3JlZCIsIG5hbWUpOwogICAgICAgKm5vX2FkZF9hdHRycyA9IHRy dWU7CiAgICAgfQotICBlbHNlIGlmICghIHRhcmdldG0udGFyZ2V0X29wdGlv bi52YWxpZF9hdHRyaWJ1dGVfcCAoKm5vZGUsIG5hbWUsIGFyZ3MsCi0JCQkJ CQkgICAgICBmbGFncykpCi0gICAgKm5vX2FkZF9hdHRycyA9IHRydWU7Cisg IGVsc2UKKyAgICB7CisgICAgICAvKiBXaGVuIGEgdGFyZ2V0IGF0dHJpYnV0 ZSBpcyBpbnZhbGlkLCBpdCBtYXkgYWxzbyBiZSBiZWNhdXNlIHRoZQorCSB0 YXJnZXQgZm9yIHRoZSBjb21waWxhdGlvbiB1bml0IGFuZCB0aGUgYXR0cmli dXRlIG1hdGNoLiAgRm9yCisgICAgICAgICBpbnN0YW5jZSwgdGFyZ2V0IGF0 dHJpYnV0ZSAieHh4IiBpcyBpbnZhbGlkIHdoZW4gLW14eHggaXMgdXNlZC4K KyAgICAgICAgIFdoZW4gdXNlZCB3aXRoIG11bHRpdmVyc2lvbmluZywgcmVt b3ZpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsIGxlYWQKKyAgICAgICAgIHRvIGR1 cGxpY2F0ZSBkZWZpbml0aW9ucyBpZiBhIGRlZmF1bHQgdmVyc2lvbiBpcyBw cm92aWRlZC4KKwkgU28sIGdlbmVyYXRlIGEgd2FybmluZyBoZXJlIGFuZCBy ZW1vdmUgdGhlIGF0dHJpYnV0ZS4gICovCisgICAgICBpZiAoIXRhcmdldG0u dGFyZ2V0X29wdGlvbi52YWxpZF9hdHRyaWJ1dGVfcCAoKm5vZGUsIG5hbWUs IGFyZ3MsIGZsYWdzKSkKKwl7CisJICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0 ZXMsCisJCSAgICJJbnZhbGlkIHRhcmdldCBhdHRyaWJ1dGUgaW4gZnVuY3Rp b24gJXFFLCBpZ25vcmVkLiIsCisJCSAgICpub2RlKTsKKwkgICpub19hZGRf YXR0cnMgPSB0cnVlOworCX0KKyAgICB9CiAKICAgcmV0dXJuIE5VTExfVFJF RTsKIH0KSW5kZXg6IGdjYy90YXJnZXQuZGVmCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy90YXJnZXQuZGVmCShyZXZpc2lvbiAxOTIzNzgpCisr KyBnY2MvdGFyZ2V0LmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTI5OCw2ICsx Mjk4LDMxIEBAIERFRkhPT0sKICB0cmVlLCAodHJlZSBmbmRlY2wsIGludCBu X2FyZ3MsIHRyZWUgKmFyZ3AsIGJvb2wgaWdub3JlKSwKICBob29rX3RyZWVf dHJlZV9pbnRfdHJlZXBfYm9vbF9udWxsKQogCisvKiBUYXJnZXQgaG9vayB0 byBjb21wYXJlIHRoZSBwcmlvcml0eSBvZiB0YXJnZXQgZmVhdHVyZXMgaW4g ZnVuY3Rpb24gREVDTDEKKyAgIGFuZCBERUNMMi4gIEl0IHJldHVybnMgcG9z aXRpdmUgdmFsdWUgaWYgREVDTDEgaXMgaGlnaGVyIHByaW9yaXR5LAorICAg bmVnYXRpdmUgdmFsdWUgaWYgREVDTDIgaXMgaGlnaGVyIHByaW9yaXR5IGFu ZCAwIGlmIHRoZXkgYXJlIHRoZQorICAgc2FtZS4gICovCitERUZIT09LCiso Y29tcGFyZV92ZXJzaW9uX3ByaW9yaXR5LAorICIiLAorIGludCwgKHRyZWUg ZGVjbDEsIHRyZWUgZGVjbDIpLCBOVUxMKQorCisvKiBUYXJnZXQgaG9vayB0 byBnZW5lcmF0ZSB0aGUgZGlzcGF0Y2hlciBib2R5IGZvciBhIGZ1bmN0aW9u IHZlcnNpb24KKyAgIGRpc3BhdGNoZXIgQVJHLCB3aGljaCBpcyBhIGNncmFw aF9ub2RlIHBvaW50ZXIuICAqLworCitERUZIT09LCisoZ2VuZXJhdGVfdmVy c2lvbl9kaXNwYXRjaGVyX2JvZHksCisgIiIsCisgdHJlZSwgKHZvaWQgKmFy ZyksIE5VTEwpIAorCisvKiBUYXJnZXQgaG9vayB0byBnZW5lcmF0ZSBhIGZ1 bmN0aW9uIHZlcnNpb24gZGlzcGF0Y2hlciBERUNMIGZvciB0aGUgbGlzdAor ICAgb2YgZnVuY3Rpb24gdmVyc2lvbnMgaW4gYXJnbGlzdCwgd2hpY2ggaXMg YSB2ZWN0b3Igb2YgZGVjbHMuICAqLworCitERUZIT09LCisoZ2V0X2Z1bmN0 aW9uX3ZlcnNpb25zX2Rpc3BhdGNoZXIsCisgIiIsCisgdHJlZSwgKHZvaWQg KmFyZ2xpc3QpLCBOVUxMKQorCiAvKiBSZXR1cm5zIGEgY29kZSBmb3IgYSB0 YXJnZXQtc3BlY2lmaWMgYnVpbHRpbiB0aGF0IGltcGxlbWVudHMKICAgIHJl Y2lwcm9jYWwgb2YgdGhlIGZ1bmN0aW9uLCBvciBOVUxMX1RSRUUgaWYgbm90 IGF2YWlsYWJsZS4gICovCiBERUZIT09LCkBAIC0yNzI1LDYgKzI3NTAsMTQg QEAgREVGSE9PSwogIHZvaWQsICh2b2lkKSwKICBob29rX3ZvaWRfdm9pZCkK IAorLyogUmV0dXJucyB0cnVlIGlmIERFQ0wxIGFuZCBERUNMMiBhcmUgdmVy c2lvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24uICAqLworCitERUZIT09LCiso ZnVuY3Rpb25fdmVyc2lvbnMsCisgIiIsCisgYm9vbCwgKHRyZWUgZGVjbDEs IHRyZWUgZGVjbDIpLAorIGhvb2tfYm9vbF90cmVlX3RyZWVfZmFsc2UpCisK IC8qIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBvbmUgZnVuY3Rpb24gY2Fu IGlubGluZSBhbm90aGVyIGZ1bmN0aW9uLiAgKi8KICN1bmRlZiBIT09LX1BS RUZJWAogI2RlZmluZSBIT09LX1BSRUZJWCAiVEFSR0VUXyIKSW5kZXg6IGdj Yy9jZ3JhcGguYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY2dy YXBoLmMJKHJldmlzaW9uIDE5MjM3OCkKKysrIGdjYy9jZ3JhcGguYwkod29y a2luZyBjb3B5KQpAQCAtMTI3Nyw2ICsxMjc3LDE1IEBAIGNncmFwaF9tYXJr X2FkZHJlc3NfdGFrZW5fbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlCiAgIG5v ZGUtPnN5bWJvbC5hZGRyZXNzX3Rha2VuID0gMTsKICAgbm9kZSA9IGNncmFw aF9mdW5jdGlvbl9vcl90aHVua19ub2RlIChub2RlLCBOVUxMKTsKICAgbm9k ZS0+c3ltYm9sLmFkZHJlc3NfdGFrZW4gPSAxOworICAvKiBJZiB0aGUgYWRk cmVzcyBvZiBhIG11bHRpdmVyc2lvbmVkIGZ1bmN0aW9uIGRpc3BhdGNoZXIg aXMgdGFrZW4sCisgICAgIGdlbmVyYXRlIHRoZSBib2R5IHRvIGRpc3BhdGNo IHRoZSByaWdodCBmdW5jdGlvbiBhdCBydW4tdGltZS4gIFRoaXMKKyAgICAg aXMgbmVlZGVkIGFzIHRoZSBhZGRyZXNzIGNhbiBiZSB1c2VkIHRvIGRvIGFu IGluZGlyZWN0IGNhbGwuICAqLworICBpZiAobm9kZS0+ZGlzcGF0Y2hlcl9m dW5jdGlvbikKKyAgICB7CisgICAgICBnY2NfYXNzZXJ0IChub2RlLT5mdW5j dGlvbl92ZXJzaW9uLm5leHQpOworICAgICAgZ2NjX2Fzc2VydCAodGFyZ2V0 bS5nZW5lcmF0ZV92ZXJzaW9uX2Rpc3BhdGNoZXJfYm9keSk7CisgICAgICB0 YXJnZXRtLmdlbmVyYXRlX3ZlcnNpb25fZGlzcGF0Y2hlcl9ib2R5IChub2Rl KTsKKyAgICB9CiB9CiAKIC8qIFJldHVybiBsb2NhbCBpbmZvIGZvciB0aGUg Y29tcGlsZWQgZnVuY3Rpb24uICAqLwpJbmRleDogZ2NjL2NncmFwaC5oCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9jZ3JhcGguaAkocmV2aXNp b24gMTkyMzc4KQorKysgZ2NjL2NncmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA IC0yMjgsNiArMjI4LDI2IEBAIHN0cnVjdCBHVFkoKCkpIGNncmFwaF9ub2Rl IHsKICAgc3RydWN0IGNncmFwaF9ub2RlICpwcmV2X3NpYmxpbmdfY2xvbmU7 CiAgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqY2xvbmVzOwogICBzdHJ1Y3QgY2dy YXBoX25vZGUgKmNsb25lX29mOworCisgIC8qIEZ1bmN0aW9uIE11bHRpdmVy c2lvbmluZyBpbmZvLiAgKi8KKyAgc3RydWN0IHsKKyAgICAvKiBDaGFpbnMg YWxsIHRoZSBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsIGZ1bmN0aW9uIHZlcnNp b25zLiAgVGhlCisgICAgICAgZmlyc3QgZnVuY3Rpb24gaW4gdGhpcyBjaGFp biBpcyB0aGUgZGVmYXVsdCBmdW5jdGlvbi4gICovCisgICAgc3RydWN0IGNn cmFwaF9ub2RlICpwcmV2OworICAgIC8qIElmIHRoaXMgbm9kZSBpcyBhIGRp c3BhdGNoZXIgZm9yIGZ1bmN0aW9uIHZlcnNpb25zLCB0aGlzIHBvaW50cwor ICAgICAgIHRvIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIHZlcnNpb24sIHRoZSBm aXJzdCBmdW5jdGlvbiBpbiB0aGUgY2hhaW4uICAqLworICAgIHN0cnVjdCBj Z3JhcGhfbm9kZSAqbmV4dDsKKyAgICAvKiBJZiB0aGlzIG5vZGUgY29ycmVz cG9uZHMgdG8gYSBmdW5jdGlvbiB2ZXJzaW9uLCB0aGlzIHBvaW50cworICAg ICAgIHRvIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uIGRlY2wsIHdoaWNoIGlz IHRoZSBmdW5jdGlvbiB0aGF0IG11c3QKKyAgICAgICBiZSBjYWxsZWQgdG8g ZXhlY3V0ZSB0aGUgcmlnaHQgZnVuY3Rpb24gdmVyc2lvbiBhdCBydW4tdGlt ZS4KKworICAgICAgIElmIHRoaXMgbm9kZSBpcyBhIGRpc3BhdGNoZXIgKGlm IGRpc3BhdGNoZXJfZnVuY3Rpb24gaXMgdHJ1ZSkKKyAgICAgICBmb3IgZnVu Y3Rpb24gdmVyc2lvbnMsIHRoaXMgcG9pbnRzIHRvIHJlc29sdmVyIGZ1bmN0 aW9uLCB3aGljaAorICAgICAgIGhvbGRzIHRoZSBmdW5jdGlvbiBib2R5IG9m IHRoZSBkaXNwYXRjaGVyLiAgVGhlIGRpc3BhdGNoZXIgZGVjbAorICAgICAg IGlzIGFuIGFsaWFzIHRvIHRoZSByZXNvbHZlciBmdW5jdGlvbiBkZWNsLiAg Ki8KKyAgICB0cmVlIGRpc3BhdGNoZXJfcmVzb2x2ZXI7CisgIH0gR1RZKChz a2lwKCIiKSkpIGZ1bmN0aW9uX3ZlcnNpb247CisgIAogICAvKiBGb3IgZnVu Y3Rpb25zIHdpdGggbWFueSBjYWxscyBzaXRlcyBpdCBob2xkcyBtYXAgZnJv bSBjYWxsIGV4cHJlc3Npb24KICAgICAgdG8gdGhlIGVkZ2UgdG8gc3BlZWQg dXAgY2dyYXBoX2VkZ2UgZnVuY3Rpb24uICAqLwogICBodGFiX3QgR1RZKChw YXJhbV9pcyAoc3RydWN0IGNncmFwaF9lZGdlKSkpIGNhbGxfc2l0ZV9oYXNo OwpAQCAtMjc5LDYgKzI5OSw4IEBAIHN0cnVjdCBHVFkoKCkpIGNncmFwaF9u b2RlIHsKICAgLyogPz8gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRo aXMuICBXZSBoYXZlIGVub3VnaCBiaXRzIGluCiAgICAgIGNncmFwaCB0byBj YWxjdWxhdGUgaXQuICAqLwogICB1bnNpZ25lZCB0bV9jbG9uZSA6IDE7Cisg IC8qIFRydWUgaWYgdGhpcyBkZWNsIGEgZGlzcGF0Y2hlciBmb3IgZnVuY3Rp b24gdmVyc2lvbnMuICAqLworICB1bnNpZ25lZCBkaXNwYXRjaGVyX2Z1bmN0 aW9uIDogMTsKIH07CiAKIERFRl9WRUNfUChzeW10YWJfbm9kZSk7CkluZGV4 OiBnY2MvdHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90 cmVlLmgJKHJldmlzaW9uIDE5MjM3OCkKKysrIGdjYy90cmVlLmgJKHdvcmtp bmcgY29weSkKQEAgLTM0NzIsNiArMzQ3MiwxMiBAQCBleHRlcm4gVkVDKHRy ZWUsIGdjKSAqKmRlY2xfZGVidWdfYXJnc19pbnNlcnQgKHRyZQogI2RlZmlu ZSBERUNMX0ZVTkNUSU9OX1NQRUNJRklDX09QVElNSVpBVElPTihOT0RFKSBc CiAgICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2Rl Y2wuZnVuY3Rpb25fc3BlY2lmaWNfb3B0aW1pemF0aW9uKQogCisvKiBJbiBG VU5DVElPTl9ERUNMLCB0aGlzIGlzIHNldCBpZiB0aGlzIGZ1bmN0aW9uIGhh cyBvdGhlciB2ZXJzaW9ucyBnZW5lcmF0ZWQKKyAgIHVzaW5nICJ0YXJnZXQi IGF0dHJpYnV0ZXMuICBUaGUgZGVmYXVsdCB2ZXJzaW9uIGlzIHRoZSBvbmUg d2hpY2ggZG9lcyBub3QKKyAgIGhhdmUgYW55ICJ0YXJnZXQiIGF0dHJpYnV0 ZSBzZXQuICovCisjZGVmaW5lIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEKE5P REUpXAorICAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlv bl9kZWNsLnZlcnNpb25lZF9mdW5jdGlvbikKKwogLyogRlVOQ1RJT05fREVD TCBpbmhlcml0cyBmcm9tIERFQ0xfTk9OX0NPTU1PTiBiZWNhdXNlIG9mIHRo ZSB1c2Ugb2YgdGhlCiAgICBhcmd1bWVudHMvcmVzdWx0L3NhdmVkX3RyZWUg ZmllbGRzIGJ5IGZyb250IGVuZHMuICAgSXQgd2FzIGVpdGhlciBpbmhlcml0 CiAgICBGVU5DVElPTl9ERUNMIGZyb20gbm9uX2NvbW1vbiwgb3IgaW5oZXJp dCBub25fY29tbW9uIGZyb20gRlVOQ1RJT05fREVDTCwKQEAgLTM1MTYsOCAr MzUyMiw4IEBAIHN0cnVjdCBHVFkoKCkpIHRyZWVfZnVuY3Rpb25fZGVjbCB7 CiAgIHVuc2lnbmVkIGxvb3BpbmdfY29uc3Rfb3JfcHVyZV9mbGFnIDogMTsK ICAgdW5zaWduZWQgaGFzX2RlYnVnX2FyZ3NfZmxhZyA6IDE7CiAgIHVuc2ln bmVkIHRtX2Nsb25lX2ZsYWcgOiAxOwotCi0gIC8qIDEgYml0IGxlZnQgKi8K KyAgdW5zaWduZWQgdmVyc2lvbmVkX2Z1bmN0aW9uIDogMTsKKyAgLyogTm8g Yml0cyBsZWZ0LiAgKi8KIH07CiAKIC8qIFRoZSBzb3VyY2UgbGFuZ3VhZ2Ug b2YgdGhlIHRyYW5zbGF0aW9uLXVuaXQuICAqLwpJbmRleDogZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvbXYyLkMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvbXYyLkMJKHJldmlzaW9uIDApCisrKyBn Y2MvdGVzdHN1aXRlL2crKy5kZy9tdjIuQwkocmV2aXNpb24gMCkKQEAgLTAs MCArMSwxMTkgQEAKKy8qIFRlc3QgY2FzZSB0byBjaGVjayBpZiBNdWx0aXZl cnNpb25pbmcgY2hvb3NlcyB0aGUgY29ycmVjdAorICAgZGlzcGF0Y2hpbmcg b3JkZXIgd2hlbiB2ZXJzaW9ucyBhcmUgZm9yIHZhcmlvdXMgSVNBcy4gICov CisvKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0q IH0gfSAqLworLyogeyBkZy1yZXF1aXJlLWlmdW5jICIiIH0gICovCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtbW5vLXNzZSAtbW5vLW1teCAtbW5vLXBvcGNu dCAtbW5vLWF2eCIgfSAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKy8q IERlZmF1bHQgdmVyc2lvbi4gICovCitpbnQgZm9vICgpOworLyogVGhlIGRp c3BhdGNoIGNoZWNrcyBzaG91bGQgYmUgaW4gdGhlIGV4YWN0IHJldmVyc2Ug b3JkZXIgb2YgdGhlCisgICBkZWNsYXJhdGlvbnMgYmVsb3cuICAqLworaW50 IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgibW14IikpKTsKK2lu dCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoInNzZSIpKSk7Citp bnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJzc2UyIikpKTsK K2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoInNzZTMiKSkp OworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgic3NzZTMi KSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgic3Nl NC4xIikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAo InNzZTQuMiIpKSk7CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18gKCh0YXJn ZXQgKCJwb3BjbnQiKSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fICgo dGFyZ2V0ICgiYXZ4IikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXyAo KHRhcmdldCAoImF2eDIiKSkpOworCitpbnQgbWFpbiAoKQoreworCisgIGlu dCB2YWwgPSBmb28gKCk7CisKKyAgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9y dHMgKCJhdngyIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gMSk7CisgIGVsc2Ug aWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJhdngiKSkKKyAgICBhc3Nl cnQgKHZhbCA9PSAyKTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBw b3J0cyAoInBvcGNudCIpKQorICAgIGFzc2VydCAodmFsID09IDMpOworICBl bHNlIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NlNC4yIikpCisg ICAgYXNzZXJ0ICh2YWwgPT0gNCk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9j cHVfc3VwcG9ydHMgKCJzc2U0LjEiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA1 KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzc2Uz IikpCisgICAgYXNzZXJ0ICh2YWwgPT0gNik7CisgIGVsc2UgaWYgKF9fYnVp bHRpbl9jcHVfc3VwcG9ydHMgKCJzc2UzIikpCisgICAgYXNzZXJ0ICh2YWwg PT0gNyk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJz c2UyIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gOCk7CisgIGVsc2UgaWYgKF9f YnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJzc2UiKSkKKyAgICBhc3NlcnQgKHZh bCA9PSA5KTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAo Im1teCIpKQorICAgIGFzc2VydCAodmFsID09IDEwKTsKKyAgZWxzZQorICAg IGFzc2VydCAodmFsID09IDApOworCisgIHJldHVybiAwOworfQorCitpbnQK K2ZvbyAoKQoreworICByZXR1cm4gMDsKK30KKworaW50IF9fYXR0cmlidXRl X18gKCh0YXJnZXQoIm1teCIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMTA7 Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJzc2UiKSkpCitm b28gKCkKK3sKKyAgcmV0dXJuIDk7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9f ICgodGFyZ2V0KCJzc2UyIikpKQorZm9vICgpCit7CisgIHJldHVybiA4Owor fQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgic3NlMyIpKSkKK2Zv byAoKQoreworICByZXR1cm4gNzsKK30KKworaW50IF9fYXR0cmlidXRlX18g KCh0YXJnZXQoInNzc2UzIikpKQorZm9vICgpCit7CisgIHJldHVybiA2Owor fQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgic3NlNC4xIikpKQor Zm9vICgpCit7CisgIHJldHVybiA1OworfQorCitpbnQgX19hdHRyaWJ1dGVf XyAoKHRhcmdldCgic3NlNC4yIikpKQorZm9vICgpCit7CisgIHJldHVybiA0 OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgicG9wY250Iikp KQorZm9vICgpCit7CisgIHJldHVybiAzOworfQorCitpbnQgX19hdHRyaWJ1 dGVfXyAoKHRhcmdldCgiYXZ4IikpKQorZm9vICgpCit7CisgIHJldHVybiAy OworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXZ4MiIpKSkK K2ZvbyAoKQoreworICByZXR1cm4gMTsKK30KSW5kZXg6IGdjYy90ZXN0c3Vp dGUvZysrLmRnL212NC5DCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdj Yy90ZXN0c3VpdGUvZysrLmRnL212NC5DCShyZXZpc2lvbiAwKQorKysgZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvbXY0LkMJKHJldmlzaW9uIDApCkBAIC0wLDAg KzEsMjMgQEAKKy8qIFRlc3QgY2FzZSB0byBjaGVjayBpZiB0aGUgY29tcGls ZXIgZ2VuZXJhdGVzIGFuIGVycm9yIG1lc3NhZ2UKKyAgIHdoZW4gdGhlIGRl ZmF1bHQgdmVyc2lvbiBvZiBhIG11bHRpdmVyc2lvbmVkIGZ1bmN0aW9uIGlz IGFic2VudAorICAgYW5kIGl0cyBwb2ludGVyIGlzIHRha2VuLiAgKi8KKwor LyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0q LSogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbW5vLXNzZSAtbW5v LXBvcGNudCIgfSAqLworCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAo InNzZSIpKSkKK2ZvbyAoKQoreworICByZXR1cm4gMTsKK30KK2ludCBfX2F0 dHJpYnV0ZV9fICgodGFyZ2V0ICgicG9wY250IikpKQorZm9vICgpCit7Cisg IHJldHVybiAwOworfQorCitpbnQgbWFpbiAoKQoreworICBpbnQgKCpwKSgp ID0gJmZvbzsgLyogeyBkZy1lcnJvciAiUG9pbnRlciB0byBhIG11bHRpdmVy c2lvbmVkIGZ1bmN0aW9uIHdpdGhvdXQgYSBkZWZhdWx0IGlzIG5vdCBhbGxv d2VkIiB7fSB9ICovCisgIHJldHVybiAoKnApKCk7Cit9CkluZGV4OiBnY2Mv dGVzdHN1aXRlL2crKy5kZy9tdjEuQwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjEuQwkocmV2aXNpb24gMCkK KysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL212MS5DCShyZXZpc2lvbiAwKQpA QCAtMCwwICsxLDEzMCBAQAorLyogVGVzdCBjYXNlIHRvIGNoZWNrIGlmIE11 bHRpdmVyc2lvbmluZyB3b3Jrcy4gICovCisvKiB7IGRnLWRvIHJ1biB7IHRh cmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSAqLworLyogeyBkZy1yZXF1 aXJlLWlmdW5jICIiIH0gICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZlBJ QyAtbW5vLWF2eCAtbW5vLXBvcGNudCIgfSAqLworCisjaW5jbHVkZSA8YXNz ZXJ0Lmg+CisKKy8qIERlZmF1bHQgdmVyc2lvbi4gICovCitpbnQgZm9vICgp OworLyogVGhlIG90aGVyIHZlcnNpb25zIG9mIGZvby4gIE1peCB1cCB0aGUg b3JkZXJpbmcgYW5kIAorICAgY2hlY2sgaWYgdGhlIGRpc3BhdGNoaW5nIGRv ZXMgaXQgaW4gdGhlIG9yZGVyIG9mIHByaW9yaXR5LiAqLworLyogQ2hlY2sg Y29tYmluYXRpb24gb2YgdGFyZ2V0IGF0dHJpYnV0ZXMuICAqLworaW50IGZv byAoKSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmVpNyxwb3Bj bnQiKSkpOworLyogVGhlIHRhcmdldCBvcGVyYW5kcyBpbiB0aGlzIGRlY2xh cmF0aW9uIGFuZCB0aGUgZGVmaW5pdGlvbiBhcmUgcmUtb3JkZXJlZC4KKyAg IFRoaXMgc2hvdWxkIHN0aWxsIHdvcmsuICAqLworaW50IGZvbyAoKSBfX2F0 dHJpYnV0ZV9fICgodGFyZ2V0KCJzc3NlMyxhdngyIikpKTsKKworLyogQ2hl Y2sgZm9yIGFsbCB0YXJnZXQgYXR0cmlidXRlcyBmb3Igd2hpY2ggZGlzcGF0 Y2hlcnMgYXJlIGF2YWlsYWJsZS4gICovCisvKiBDaGVjayBhcmNoPSAqLwor aW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImFyY2g9Y29yZTIi KSkpOworaW50IGZvbyAoKSBfX2F0dHJpYnV0ZV9fKCh0YXJnZXQoImFyY2g9 Y29yZWk3IikpKTsKK2ludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0 KCJhcmNoPWF0b20iKSkpOworLyogQ2hlY2sgSVNBcyAgKi8KK2ludCBmb28g KCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhdngiKSkpOworaW50IGZvbyAo KSBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhcmNoPWNvcmUyLHNzZTQuMiIp KSk7CisvKiBDaGVjayBtb3JlIGFyY2g9LiAgKi8KK2ludCBmb28gKCkgX19h dHRyaWJ1dGVfXygodGFyZ2V0KCJhcmNoPWFtZGZhbTEwIikpKTsKK2ludCBm b28gKCkgX19hdHRyaWJ1dGVfXygodGFyZ2V0KCJhcmNoPWJkdmVyMSIpKSk7 CitpbnQgZm9vICgpIF9fYXR0cmlidXRlX18oKHRhcmdldCgiYXJjaD1iZHZl cjIiKSkpOworCitpbnQgKCpwKSgpID0gJmZvbzsKK2ludCBtYWluICgpCit7 CisgIGludCB2YWwgPSBmb28gKCk7CisgIGFzc2VydCAodmFsID09ICAoKnAp KCkpOworCisgIC8qIENoZWNrIGluIHRoZSBleGFjdCBzYW1lIG9yZGVyIGlu IHdoaWNoIHRoZSBkaXNwYXRjaGluZworICAgICBpcyBleHBlY3RlZCB0byBo YXBwZW4uICAqLworICBpZiAoX19idWlsdGluX2NwdV9pcyAoImJkdmVyMSIp KQorICAgIGFzc2VydCAodmFsID09IDEpOworICBlbHNlIGlmIChfX2J1aWx0 aW5fY3B1X2lzICgiYmR2ZXIyIikpCisgICAgYXNzZXJ0ICh2YWwgPT0gMik7 CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJhdngyIikK KwkgICAmJiBfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NzZTMiKSkKKyAg ICBhc3NlcnQgKHZhbCA9PSAzKTsKKyAgZWxzZSBpZiAoX19idWlsdGluX2Nw dV9zdXBwb3J0cyAoImF2eCIpKQorICAgIGFzc2VydCAodmFsID09IDQpOwor ICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X2lzICgiY29yZWk3IikKKwkgICAm JiBfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgicG9wY250IikpCisgICAgYXNz ZXJ0ICh2YWwgPT0gNSk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfaXMg KCJjb3JlaTciKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA2KTsKKyAgZWxzZSBp ZiAoX19idWlsdGluX2NwdV9pcyAoImFtZGZhbTEwaCIpKQorICAgIGFzc2Vy dCAodmFsID09IDcpOworICBlbHNlIGlmIChfX2J1aWx0aW5fY3B1X2lzICgi Y29yZTIiKQorCSAgICYmIF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJzc2U0 LjIiKSkKKyAgICBhc3NlcnQgKHZhbCA9PSA4KTsKKyAgZWxzZSBpZiAoX19i dWlsdGluX2NwdV9pcyAoImNvcmUyIikpCisgICAgYXNzZXJ0ICh2YWwgPT0g OSk7CisgIGVsc2UgaWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJhdG9tIikpCisg ICAgYXNzZXJ0ICh2YWwgPT0gMTApOworICBlbHNlCisgICAgYXNzZXJ0ICh2 YWwgPT0gMCk7CisgIAorICByZXR1cm4gMDsKK30KKworaW50IGZvbyAoKQor eworICByZXR1cm4gMDsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJn ZXQoImFyY2g9Y29yZWk3LHBvcGNudCIpKSkKK2ZvbyAoKQoreworICByZXR1 cm4gNTsKK30KK2ludCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJhdngyLHNz c2UzIikpKQorZm9vICgpCit7CisgIHJldHVybiAzOworfQorCitpbnQgX19h dHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1jb3JlMiIpKSkKK2ZvbyAoKQor eworICByZXR1cm4gOTsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJn ZXQoImFyY2g9Y29yZWk3IikpKQorZm9vICgpCit7CisgIHJldHVybiA2Owor fQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1hdG9tIikp KQorZm9vICgpCit7CisgIHJldHVybiAxMDsKK30KKworaW50IF9fYXR0cmli dXRlX18gKCh0YXJnZXQoImF2eCIpKSkKK2ZvbyAoKQoreworICByZXR1cm4g NDsKK30KKworaW50IF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImFyY2g9Y29y ZTIsc3NlNC4yIikpKQorZm9vICgpCit7CisgIHJldHVybiA4OworfQorCitp bnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJjaD1hbWRmYW0xMCIpKSkK K2ZvbyAoKQoreworICByZXR1cm4gNzsKK30KKworaW50IF9fYXR0cmlidXRl X18gKCh0YXJnZXQoImFyY2g9YmR2ZXIxIikpKQorZm9vICgpCit7CisgIHJl dHVybiAxOworfQorCitpbnQgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiYXJj aD1iZHZlcjIiKSkpCitmb28gKCkKK3sKKyAgcmV0dXJuIDI7Cit9CkluZGV4 OiBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjMuQwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy9tdjMuQwkocmV2aXNp b24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL212My5DCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDM3IEBACisvKiBUZXN0IGNhc2UgdG8gY2hlY2sg aWYgYSBjYWxsIHRvIGEgbXVsdGl2ZXJzaW9uZWQgZnVuY3Rpb24KKyAgIGlz IHJlcGxhY2VkIHdpdGggYSBkaXJlY3QgY2FsbCB0byB0aGUgcGFydGljdWxh ciB2ZXJzaW9uIHdoZW4KKyAgIHRoZSBtb3N0IHNwZWNpYWxpemVkIHZlcnNp b24ncyB0YXJnZXQgYXR0cmlidXRlcyBtYXRjaCB0aGUKKyAgIGNhbGxlci4g IAorICAKKyAgIEluIHRoaXMgcHJvZ3JhbSwgZm9vIGlzIG11bHRpdmVyc2lv bmVkIGJ1dCB0aGVyZSBpcyBubyBkZWZhdWx0CisgICBmdW5jdGlvbi4gIFRo aXMgaXMgYW4gZXJyb3IgaWYgdGhlIGNhbGwgaGFzIHRvIGdvIHRocm91Z2gg YQorICAgZGlzcGF0Y2hlci4gIEhvd2V2ZXIsIHRoZSBjYWxsIHRvIGZvbyBp biBiYXIgY2FuIGJlIHJlcGxhY2VkCisgICB3aXRoIGEgZGlyZWN0IGNhbGwg dG8gdGhlIHBvcGNudCB2ZXJzaW9uIG9mIGZvby4gIEhlbmNlLCB0aGlzCisg ICB0ZXN0IHNob3VsZCBwYXNzLiAgKi8KKworLyogeyBkZy1kbyBydW4geyB0 YXJnZXQgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLU8yIC1tbm8tc3NlIC1tbm8tcG9wY250IiB9ICovCisKKworLyog RGVmYXVsdCB2ZXJzaW9uLiAgKi8KK2ludCBfX2F0dHJpYnV0ZV9fICgodGFy Z2V0ICgic3NlIikpKQorZm9vICgpCit7CisgIHJldHVybiAxOworfQoraW50 IF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJwb3BjbnQiKSkpCitmb28gKCkK K3sKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBfX2F0dHJpYnV0ZV9fICgodGFy Z2V0ICgicG9wY250IikpKQorYmFyICgpCit7CisgIHJldHVybiBmb28gKCk7 Cit9CisKK2ludCBtYWluICgpCit7CisgIHJldHVybiBiYXIgKCk7Cit9Cklu ZGV4OiBnY2MvY3AvY2xhc3MuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2MvY3AvY2xhc3MuYwkocmV2aXNpb24gMTkyMzc4KQorKysgZ2NjL2Nw L2NsYXNzLmMJKHdvcmtpbmcgY29weSkKQEAgLTEwODcsNyArMTA4NywzMiBA QCBhZGRfbWV0aG9kICh0cmVlIHR5cGUsIHRyZWUgbWV0aG9kLCB0cmVlIHVz aW5nX2RlYwogCSAgICAgIHx8IHNhbWVfdHlwZV9wIChUUkVFX1RZUEUgKGZu X3R5cGUpLAogCQkJICAgICAgVFJFRV9UWVBFIChtZXRob2RfdHlwZSkpKSkK IAl7Ci0JICBpZiAodXNpbmdfZGVjbCkKKwkgIC8qIEZvciBmdW5jdGlvbiB2 ZXJzaW9ucywgdGhlaXIgcGFybXMgYW5kIHR5cGVzIG1hdGNoCisJICAgICBi dXQgdGhleSBhcmUgbm90IGR1cGxpY2F0ZXMuICBSZWNvcmQgZnVuY3Rpb24g dmVyc2lvbnMKKwkgICAgIGFzIGFuZCB3aGVuIHRoZXkgYXJlIGZvdW5kLiAg Ki8KKwkgIGlmIChUUkVFX0NPREUgKGZuKSA9PSBGVU5DVElPTl9ERUNMCisJ ICAgICAgJiYgVFJFRV9DT0RFIChtZXRob2QpID09IEZVTkNUSU9OX0RFQ0wK KwkgICAgICAmJiAoREVDTF9GVU5DVElPTl9TUEVDSUZJQ19UQVJHRVQgKGZu KQorCQkgIHx8IERFQ0xfRlVOQ1RJT05fU1BFQ0lGSUNfVEFSR0VUIChtZXRo b2QpKQorCSAgICAgICYmIHRhcmdldG0udGFyZ2V0X29wdGlvbi5mdW5jdGlv bl92ZXJzaW9ucyAoZm4sIG1ldGhvZCkpCisgCSAgICB7CisJICAgICAgLyog TWFyayBmdW5jdGlvbnMgYXMgdmVyc2lvbnMgaWYgbmVjZXNzYXJ5LiAgTW9k aWZ5IHRoZSBtYW5nbGVkCisJCSBkZWNsIG5hbWUgaWYgbmVjZXNzYXJ5LiAg Ki8KKwkgICAgICBpZiAoIURFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChmbikp CisJCXsKKwkJICBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoZm4pID0gMTsK KwkJICBpZiAoREVDTF9BU1NFTUJMRVJfTkFNRV9TRVRfUCAoZm4pKQorCQkg ICAgbWFuZ2xlX2RlY2wgKGZuKTsKKwkJfQorCSAgICAgIGlmICghREVDTF9G VU5DVElPTl9WRVJTSU9ORUQgKG1ldGhvZCkpCisJCXsKKwkJICBERUNMX0ZV TkNUSU9OX1ZFUlNJT05FRCAobWV0aG9kKSA9IDE7CisJCSAgaWYgKERFQ0xf QVNTRU1CTEVSX05BTUVfU0VUX1AgKG1ldGhvZCkpCisJCSAgICBtYW5nbGVf ZGVjbCAobWV0aG9kKTsKKwkJfQorCSAgICAgIGNvbnRpbnVlOworCSAgICB9 CisJICBlbHNlIGlmICh1c2luZ19kZWNsKQogCSAgICB7CiAJICAgICAgaWYg KERFQ0xfQ09OVEVYVCAoZm4pID09IHR5cGUpCiAJCS8qIERlZmVyIHRvIHRo ZSBsb2NhbCBmdW5jdGlvbi4gICovCkBAIC02OTE1LDYgKzY5NDAsNyBAQCBy ZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbiAodHJlZSB0 YXJnZQogICB0cmVlIG1hdGNoZXMgPSBOVUxMX1RSRUU7CiAgIHRyZWUgZm47 CiAgIHRyZWUgdGFyZ2V0X2ZuX3R5cGU7CisgIFZFQyAodHJlZSwgaGVhcCkg KmZuX3Zlcl92ZWMgPSBOVUxMOwogCiAgIC8qIEJ5IHRoZSB0aW1lIHdlIGdl dCBoZXJlLCB3ZSBzaG91bGQgYmUgc2VlaW5nIG9ubHkgcmVhbAogICAgICBw b2ludGVyLXRvLW1lbWJlciB0eXBlcywgbm90IHRoZSBpbnRlcm5hbCBQT0lO VEVSX1RZUEUgdG8KQEAgLTY5NzksOSArNzAwNSwxOSBAQCByZXNvbHZlX2Fk ZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbiAodHJlZSB0YXJnZQogCSAg aWYgKERFQ0xfQU5USUNJUEFURUQgKGZuKSkKIAkgICAgY29udGludWU7CiAK LQkgIC8qIFNlZSBpZiB0aGVyZSdzIGEgbWF0Y2guICAqLworCSAgLyogU2Vl IGlmIHRoZXJlJ3MgYSBtYXRjaC4gICBGb3IgZnVuY3Rpb25zIHRoYXQgYXJl IG11bHRpLXZlcnNpb25lZCwKKwkgICAgIGFsbCB0aGUgdmVyc2lvbnMgbWF0 Y2guICAqLwogCSAgaWYgKHNhbWVfdHlwZV9wICh0YXJnZXRfZm5fdHlwZSwg c3RhdGljX2ZuX3R5cGUgKGZuKSkpCi0JICAgIG1hdGNoZXMgPSB0cmVlX2Nv bnMgKGZuLCBOVUxMX1RSRUUsIG1hdGNoZXMpOworCSAgICB7CisJICAgICAg bWF0Y2hlcyA9IHRyZWVfY29ucyAoZm4sIE5VTExfVFJFRSwgbWF0Y2hlcyk7 CisJICAgICAgLypJZiB2ZXJzaW9uZWQsIHB1c2ggYWxsIHBvc3NpYmxlIHZl cnNpb25zIGludG8gYSB2ZWN0b3IuICAqLworCSAgICAgIGlmIChERUNMX0ZV TkNUSU9OX1ZFUlNJT05FRCAoZm4pKQorCQl7CisJCSAgaWYgKGZuX3Zlcl92 ZWMgPT0gTlVMTCkKKwkJICAgZm5fdmVyX3ZlYyA9IFZFQ19hbGxvYyAodHJl ZSwgaGVhcCwgMik7CisJCSAgVkVDX3NhZmVfcHVzaCAodHJlZSwgaGVhcCwg Zm5fdmVyX3ZlYywgZm4pOyAKKwkJfQorCSAgICB9CiAJfQogICAgIH0KIApA QCAtNzA2OSwxMyArNzEwNSwyNiBAQCByZXNvbHZlX2FkZHJlc3Nfb2Zfb3Zl cmxvYWRlZF9mdW5jdGlvbiAodHJlZSB0YXJnZQogICAgIHsKICAgICAgIC8q IFRoZXJlIHdlcmUgdG9vIG1hbnkgbWF0Y2hlcy4gIEZpcnN0IGNoZWNrIGlm IHRoZXkncmUgYWxsCiAJIHRoZSBzYW1lIGZ1bmN0aW9uLiAgKi8KLSAgICAg IHRyZWUgbWF0Y2g7CisgICAgICB0cmVlIG1hdGNoID0gTlVMTF9UUkVFOwog CiAgICAgICBmbiA9IFRSRUVfUFVSUE9TRSAobWF0Y2hlcyk7Ci0gICAgICBm b3IgKG1hdGNoID0gVFJFRV9DSEFJTiAobWF0Y2hlcyk7IG1hdGNoOyBtYXRj aCA9IFRSRUVfQ0hBSU4gKG1hdGNoKSkKLQlpZiAoIWRlY2xzX21hdGNoIChm biwgVFJFRV9QVVJQT1NFIChtYXRjaCkpKQotCSAgYnJlYWs7CiAKKyAgICAg IC8qIEZvciBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb25zLCBtb3JlIHRoYW4g b25lIG1hdGNoIGlzIGp1c3QgZmluZS4KKwkgQ2FsbCBkZWNsc19tYXRjaCB0 byBtYWtlIHN1cmUgdGhleSBhcmUgZGlmZmVyZW50IGJlY2F1c2UgdGhleSBh cmUKKwkgdmVyc2lvbmVkLiAgKi8KKyAgICAgIGlmIChERUNMX0ZVTkNUSU9O X1ZFUlNJT05FRCAoZm4pKQorCXsKKyAgICAgICAgICBmb3IgKG1hdGNoID0g VFJFRV9DSEFJTiAobWF0Y2hlcyk7IG1hdGNoOyBtYXRjaCA9IFRSRUVfQ0hB SU4gKG1hdGNoKSkKKyAgCSAgICBpZiAoZGVjbHNfbWF0Y2ggKGZuLCBUUkVF X1BVUlBPU0UgKG1hdGNoKSkpCisJICAgICAgYnJlYWs7CisJfQorICAgICAg ZWxzZQorCXsKKyAgICAgICAgICBmb3IgKG1hdGNoID0gVFJFRV9DSEFJTiAo bWF0Y2hlcyk7IG1hdGNoOyBtYXRjaCA9IFRSRUVfQ0hBSU4gKG1hdGNoKSkK KyAgCSAgICBpZiAoIWRlY2xzX21hdGNoIChmbiwgVFJFRV9QVVJQT1NFICht YXRjaCkpKQorCSAgICAgIGJyZWFrOworCX0KKwogICAgICAgaWYgKG1hdGNo KQogCXsKIAkgIGlmIChmbGFncyAmIHRmX2Vycm9yKQpAQCAtNzEzNyw2ICs3 MTg2LDI4IEBAIHJlc29sdmVfYWRkcmVzc19vZl9vdmVybG9hZGVkX2Z1bmN0 aW9uICh0cmVlIHRhcmdlCiAgICAgICBwZXJmb3JtX29yX2RlZmVyX2FjY2Vz c19jaGVjayAoYWNjZXNzX3BhdGgsIGZuLCBmbiwgZmxhZ3MpOwogICAgIH0K IAorICAvKiBJZiBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIG11 bHRpLXZlcnNpb25lZCBpcyByZXF1ZXN0ZWQsIHRoZQorICAgICBwb2ludGVy IHRvIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uIGlzIHJldHVybmVkIGluc3Rl YWQuICBUaGlzIHdvcmtzCisgICAgIHdlbGwgYmVjYXVzZSBpbmRpcmVjdGx5 IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHdpbGwgZGlzcGF0Y2ggdGhlIHJpZ2h0 CisgICAgIGZ1bmN0aW9uIHZlcnNpb24gYXQgcnVuLXRpbWUuICAqLworICBp ZiAoREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGZuKSkKKyAgICB7CisgICAg ICB0cmVlIGRpc3BhdGNoZXJfZGVjbCA9IE5VTEw7CisgICAgICBnY2NfYXNz ZXJ0IChmbl92ZXJfdmVjICE9IE5VTEwpOworICAgICAgZ2NjX2Fzc2VydCAo dGFyZ2V0bS5nZXRfZnVuY3Rpb25fdmVyc2lvbnNfZGlzcGF0Y2hlcik7Cisg ICAgICBkaXNwYXRjaGVyX2RlY2wgPSB0YXJnZXRtLmdldF9mdW5jdGlvbl92 ZXJzaW9uc19kaXNwYXRjaGVyIChmbl92ZXJfdmVjKTsKKyAgICAgIGlmICgh ZGlzcGF0Y2hlcl9kZWNsKQorCXsKKwkgIGVycm9yX2F0IChpbnB1dF9sb2Nh dGlvbiwgIlBvaW50ZXIgdG8gYSBtdWx0aXZlcnNpb25lZCBmdW5jdGlvbiIK KwkJICAgICIgd2l0aG91dCBhIGRlZmF1bHQgaXMgbm90IGFsbG93ZWQiKTsK KwkgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CisJfQorICAgICAgcmV0cm9m aXRfbGFuZ19kZWNsIChkaXNwYXRjaGVyX2RlY2wpOworICAgICAgbWFya191 c2VkIChmbik7CisgICAgICBWRUNfZnJlZSAodHJlZSwgaGVhcCwgZm5fdmVy X3ZlYyk7CisgICAgICBmbiA9IGRpc3BhdGNoZXJfZGVjbDsKKyAgICB9CisK ICAgaWYgKFRZUEVfUFRSRk5fUCAodGFyZ2V0X3R5cGUpIHx8IFRZUEVfUFRS TUVNRlVOQ19QICh0YXJnZXRfdHlwZSkpCiAgICAgcmV0dXJuIGNwX2J1aWxk X2FkZHJfZXhwciAoZm4sIGZsYWdzKTsKICAgZWxzZQpJbmRleDogZ2NjL2Nw L2RlY2wuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY3AvZGVj bC5jCShyZXZpc2lvbiAxOTIzNzgpCisrKyBnY2MvY3AvZGVjbC5jCSh3b3Jr aW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIGFsb25nIHdpdGggR0NDOyBz ZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAi cG9pbnRlci1zZXQuaCIKICNpbmNsdWRlICJzcGxheS10cmVlLmgiCiAjaW5j bHVkZSAicGx1Z2luLmgiCisjaW5jbHVkZSAiY2dyYXBoLmgiCiAKIC8qIFBv c3NpYmxlIGNhc2VzIG9mIGJhZCBzcGVjaWZpZXJzIHR5cGUgdXNlZCBieSBi YWRfc3BlY2lmaWVycy4gKi8KIGVudW0gYmFkX3NwZWNfcGxhY2UgewpAQCAt OTgxLDYgKzk4MiwyOSBAQCBkZWNsc19tYXRjaCAodHJlZSBuZXdkZWNsLCB0 cmVlIG9sZGRlY2wpCiAgICAgICBpZiAodDEgIT0gdDIpCiAJcmV0dXJuIDA7 CiAKKyAgICAgIC8qIFRoZSBkZWNscyBkb250IG1hdGNoIGlmIHRoZXkgY29y cmVzcG9uZCB0byB0d28gZGlmZmVyZW50IHZlcnNpb25zCisJIG9mIHRoZSBz YW1lIGZ1bmN0aW9uLiAgKi8KKyAgICAgIGlmIChjb21wcGFybXMgKHAxLCBw MikKKwkgICYmIHNhbWVfdHlwZV9wIChUUkVFX1RZUEUgKGYxKSwgVFJFRV9U WVBFIChmMikpIAorCSAgJiYgdGFyZ2V0bS50YXJnZXRfb3B0aW9uLmZ1bmN0 aW9uX3ZlcnNpb25zIChuZXdkZWNsLCBvbGRkZWNsKSkKKwl7CisJICAvKiBN YXJrIGZ1bmN0aW9ucyBhcyB2ZXJzaW9ucyBpZiBuZWNlc3NhcnkuICBNb2Rp ZnkgdGhlIG1hbmdsZWQgZGVjbAorCSAgICAgbmFtZSBpZiBuZWNlc3Nhcnku ICAqLworCSAgaWYgKCFERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAobmV3ZGVj bCkpCisJICAgIHsKKwkgICAgICBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAo bmV3ZGVjbCkgPSAxOworCSAgICAgIGlmIChERUNMX0FTU0VNQkxFUl9OQU1F X1NFVF9QIChuZXdkZWNsKSkKKwkgICAgICAgIG1hbmdsZV9kZWNsIChuZXdk ZWNsKTsKKwkgICAgfQorCSAgaWYgKCFERUNMX0ZVTkNUSU9OX1ZFUlNJT05F RCAob2xkZGVjbCkpCisJICAgIHsKKwkgICAgICBERUNMX0ZVTkNUSU9OX1ZF UlNJT05FRCAob2xkZGVjbCkgPSAxOworCSAgICAgIGlmIChERUNMX0FTU0VN QkxFUl9OQU1FX1NFVF9QIChvbGRkZWNsKSkKKwkgICAgICAgbWFuZ2xlX2Rl Y2wgKG9sZGRlY2wpOworCSAgICB9CisJICByZXR1cm4gMDsKKwl9CisKICAg ICAgIGlmIChDUF9ERUNMX0NPTlRFWFQgKG5ld2RlY2wpICE9IENQX0RFQ0xf Q09OVEVYVCAob2xkZGVjbCkKIAkgICYmICEgKERFQ0xfRVhURVJOX0NfUCAo bmV3ZGVjbCkKIAkJJiYgREVDTF9FWFRFUk5fQ19QIChvbGRkZWNsKSkpCkBA IC0xNDk5LDcgKzE1MjMsMTEgQEAgZHVwbGljYXRlX2RlY2xzICh0cmVlIG5l d2RlY2wsIHRyZWUgb2xkZGVjbCwgYm9vbAogCSAgICAgIGVycm9yICgicHJl dmlvdXMgZGVjbGFyYXRpb24gJXErI0QgaGVyZSIsIG9sZGRlY2wpOwogCSAg ICAgIHJldHVybiBOVUxMX1RSRUU7CiAJICAgIH0KLQkgIGVsc2UgaWYgKGNv bXBwYXJtcyAoVFlQRV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAobmV3ZGVjbCkp LAorCSAgLyogRm9yIGZ1bmN0aW9uIHZlcnNpb25zLCBwYXJhbXMgYW5kIHR5 cGVzIG1hdGNoLCBidXQgdGhleQorCSAgICAgYXJlIG5vdCBhbWJpZ3VvdXMu ICAqLworCSAgZWxzZSBpZiAoKCFERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAo bmV3ZGVjbCkKKwkJICAgICYmICFERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAo b2xkZGVjbCkpCisJCSAgICYmIGNvbXBwYXJtcyAoVFlQRV9BUkdfVFlQRVMg KFRSRUVfVFlQRSAobmV3ZGVjbCkpLAogCQkJICAgICAgVFlQRV9BUkdfVFlQ RVMgKFRSRUVfVFlQRSAob2xkZGVjbCkpKSkKIAkgICAgewogCSAgICAgIGVy cm9yICgibmV3IGRlY2xhcmF0aW9uICVxI0QiLCBuZXdkZWNsKTsKQEAgLTIy NzIsNiArMjMwMCwxMSBAQCBkdXBsaWNhdGVfZGVjbHMgKHRyZWUgbmV3ZGVj bCwgdHJlZSBvbGRkZWNsLCBib29sCiAgIGVsc2UgaWYgKERFQ0xfUFJFU0VS VkVfUCAobmV3ZGVjbCkpCiAgICAgREVDTF9QUkVTRVJWRV9QIChvbGRkZWNs KSA9IDE7CiAKKyAgLyogSWYgdGhlIG9sZGRlY2wgaXMgYSB2ZXJzaW9uLCBz byBpcyB0aGUgbmV3ZGVjbC4gICovCisgIGlmIChUUkVFX0NPREUgKG5ld2Rl Y2wpID09IEZVTkNUSU9OX0RFQ0wKKyAgICAgICYmIERFQ0xfRlVOQ1RJT05f VkVSU0lPTkVEIChvbGRkZWNsKSkKKyAgICBERUNMX0ZVTkNUSU9OX1ZFUlNJ T05FRCAobmV3ZGVjbCkgPSAxOworCiAgIGlmIChUUkVFX0NPREUgKG5ld2Rl Y2wpID09IEZVTkNUSU9OX0RFQ0wpCiAgICAgewogICAgICAgaW50IGZ1bmN0 aW9uX3NpemU7CkBAIC0xNDIyMiw3ICsxNDI1NSwxMSBAQCBjeHhfY29tZGF0 X2dyb3VwICh0cmVlIGRlY2wpCiAJICBlbHNlCiAJICAgIGJyZWFrOwogCX0K LSAgICAgIG5hbWUgPSBERUNMX0FTU0VNQkxFUl9OQU1FIChkZWNsKTsKKyAg ICAgIGlmIChUUkVFX0NPREUgKGRlY2wpID09IEZVTkNUSU9OX0RFQ0wKKwkg ICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChkZWNsKSkKKwluYW1lID0g REVDTF9OQU1FIChkZWNsKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbmFtZSA9 IERFQ0xfQVNTRU1CTEVSX05BTUUgKGRlY2wpOwogICAgIH0KIAogICByZXR1 cm4gbmFtZTsKSW5kZXg6IGdjYy9jcC9lcnJvci5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy9jcC9lcnJvci5jCShyZXZpc2lvbiAxOTIzNzgp CisrKyBnY2MvY3AvZXJyb3IuYwkod29ya2luZyBjb3B5KQpAQCAtMTU0MSw4 ICsxNTQxLDE1IEBAIGR1bXBfZXhjZXB0aW9uX3NwZWMgKHRyZWUgdCwgaW50 IGZsYWdzKQogc3RhdGljIHZvaWQKIGR1bXBfZnVuY3Rpb25fbmFtZSAodHJl ZSB0LCBpbnQgZmxhZ3MpCiB7Ci0gIHRyZWUgbmFtZSA9IERFQ0xfTkFNRSAo dCk7CisgIHRyZWUgbmFtZTsKIAorICAvKiBGb3IgZnVuY3Rpb24gdmVyc2lv bnMsIHVzZSB0aGUgYXNzZW1ibGVyIG5hbWUgYXMgdGhlIGRlY2wgbmFtZSBp cworICAgICB0aGUgc2FtZSBmb3IgYWxsIHZlcnNpb25zLiAgKi8KKyAgaWYg KERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEICh0KSkKKyAgICBuYW1lID0gREVD TF9BU1NFTUJMRVJfTkFNRSAodCk7CisgIGVsc2UKKyAgICBuYW1lID0gREVD TF9OQU1FICh0KTsKKwogICAvKiBXZSBjYW4gZ2V0IGhlcmUgd2l0aCBhIGRl Y2wgdGhhdCB3YXMgc3ludGhlc2l6ZWQgYnkgbGFuZ3VhZ2UtCiAgICAgIGlu ZGVwZW5kZW50IG1hY2hpbmVyeSAoZS5nLiBjb3ZlcmFnZS5jKSBpbiB3aGlj aCBjYXNlIGl0IHdvbid0CiAgICAgIGhhdmUgYSBsYW5nX3NwZWNpZmljIHN0 cnVjdHVyZSBhdHRhY2hlZCBhbmQgREVDTF9DT05TVFJVQ1RPUl9QCkluZGV4 OiBnY2MvY3Avc2VtYW50aWNzLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZ2NjL2NwL3NlbWFudGljcy5jCShyZXZpc2lvbiAxOTIzNzgpCisrKyBn Y2MvY3Avc2VtYW50aWNzLmMJKHdvcmtpbmcgY29weSkKQEAgLTM3OTksOCAr Mzc5OSwxMSBAQCBleHBhbmRfb3JfZGVmZXJfZm5fMSAodHJlZSBmbikKICAg ICAgIC8qIElmIHRoZSB1c2VyIHdhbnRzIHVzIHRvIGtlZXAgYWxsIGlubGlu ZSBmdW5jdGlvbnMsIHRoZW4gbWFyawogCSB0aGlzIGZ1bmN0aW9uIGFzIG5l ZWRlZCBzbyB0aGF0IGZpbmlzaF9maWxlIHdpbGwgbWFrZSBzdXJlIHRvCiAJ IG91dHB1dCBpdCBsYXRlci4gIFNpbWlsYXJseSwgYWxsIGRsbGV4cG9ydCdk IGZ1bmN0aW9ucyBtdXN0Ci0JIGJlIGVtaXR0ZWQ7IHRoZXJlIG1heSBiZSBj YWxsZXJzIGluIG90aGVyIERMTHMuICAqLwotICAgICAgaWYgKChmbGFnX2tl ZXBfaW5saW5lX2Z1bmN0aW9ucworCSBiZSBlbWl0dGVkOyB0aGVyZSBtYXkg YmUgY2FsbGVycyBpbiBvdGhlciBETExzLgorCSBBbHNvLCBtYXJrIHRoaXMg ZnVuY3Rpb24gYXMgbmVlZGVkIGlmIGl0IGlzIG1hcmtlZCBpbmxpbmUgYnV0 CisJIGlzIGEgbXVsdGktdmVyc2lvbmVkIGZ1bmN0aW9uLiAgKi8KKyAgICAg IGlmICgoKGZsYWdfa2VlcF9pbmxpbmVfZnVuY3Rpb25zCisJICAgIHx8IERF Q0xfRlVOQ1RJT05fVkVSU0lPTkVEIChmbikpCiAJICAgJiYgREVDTF9ERUNM QVJFRF9JTkxJTkVfUCAoZm4pCiAJICAgJiYgIURFQ0xfUkVBTExZX0VYVEVS TiAoZm4pKQogCSAgfHwgKGZsYWdfa2VlcF9pbmxpbmVfZGxsZXhwb3J0Cklu ZGV4OiBnY2MvY3AvZGVjbDIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2MvY3AvZGVjbDIuYwkocmV2aXNpb24gMTkyMzc4KQorKysgZ2NjL2Nw L2RlY2wyLmMJKHdvcmtpbmcgY29weSkKQEAgLTY3NCw5ICs2NzQsMTMgQEAg Y2hlY2tfY2xhc3NmbiAodHJlZSBjdHlwZSwgdHJlZSBmdW5jdGlvbiwgdHJl ZSB0ZW0KIAkgIGlmIChpc190ZW1wbGF0ZSAhPSAoVFJFRV9DT0RFIChmbmRl Y2wpID09IFRFTVBMQVRFX0RFQ0wpKQogCSAgICBjb250aW51ZTsKIAorCSAg LyogV2hpbGUgZmluZGluZyBhIG1hdGNoLCBzYW1lIHR5cGVzIGFuZCBwYXJh bXMgYXJlIG5vdCBlbm91Z2gKKwkgICAgIGlmIHRoZSBmdW5jdGlvbiBpcyB2 ZXJzaW9uZWQuICBBbHNvIGNoZWNrIHZlcnNpb24gKCJ0YXJnZXQiKQorCSAg ICAgYXR0cmlidXRlcy4gICovCiAJICBpZiAoc2FtZV90eXBlX3AgKFRSRUVf VFlQRSAoVFJFRV9UWVBFIChmdW5jdGlvbikpLAogCQkJICAgVFJFRV9UWVBF IChUUkVFX1RZUEUgKGZuZGVjbCkpKQogCSAgICAgICYmIGNvbXBwYXJtcyAo cDEsIHAyKQorCSAgICAgICYmICF0YXJnZXRtLnRhcmdldF9vcHRpb24uZnVu Y3Rpb25fdmVyc2lvbnMgKGZ1bmN0aW9uLCBmbmRlY2wpCiAJICAgICAgJiYg KCFpc190ZW1wbGF0ZQogCQkgIHx8IGNvbXBfdGVtcGxhdGVfcGFybXMgKHRl bXBsYXRlX3Bhcm1zLAogCQkJCQkgIERFQ0xfVEVNUExBVEVfUEFSTVMgKGZu ZGVjbCkpKQpJbmRleDogZ2NjL2NwL2NhbGwuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvY3AvY2FsbC5jCShyZXZpc2lvbiAxOTIzNzgpCisr KyBnY2MvY3AvY2FsbC5jCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3 IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJ ZiBub3Qgc2VlCiAjaW5jbHVkZSAibGFuZ2hvb2tzLmgiCiAjaW5jbHVkZSAi Yy1mYW1pbHkvYy1vYmpjLmgiCiAjaW5jbHVkZSAidGltZXZhci5oIgorI2lu Y2x1ZGUgImNncmFwaC5oIgogCiAvKiBUaGUgdmFyaW91cyBraW5kcyBvZiBj b252ZXJzaW9uLiAgKi8KIApAQCAtNjQwMCw2ICs2NDAxLDM1IEBAIG1hZ2lj X3ZhcmFyZ3NfcCAodHJlZSBmbikKICAgcmV0dXJuIGZhbHNlOwogfQogCisv KiBSZXR1cm5zIHRoZSBkZWNsIG9mIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9u IGlmIEZOIGlzIGEgZnVuY3Rpb24gdmVyc2lvbi4gICovCisKK3N0YXRpYyB0 cmVlCitnZXRfZnVuY3Rpb25fdmVyc2lvbl9kaXNwYXRjaGVyICh0cmVlIGZu KQoreworICB0cmVlIGRpc3BhdGNoZXJfZGVjbCA9IE5VTEw7CisgIHN0cnVj dCBjZ3JhcGhfbm9kZSAqbm9kZSA9IE5VTEw7CisKKyAgZ2NjX2Fzc2VydCAo VFJFRV9DT0RFIChmbikgPT0gRlVOQ1RJT05fREVDTAorCSAgICAgICYmIERF Q0xfRlVOQ1RJT05fVkVSU0lPTkVEIChmbikpOworCisgIG5vZGUgPSBjZ3Jh cGhfZ2V0X25vZGUgKGZuKTsKKworICBpZiAobm9kZSAhPSBOVUxMKQorICAg IGRpc3BhdGNoZXJfZGVjbCA9IG5vZGUtPmZ1bmN0aW9uX3ZlcnNpb24uZGlz cGF0Y2hlcl9yZXNvbHZlcjsKKyAgZWxzZQorICAgIHJldHVybiBOVUxMOwor CisgIGlmIChkaXNwYXRjaGVyX2RlY2wgPT0gTlVMTCkKKyAgICB7CisgICAg ICBlcnJvcl9hdCAoaW5wdXRfbG9jYXRpb24sICJDYWxsIHRvIG11bHRpdmVy c2lvbmVkIGZ1bmN0aW9uIgorICAgICAgICAgICAgICAgICIgd2l0aG91dCBh IGRlZmF1bHQgaXMgbm90IGFsbG93ZWQiKTsKKyAgICAgIHJldHVybiBOVUxM OworICAgIH0KKyAgcmV0cm9maXRfbGFuZ19kZWNsIChkaXNwYXRjaGVyX2Rl Y2wpOworICBnY2NfYXNzZXJ0IChkaXNwYXRjaGVyX2RlY2wgIT0gTlVMTCk7 CisgIHJldHVybiBkaXNwYXRjaGVyX2RlY2w7Cit9CisKIC8qIFN1YnJvdXRp bmUgb2YgdGhlIHZhcmlvdXMgYnVpbGRfKl9jYWxsIGZ1bmN0aW9ucy4gIE92 ZXJsb2FkIHJlc29sdXRpb24KICAgIGhhcyBjaG9zZW4gYSB3aW5uaW5nIGNh bmRpZGF0ZSBDQU5EOyBidWlsZCB1cCBhIENBTExfRVhQUiBhY2NvcmRpbmds eS4KICAgIEFSR1MgaXMgYSBUUkVFX0xJU1Qgb2YgdGhlIHVuY29udmVydGVk IGFyZ3VtZW50cyB0byB0aGUgY2FsbC4gIEZMQUdTIGlzIGEKQEAgLTY4NTIs NiArNjg4MiwyMCBAQCBidWlsZF9vdmVyX2NhbGwgKHN0cnVjdCB6X2NhbmRp ZGF0ZSAqY2FuZCwgaW50IGZsYQogICBpZiAoIWFscmVhZHlfdXNlZCkKICAg ICBtYXJrX3VzZWQgKGZuKTsKIAorICAvKiBGb3IgY2FsbHMgdG8gYSBtdWx0 aS12ZXJzaW9uZWQgZnVuY3Rpb24sIG92ZXJsb2FkIHJlc29sdXRpb24KKyAg ICAgcmV0dXJucyB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaGlnaGVzdCB0YXJn ZXQgcHJpb3JpdHksIHRoYXQgaXMsCisgICAgIHRoZSB2ZXJzaW9uIHRoYXQg d2lsbCBjaGVja2VkIGZvciBkaXNwYXRjaGluZyBmaXJzdC4gIElmIHRoaXMK KyAgICAgdmVyc2lvbiBpcyBpbmxpbmFibGUsIGEgZGlyZWN0IGNhbGwgdG8g dGhpcyB2ZXJzaW9uIGNhbiBiZSBtYWRlCisgICAgIG90aGVyd2lzZSB0aGUg Y2FsbCBzaG91bGQgZ28gdGhyb3VnaCB0aGUgZGlzcGF0Y2hlci4gICovCisK KyAgaWYgKERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChmbikKKyAgICAgICYm ICF0YXJnZXRtLnRhcmdldF9vcHRpb24uY2FuX2lubGluZV9wIChjdXJyZW50 X2Z1bmN0aW9uX2RlY2wsIGZuKSkKKyAgICB7CisgICAgICBmbiA9IGdldF9m dW5jdGlvbl92ZXJzaW9uX2Rpc3BhdGNoZXIgKGZuKTsKKyAgICAgIGlmIChm biA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgIH0KKwogICBpZiAoREVD TF9WSU5ERVggKGZuKSAmJiAoZmxhZ3MgJiBMT09LVVBfTk9OVklSVFVBTCkg PT0gMCkKICAgICB7CiAgICAgICB0cmVlIHQ7CkBAIC04MTMyLDYgKzgxNzYs MzggQEAgam91c3QgKHN0cnVjdCB6X2NhbmRpZGF0ZSAqY2FuZDEsIHN0cnVj dCB6X2NhbmRpZGEKICAgICAgICYmIChJU19UWVBFX09SX0RFQ0xfUCAoY2Fu ZDEtPmZuKSkpCiAgICAgcmV0dXJuIDE7CiAKKyAgLyogRm9yIENhbmRpZGF0 ZXMgb2YgYSBtdWx0aS12ZXJzaW9uZWQgZnVuY3Rpb24sICBtYWtlIHRoZSB2 ZXJzaW9uIHdpdGgKKyAgICAgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgd2luLiAg VGhpcyB2ZXJzaW9uIHdpbGwgYmUgY2hlY2tlZCBmb3IgZGlzcGF0Y2hpbmcK KyAgICAgZmlyc3QuICBJZiB0aGlzIHZlcnNpb24gY2FuIGJlIGlubGluZWQg aW50byB0aGUgY2FsbGVyLCB0aGUgZnJvbnQtZW5kCisgICAgIHdpbGwgc2lt cGx5IG1ha2UgYSBkaXJlY3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLiAgKi8K KworICBpZiAoVFJFRV9DT0RFIChjYW5kMS0+Zm4pID09IEZVTkNUSU9OX0RF Q0wKKyAgICAgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVEIChjYW5kMS0+ Zm4pCisgICAgICAmJiBUUkVFX0NPREUgKGNhbmQyLT5mbikgPT0gRlVOQ1RJ T05fREVDTAorICAgICAgJiYgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKGNh bmQyLT5mbikpCisgICAgeworICAgICAgdHJlZSBmMSA9IFRSRUVfVFlQRSAo Y2FuZDEtPmZuKTsKKyAgICAgIHRyZWUgZjIgPSBUUkVFX1RZUEUgKGNhbmQy LT5mbik7CisgICAgICB0cmVlIHAxID0gVFlQRV9BUkdfVFlQRVMgKGYxKTsK KyAgICAgIHRyZWUgcDIgPSBUWVBFX0FSR19UWVBFUyAoZjIpOworICAgICAK KyAgICAgIC8qIENoZWNrIGlmIGNhbmQxLT5mbiBhbmQgY2FuZDItPmZuIGFy ZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbi4gIEl0CisgICAgICAg ICBpcyBwb3NzaWJsZSB0aGF0IGNhbmQxLT5mbiBhbmQgY2FuZDItPmZuIGFy ZSBmdW5jdGlvbiB2ZXJzaW9ucyBidXQgb2YKKyAgICAgICAgIGRpZmZlcmVu dCBmdW5jdGlvbnMuICBDaGVjayB0eXBlcyB0byBzZWUgaWYgdGhleSBhcmUg dmVyc2lvbnMgb2YgdGhlIHNhbWUKKyAgICAgICAgIGZ1bmN0aW9uLiAgKi8K KyAgICAgIGlmIChjb21wcGFybXMgKHAxLCBwMikKKwkgICYmIHNhbWVfdHlw ZV9wIChUUkVFX1RZUEUgKGYxKSwgVFJFRV9UWVBFIChmMikpKQorCXsKKwkg IC8qIEFsd2F5cyBtYWtlIHRoZSB2ZXJzaW9uIHdpdGggdGhlIGhpZ2hlciBw cmlvcml0eSwgbW9yZQorCSAgICAgc3BlY2lhbGl6ZWQsIHdpbi4gICovCisJ ICBnY2NfYXNzZXJ0ICh0YXJnZXRtLmNvbXBhcmVfdmVyc2lvbl9wcmlvcml0 eSk7CisJICBpZiAodGFyZ2V0bS5jb21wYXJlX3ZlcnNpb25fcHJpb3JpdHkg KGNhbmQxLT5mbiwgY2FuZDItPmZuKSA+PSAwKQorCSAgICByZXR1cm4gMTsK KwkgIGVsc2UKKwkgICAgcmV0dXJuIC0xOworCX0KKyAgICB9CisKICAgLyog YSB2aWFibGUgZnVuY3Rpb24gRjEKICAgICAgaXMgZGVmaW5lZCB0byBiZSBh IGJldHRlciBmdW5jdGlvbiB0aGFuIGFub3RoZXIgdmlhYmxlIGZ1bmN0aW9u IEYyICBpZgogICAgICBmb3IgIGFsbCBhcmd1bWVudHMgaSwgSUNTaShGMSkg aXMgbm90IGEgd29yc2UgY29udmVyc2lvbiBzZXF1ZW5jZSB0aGFuCkBAIC04 NDUyLDYgKzg1MjgsMzcgQEAgdHdlYWs6CiAgIHJldHVybiAwOwogfQogCisv KiBGdW5jdGlvbiBGTiBpcyBtdWx0aS12ZXJzaW9uZWQgYW5kIENBTkRJREFU RVMgY29udGFpbnMgdGhlIGxpc3Qgb2YgYWxsCisgICBvdmVybG9hZGVkIGNh bmRpZGF0ZXMgZm9yIEZOLiAgVGhpcyBmdW5jdGlvbiBleHRyYWN0cyBhbGwg ZnVuY3Rpb25zIGZyb20KKyAgIENBTkRJREFURVMgdGhhdCBhcmUgZnVuY3Rp b24gdmVyc2lvbnMgb2YgRk4gYW5kIGdlbmVyYXRlcyBhIGRpc3BhdGNoZXIK KyAgIGZ1bmN0aW9uIGZvciB0aGlzIG11bHRpLXZlcnNpb25lZCBmdW5jdGlv biBncm91cC4gICovCisKK3N0YXRpYyB2b2lkCitnZW5lcmF0ZV9mdW5jdGlv bl92ZXJzaW9uc19kaXNwYXRjaGVyICh0cmVlIGZuLCBzdHJ1Y3Qgel9jYW5k aWRhdGUgKmNhbmRpZGF0ZXMpCit7CisgIHRyZWUgZjEgPSBUUkVFX1RZUEUg KGZuKTsKKyAgdHJlZSBwMSA9IFRZUEVfQVJHX1RZUEVTIChmMSk7CisgIFZF QyAodHJlZSwgaGVhcCkgKmZuX3Zlcl92ZWMgPSBOVUxMOworICBzdHJ1Y3Qg el9jYW5kaWRhdGUgKnZlciA9IGNhbmRpZGF0ZXM7CisKKyAgZm5fdmVyX3Zl YyA9IFZFQ19hbGxvYyAodHJlZSwgaGVhcCwgMik7CisKKyAgZm9yICg7dmVy OyB2ZXIgPSB2ZXItPm5leHQpCisgICAgeworICAgICAgdHJlZSBmMiA9IFRS RUVfVFlQRSAodmVyLT5mbik7CisgICAgICB0cmVlIHAyID0gVFlQRV9BUkdf VFlQRVMgKGYyKTsKKyAgICAgIC8qIElmIHRoaXMgY2FuZGlkYXRlIGlzIGEg dmVyc2lvbiBvZiBGTiwgdHlwZXMgbXVzdCBtYXRjaC4gICovCisgICAgICBp ZiAoREVDTF9GVU5DVElPTl9WRVJTSU9ORUQgKHZlci0+Zm4pCisgICAgICAg ICAgJiYgY29tcHBhcm1zIChwMSwgcDIpCisJICAmJiBzYW1lX3R5cGVfcCAo VFJFRV9UWVBFIChmMSksIFRSRUVfVFlQRSAoZjIpKSkKKyAgICAgICAgVkVD X3NhZmVfcHVzaCAodHJlZSwgaGVhcCwgZm5fdmVyX3ZlYywgdmVyLT5mbik7 CisgICAgfQorCisgIGdjY19hc3NlcnQgKHRhcmdldG0uZ2V0X2Z1bmN0aW9u X3ZlcnNpb25zX2Rpc3BhdGNoZXIpOworICB0YXJnZXRtLmdldF9mdW5jdGlv bl92ZXJzaW9uc19kaXNwYXRjaGVyIChmbl92ZXJfdmVjKTsKKyAgVkVDX2Zy ZWUgKHRyZWUsIGhlYXAsIGZuX3Zlcl92ZWMpOyAKK30KKwogLyogR2l2ZW4g YSBsaXN0IG9mIGNhbmRpZGF0ZXMgZm9yIG92ZXJsb2FkaW5nLCBmaW5kIHRo ZSBiZXN0IG9uZSwgaWYgYW55LgogICAgVGhpcyBhbGdvcml0aG0gaGFzIGEg d29yc3QgY2FzZSBvZiBPKDJuKSAod2lubmVyIGlzIGxhc3QpLCBhbmQgYSBi ZXN0CiAgICBjYXNlIG9mIE8obi8yKSAodG90YWxseSBhbWJpZ3VvdXMpOyBt dWNoIGJldHRlciB0aGFuIGEgc29ydGluZwpAQCAtODUwNCw2ICs4NjExLDE4 IEBAIHRvdXJuZXkgKHN0cnVjdCB6X2NhbmRpZGF0ZSAqY2FuZGlkYXRlcywg dHN1YnN0X2ZsCiAJcmV0dXJuIE5VTEw7CiAgICAgfQogCisgIC8qIEZvciBt dWx0aXZlcnNpb25lZCBmdW5jdGlvbnMsIGFnZ3JlZ2F0ZSBhbGwgdGhlIHZl cnNpb25zIGhlcmUgZm9yCisgICAgIGdlbmVyYXRpbmcgdGhlIGRpc3BhdGNo ZXIgYm9keSBsYXRlciBpZiBuZWNlc3NhcnkuICBDaGVjayB0byBzZWUgaWYK KyAgICAgdGhlIGRpc3BhdGNoZXIgaXMgYWxyZWFkeSBnZW5lcmF0ZWQgdG8g YXZvaWQgZG9pbmcgdGhpcyBtb3JlIHRoYW4KKyAgICAgb25jZS4gICovCisK KyAgaWYgKFRSRUVfQ09ERSAoY2hhbXAtPmZuKSA9PSBGVU5DVElPTl9ERUNM CisgICAgICAmJiBERUNMX0ZVTkNUSU9OX1ZFUlNJT05FRCAoY2hhbXAtPmZu KQorICAgICAgJiYgKGNncmFwaF9nZXRfbm9kZSAoY2hhbXAtPmZuKSA9PSBO VUxMCisJICB8fCAoY2dyYXBoX2dldF9ub2RlIChjaGFtcC0+Zm4pLT5mdW5j dGlvbl92ZXJzaW9uLmRpc3BhdGNoZXJfcmVzb2x2ZXIKKwkgICAgICA9PSBO VUxMKSkpCisgICAgICBnZW5lcmF0ZV9mdW5jdGlvbl92ZXJzaW9uc19kaXNw YXRjaGVyIChjaGFtcC0+Zm4sIGNhbmRpZGF0ZXMpOworCiAgIHJldHVybiBj aGFtcDsKIH0KIApJbmRleDogZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvY29uZmlnL2kzODYvaTM4Ni5j CShyZXZpc2lvbiAxOTIzNzgpCisrKyBnY2MvY29uZmlnL2kzODYvaTM4Ni5j CSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw4IEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5j bHVkZSAib3B0cy5oIgogI2luY2x1ZGUgImRpYWdub3N0aWMuaCIKICNpbmNs dWRlICJkdW1wZmlsZS5oIgorI2luY2x1ZGUgInRyZWUtcGFzcy5oIgorI2lu Y2x1ZGUgInRyZWUtZmxvdy5oIgogCiBlbnVtIHVwcGVyXzEyOGJpdHNfc3Rh dGUKIHsKQEAgLTI4Mzk5LDYgKzI4NDAxLDk4OCBAQCBpeDg2X2luaXRfbW14 X3NzZV9idWlsdGlucyAodm9pZCkKICAgICB9CiB9CiAKKworLyogVGhpcyBh ZGRzIGEgY29uZGl0aW9uIHRvIHRoZSBiYXNpY19ibG9jayBORVdfQkIgaW4g ZnVuY3Rpb24gRlVOQ1RJT05fREVDTAorICAgdG8gcmV0dXJuIGEgcG9pbnRl ciB0byBWRVJTSU9OX0RFQ0wgaWYgdGhlIG91dGNvbWUgb2YgdGhlIGV4cHJl c3Npb24KKyAgIGZvcm1lZCBieSBQUkVESUNBVEVfQ0hBSU4gaXMgdHJ1ZS4g IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZHVyaW5nCisgICB2ZXJz aW9uIGRpc3BhdGNoIHRvIGRlY2lkZSB3aGljaCBmdW5jdGlvbiB2ZXJzaW9u IHRvIGV4ZWN1dGUuICBJdCByZXR1cm5zCisgICB0aGUgYmFzaWMgYmxvY2sg YXQgdGhlIGVuZCwgdG8gd2hpY2ggbW9yZSBjb25kaXRpb25zIGNhbiBiZSBh ZGRlZC4gICovCisKK3N0YXRpYyBiYXNpY19ibG9jaworYWRkX2NvbmRpdGlv bl90b19iYiAodHJlZSBmdW5jdGlvbl9kZWNsLCB0cmVlIHZlcnNpb25fZGVj bCwKKwkJICAgICB0cmVlIHByZWRpY2F0ZV9jaGFpbiwgYmFzaWNfYmxvY2sg bmV3X2JiKQoreworICBnaW1wbGUgcmV0dXJuX3N0bXQ7CisgIHRyZWUgY29u dmVydF9leHByLCByZXN1bHRfdmFyOworICBnaW1wbGUgY29udmVydF9zdG10 OworICBnaW1wbGUgY2FsbF9jb25kX3N0bXQ7CisgIGdpbXBsZSBpZl9lbHNl X3N0bXQ7CisKKyAgYmFzaWNfYmxvY2sgYmIxLCBiYjIsIGJiMzsKKyAgZWRn ZSBlMTIsIGUyMzsKKworICB0cmVlIGNvbmRfdmFyLCBhbmRfZXhwcl92YXIg PSBOVUxMX1RSRUU7CisgIGdpbXBsZV9zZXEgZ3NlcTsKKworICB0cmVlIG9s ZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgIHRyZWUgcHJlZGljYXRlX2Rl Y2wsIHByZWRpY2F0ZV9hcmc7CisKKyAgb2xkX2N1cnJlbnRfZnVuY3Rpb25f ZGVjbCA9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKyAgcHVzaF9jZnVuIChE RUNMX1NUUlVDVF9GVU5DVElPTiAoZnVuY3Rpb25fZGVjbCkpOworICBjdXJy ZW50X2Z1bmN0aW9uX2RlY2wgPSBmdW5jdGlvbl9kZWNsOworCisgIGdjY19h c3NlcnQgKG5ld19iYiAhPSBOVUxMKTsKKyAgZ3NlcSA9IGJiX3NlcSAobmV3 X2JiKTsKKworCisgIGNvbnZlcnRfZXhwciA9IGJ1aWxkMSAoQ09OVkVSVF9F WFBSLCBwdHJfdHlwZV9ub2RlLAorCSAgICAgCQkgYnVpbGRfZm9sZF9hZGRy X2V4cHIgKHZlcnNpb25fZGVjbCkpOworICByZXN1bHRfdmFyID0gY3JlYXRl X3RtcF92YXIgKHB0cl90eXBlX25vZGUsIE5VTEwpOworICBjb252ZXJ0X3N0 bXQgPSBnaW1wbGVfYnVpbGRfYXNzaWduIChyZXN1bHRfdmFyLCBjb252ZXJ0 X2V4cHIpOyAKKyAgcmV0dXJuX3N0bXQgPSBnaW1wbGVfYnVpbGRfcmV0dXJu IChyZXN1bHRfdmFyKTsKKworICBpZiAocHJlZGljYXRlX2NoYWluID09IE5V TExfVFJFRSkKKyAgICB7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10ICgm Z3NlcSwgY29udmVydF9zdG10KTsKKyAgICAgIGdpbXBsZV9zZXFfYWRkX3N0 bXQgKCZnc2VxLCByZXR1cm5fc3RtdCk7CisgICAgICBzZXRfYmJfc2VxIChu ZXdfYmIsIGdzZXEpOworICAgICAgZ2ltcGxlX3NldF9iYiAoY29udmVydF9z dG10LCBuZXdfYmIpOworICAgICAgZ2ltcGxlX3NldF9iYiAocmV0dXJuX3N0 bXQsIG5ld19iYik7CisgICAgICBwb3BfY2Z1biAoKTsKKyAgICAgIGN1cnJl bnRfZnVuY3Rpb25fZGVjbCA9IG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2w7 CisgICAgICByZXR1cm4gbmV3X2JiOworICAgIH0KKworICB3aGlsZSAocHJl ZGljYXRlX2NoYWluICE9IE5VTEwpCisgICAgeworICAgICAgY29uZF92YXIg PSBjcmVhdGVfdG1wX3ZhciAoaW50ZWdlcl90eXBlX25vZGUsIE5VTEwpOwor ICAgICAgcHJlZGljYXRlX2RlY2wgPSBUUkVFX1BVUlBPU0UgKHByZWRpY2F0 ZV9jaGFpbik7CisgICAgICBwcmVkaWNhdGVfYXJnID0gVFJFRV9WQUxVRSAo cHJlZGljYXRlX2NoYWluKTsKKyAgICAgIGNhbGxfY29uZF9zdG10ID0gZ2lt cGxlX2J1aWxkX2NhbGwgKHByZWRpY2F0ZV9kZWNsLCAxLCBwcmVkaWNhdGVf YXJnKTsKKyAgICAgIGdpbXBsZV9jYWxsX3NldF9saHMgKGNhbGxfY29uZF9z dG10LCBjb25kX3Zhcik7CisKKyAgICAgIGdpbXBsZV9zZXRfYmxvY2sgKGNh bGxfY29uZF9zdG10LCBERUNMX0lOSVRJQUwgKGZ1bmN0aW9uX2RlY2wpKTsK KyAgICAgIGdpbXBsZV9zZXRfYmIgKGNhbGxfY29uZF9zdG10LCBuZXdfYmIp OworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIGNhbGxfY29u ZF9zdG10KTsKKworICAgICAgcHJlZGljYXRlX2NoYWluID0gVFJFRV9DSEFJ TiAocHJlZGljYXRlX2NoYWluKTsKKyAgICAgIAorICAgICAgaWYgKGFuZF9l eHByX3ZhciA9PSBOVUxMKQorICAgICAgICBhbmRfZXhwcl92YXIgPSBjb25k X3ZhcjsKKyAgICAgIGVsc2UKKwl7CisJICBnaW1wbGUgYXNzaWduX3N0bXQ7 CisJICAvKiBVc2UgTUlOX0VYUFIgdG8gY2hlY2sgaWYgYW55IGludGVnZXIg aXMgemVybz8uCisJICAgICBhbmRfZXhwcl92YXIgPSBtaW5fZXhwciA8Y29u ZF92YXIsIGFuZF9leHByX3Zhcj4gICovCisJICBhc3NpZ25fc3RtdCA9IGdp bXBsZV9idWlsZF9hc3NpZ24gKGFuZF9leHByX3ZhciwKKwkJCSAgYnVpbGQy IChNSU5fRVhQUiwgaW50ZWdlcl90eXBlX25vZGUsCisJCQkJICBjb25kX3Zh ciwgYW5kX2V4cHJfdmFyKSk7CisKKwkgIGdpbXBsZV9zZXRfYmxvY2sgKGFz c2lnbl9zdG10LCBERUNMX0lOSVRJQUwgKGZ1bmN0aW9uX2RlY2wpKTsKKwkg IGdpbXBsZV9zZXRfYmIgKGFzc2lnbl9zdG10LCBuZXdfYmIpOworCSAgZ2lt cGxlX3NlcV9hZGRfc3RtdCAoJmdzZXEsIGFzc2lnbl9zdG10KTsKKwl9Cisg ICAgfQorCisgIGlmX2Vsc2Vfc3RtdCA9IGdpbXBsZV9idWlsZF9jb25kIChH VF9FWFBSLCBhbmRfZXhwcl92YXIsCisJICAJCSAgICAgICAgICAgIGludGVn ZXJfemVyb19ub2RlLAorCQkJCSAgICBOVUxMX1RSRUUsIE5VTExfVFJFRSk7 CisgIGdpbXBsZV9zZXRfYmxvY2sgKGlmX2Vsc2Vfc3RtdCwgREVDTF9JTklU SUFMIChmdW5jdGlvbl9kZWNsKSk7CisgIGdpbXBsZV9zZXRfYmIgKGlmX2Vs c2Vfc3RtdCwgbmV3X2JiKTsKKyAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmdz ZXEsIGlmX2Vsc2Vfc3RtdCk7CisKKyAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAo JmdzZXEsIGNvbnZlcnRfc3RtdCk7CisgIGdpbXBsZV9zZXFfYWRkX3N0bXQg KCZnc2VxLCByZXR1cm5fc3RtdCk7CisgIHNldF9iYl9zZXEgKG5ld19iYiwg Z3NlcSk7CisKKyAgYmIxID0gbmV3X2JiOworICBlMTIgPSBzcGxpdF9ibG9j ayAoYmIxLCBpZl9lbHNlX3N0bXQpOworICBiYjIgPSBlMTItPmRlc3Q7Cisg IGUxMi0+ZmxhZ3MgJj0gfkVER0VfRkFMTFRIUlU7CisgIGUxMi0+ZmxhZ3Mg fD0gRURHRV9UUlVFX1ZBTFVFOworCisgIGUyMyA9IHNwbGl0X2Jsb2NrIChi YjIsIHJldHVybl9zdG10KTsKKworICBnaW1wbGVfc2V0X2JiIChjb252ZXJ0 X3N0bXQsIGJiMik7CisgIGdpbXBsZV9zZXRfYmIgKHJldHVybl9zdG10LCBi YjIpOworCisgIGJiMyA9IGUyMy0+ZGVzdDsKKyAgbWFrZV9lZGdlIChiYjEs IGJiMywgRURHRV9GQUxTRV9WQUxVRSk7IAorCisgIHJlbW92ZV9lZGdlIChl MjMpOworICBtYWtlX2VkZ2UgKGJiMiwgRVhJVF9CTE9DS19QVFIsIDApOwor CisgIHBvcF9jZnVuICgpOworICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBv bGRfY3VycmVudF9mdW5jdGlvbl9kZWNsOworCisgIHJldHVybiBiYjM7Cit9 CisKKy8qIFRoaXMgcGFyc2VzIHRoZSBhdHRyaWJ1dGUgYXJndW1lbnRzIHRv IHRhcmdldCBpbiBERUNMIGFuZCBkZXRlcm1pbmVzCisgICB0aGUgcmlnaHQg YnVpbHRpbiB0byB1c2UgdG8gbWF0Y2ggdGhlIHBsYXRmb3JtIHNwZWNpZmlj YXRpb24uCisgICBGb3Igbm93LCBvbmx5IG9uZSB0YXJnZXQgYXJndW1lbnQg KCJhcmNoPSIgb3IgIjwtbT54eHgiKSBpcyBhbGxvd2VkLgorICAgSXQgcmV0 dXJucyB0aGUgcHJpb3JpdHkgdmFsdWUgZm9yIHRoaXMgdmVyc2lvbiBkZWNs LiAgSWYgUFJFRElDQVRFX0xJU1QKKyAgIGlzIG5vdCBOVUxMLCBpdCBzdG9y ZXMgdGhlIGxpc3Qgb2YgY3B1IGZlYXR1cmVzIHRoYXQgbmVlZCB0byBiZSBj aGVja2VkCisgICBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhpcyBmdW5jdGlvbi4g ICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2dldF9idWlsdGluX2NvZGVf Zm9yX3ZlcnNpb24gKHRyZWUgZGVjbCwgdHJlZSAqcHJlZGljYXRlX2xpc3Qp Cit7CisgIHRyZWUgYXR0cnM7CisgIHN0cnVjdCBjbF90YXJnZXRfb3B0aW9u IGN1cl90YXJnZXQ7CisgIHRyZWUgdGFyZ2V0X25vZGU7CisgIHN0cnVjdCBj bF90YXJnZXRfb3B0aW9uICpuZXdfdGFyZ2V0OworICBjb25zdCBjaGFyICph cmdfc3RyID0gTlVMTDsKKyAgY29uc3QgY2hhciAqYXR0cnNfc3RyID0gTlVM TDsKKyAgY2hhciAqdG9rX3N0ciA9IE5VTEw7CisgIGNoYXIgKnRva2VuOwor ICB1bnNpZ25lZCBpbnQgcHJpb3JpdHkgPSAwOworCisgIC8qIFByaW9yaXR5 IG9mIGkzODYgZmVhdHVyZXMsIGdyZWF0ZXIgdmFsdWUgaXMgaGlnaGVyIHBy aW9yaXR5LiAgIFRoaXMgaXMKKyAgICAgdXNlZCB0byBkZWNpZGUgdGhlIG9y ZGVyIGluIHdoaWNoIGZ1bmN0aW9uIGRpc3BhdGNoIG11c3QgaGFwcGVuLiAg Rm9yCisgICAgIGluc3RhbmNlLCBhIHZlcnNpb24gc3BlY2lhbGl6ZWQgZm9y IFNTRTQuMiBzaG91bGQgYmUgY2hlY2tlZCBmb3IgZGlzcGF0Y2gKKyAgICAg YmVmb3JlIGEgdmVyc2lvbiBmb3IgU1NFMywgYXMgU1NFNC4yIGltcGxpZXMg U1NFMy4gICovCisgIGVudW0gZmVhdHVyZV9wcmlvcml0eQorICB7CisgICAg UF9aRVJPID0gMCwKKyAgICBQX01NWCwKKyAgICBQX1NTRSwKKyAgICBQX1NT RTIsCisgICAgUF9TU0UzLAorICAgIFBfU1NTRTMsCisgICAgUF9QUk9DX1NT U0UzLAorICAgIFBfU1NFNF9hLAorICAgIFBfUFJPQ19TU0U0X2EsCisgICAg UF9TU0U0XzEsCisgICAgUF9TU0U0XzIsCisgICAgUF9QUk9DX1NTRTRfMiwK KyAgICBQX1BPUENOVCwKKyAgICBQX0FWWCwKKyAgICBQX0FWWDIsCisgICAg UF9GTUEsCisgICAgUF9QUk9DX0ZNQQorICB9OworCisgIC8qIFRoZXNlIGFy ZSB0aGUgdGFyZ2V0IGF0dHJpYnV0ZSBzdHJpbmdzIGZvciB3aGljaCBhIGRp c3BhdGNoZXIgaXMKKyAgICAgYXZhaWxhYmxlLCBmcm9tIGZvbGRfYnVpbHRp bl9jcHUuICAqLworCisgIHN0YXRpYyBzdHJ1Y3QgX2ZlYXR1cmVfbGlzdAor ICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWU7CisgICAgICBj b25zdCBlbnVtIGZlYXR1cmVfcHJpb3JpdHkgcHJpb3JpdHk7CisgICAgfQor ICBjb25zdCBmZWF0dXJlX2xpc3RbXSA9CisgICAgeworICAgICAgeyJtbXgi LCBQX01NWH0sCisgICAgICB7InNzZSIsIFBfU1NFfSwKKyAgICAgIHsic3Nl MiIsIFBfU1NFMn0sCisgICAgICB7InNzZTMiLCBQX1NTRTN9LAorICAgICAg eyJzc3NlMyIsIFBfU1NTRTN9LAorICAgICAgeyJzc2U0LjEiLCBQX1NTRTRf MX0sCisgICAgICB7InNzZTQuMiIsIFBfU1NFNF8yfSwKKyAgICAgIHsicG9w Y250IiwgUF9QT1BDTlR9LAorICAgICAgeyJhdngiLCBQX0FWWH0sCisgICAg ICB7ImF2eDIiLCBQX0FWWDJ9CisgICAgfTsKKworCisgIHN0YXRpYyB1bnNp Z25lZCBpbnQgTlVNX0ZFQVRVUkVTCisgICAgPSBzaXplb2YgKGZlYXR1cmVf bGlzdCkgLyBzaXplb2YgKHN0cnVjdCBfZmVhdHVyZV9saXN0KTsKKworICB1 bnNpZ25lZCBpbnQgaTsKKworICB0cmVlIHByZWRpY2F0ZV9jaGFpbiA9IE5V TExfVFJFRTsKKyAgdHJlZSBwcmVkaWNhdGVfZGVjbCwgcHJlZGljYXRlX2Fy ZzsKKworICBhdHRycyA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJ0YXJnZXQiLCBE RUNMX0FUVFJJQlVURVMgKGRlY2wpKTsKKyAgZ2NjX2Fzc2VydCAoYXR0cnMg IT0gTlVMTCk7CisKKyAgYXR0cnMgPSBUUkVFX1ZBTFVFIChUUkVFX1ZBTFVF IChhdHRycykpOworCisgIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAoYXR0cnMp ID09IFNUUklOR19DU1QpOworICBhdHRyc19zdHIgPSBUUkVFX1NUUklOR19Q T0lOVEVSIChhdHRycyk7CisKKworICAvKiBIYW5kbGUgYXJjaD0gaWYgc3Bl Y2lmaWVkLiAgRm9yIHByaW9yaXR5LCBzZXQgaXQgdG8gYmUgMSBtb3JlIHRo YW4KKyAgICAgdGhlIGJlc3QgaW5zdHJ1Y3Rpb24gc2V0IHRoZSBwcm9jZXNz b3IgY2FuIGhhbmRsZS4gIEZvciBpbnN0YW5jZSwgaWYKKyAgICAgdGhlcmUg aXMgYSB2ZXJzaW9uIGZvciBhdG9tIGFuZCBhIHZlcnNpb24gZm9yIHNzc2Uz ICh0aGUgaGlnaGVzdCBJU0EKKyAgICAgcHJpb3JpdHkgZm9yIGF0b20pLCB0 aGUgYXRvbSB2ZXJzaW9uIG11c3QgYmUgY2hlY2tlZCBmb3IgZGlzcGF0Y2gK KyAgICAgYmVmb3JlIHRoZSBzc3NlMyB2ZXJzaW9uLiAqLworICBpZiAoc3Ry c3RyIChhdHRyc19zdHIsICJhcmNoPSIpICE9IE5VTEwpCisgICAgeworICAg ICAgY2xfdGFyZ2V0X29wdGlvbl9zYXZlICgmY3VyX3RhcmdldCwgJmdsb2Jh bF9vcHRpb25zKTsKKyAgICAgIHRhcmdldF9ub2RlID0gaXg4Nl92YWxpZF90 YXJnZXRfYXR0cmlidXRlX3RyZWUgKGF0dHJzKTsKKyAgICAKKyAgICAgIGdj Y19hc3NlcnQgKHRhcmdldF9ub2RlKTsKKyAgICAgIG5ld190YXJnZXQgPSBU UkVFX1RBUkdFVF9PUFRJT04gKHRhcmdldF9ub2RlKTsKKyAgICAgIGdjY19h c3NlcnQgKG5ld190YXJnZXQpOworICAgICAgCisgICAgICBpZiAobmV3X3Rh cmdldC0+YXJjaF9zcGVjaWZpZWQgJiYgbmV3X3RhcmdldC0+YXJjaCA+IDAp CisJeworCSAgc3dpdGNoIChuZXdfdGFyZ2V0LT5hcmNoKQorCSAgICB7CisJ ICAgIGNhc2UgUFJPQ0VTU09SX0NPUkUyXzMyOgorCSAgICBjYXNlIFBST0NF U1NPUl9DT1JFMl82NDoKKwkgICAgICBhcmdfc3RyID0gImNvcmUyIjsKKwkg ICAgICBwcmlvcml0eSA9IFBfUFJPQ19TU1NFMzsKKwkgICAgICBicmVhazsK KwkgICAgY2FzZSBQUk9DRVNTT1JfQ09SRUk3XzMyOgorCSAgICBjYXNlIFBS T0NFU1NPUl9DT1JFSTdfNjQ6CisJICAgICAgYXJnX3N0ciA9ICJjb3JlaTci OworCSAgICAgIHByaW9yaXR5ID0gUF9QUk9DX1NTRTRfMjsKKwkgICAgICBi cmVhazsKKwkgICAgY2FzZSBQUk9DRVNTT1JfQVRPTToKKwkgICAgICBhcmdf c3RyID0gImF0b20iOworCSAgICAgIHByaW9yaXR5ID0gUF9QUk9DX1NTU0Uz OworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIFBST0NFU1NPUl9BTURGQU0x MDoKKwkgICAgICBhcmdfc3RyID0gImFtZGZhbTEwaCI7CisJICAgICAgcHJp b3JpdHkgPSBQX1BST0NfU1NFNF9hOworCSAgICAgIGJyZWFrOworCSAgICBj YXNlIFBST0NFU1NPUl9CRFZFUjE6CisJICAgICAgYXJnX3N0ciA9ICJiZHZl cjEiOworCSAgICAgIHByaW9yaXR5ID0gUF9QUk9DX0ZNQTsKKwkgICAgICBi cmVhazsKKwkgICAgY2FzZSBQUk9DRVNTT1JfQkRWRVIyOgorCSAgICAgIGFy Z19zdHIgPSAiYmR2ZXIyIjsKKwkgICAgICBwcmlvcml0eSA9IFBfUFJPQ19G TUE7CisJICAgICAgYnJlYWs7CisJICAgIH0gIAorCX0gICAgCisgICAgCisg ICAgICBjbF90YXJnZXRfb3B0aW9uX3Jlc3RvcmUgKCZnbG9iYWxfb3B0aW9u cywgJmN1cl90YXJnZXQpOworCQorICAgICAgaWYgKHByZWRpY2F0ZV9saXN0 ICYmIGFyZ19zdHIgPT0gTlVMTCkKKwl7CisJICBlcnJvcl9hdCAoREVDTF9T T1VSQ0VfTE9DQVRJT04gKGRlY2wpLAorCSAgICAJIk5vIGRpc3BhdGNoZXIg Zm91bmQgZm9yIHRoZSB2ZXJzaW9uaW5nIGF0dHJpYnV0ZXMiKTsKKwkgIHJl dHVybiAwOworCX0KKyAgICAKKyAgICAgIGlmIChwcmVkaWNhdGVfbGlzdCkK Kwl7CisgICAgICAgICAgcHJlZGljYXRlX2RlY2wgPSBpeDg2X2J1aWx0aW5z IFsoaW50KSBJWDg2X0JVSUxUSU5fQ1BVX0lTXTsKKyAgICAgICAgICAvKiBG b3IgYSBDIHN0cmluZyBsaXRlcmFsIHRoZSBsZW5ndGggaW5jbHVkZXMgdGhl IHRyYWlsaW5nIE5VTEwuICAqLworICAgICAgICAgIHByZWRpY2F0ZV9hcmcg PSBidWlsZF9zdHJpbmdfbGl0ZXJhbCAoc3RybGVuIChhcmdfc3RyKSArIDEs IGFyZ19zdHIpOworICAgICAgICAgIHByZWRpY2F0ZV9jaGFpbiA9IHRyZWVf Y29ucyAocHJlZGljYXRlX2RlY2wsIHByZWRpY2F0ZV9hcmcsCisJCQkJICAg ICAgIHByZWRpY2F0ZV9jaGFpbik7CisJfQorICAgIH0KKworICAvKiBQcm9j ZXNzIGZlYXR1cmUgbmFtZS4gICovCisgIHRva19zdHIgPSAgKGNoYXIgKikg eG1hbGxvYyAoc3RybGVuIChhdHRyc19zdHIpICsgMSk7CisgIHN0cmNweSAo dG9rX3N0ciwgYXR0cnNfc3RyKTsKKyAgdG9rZW4gPSBzdHJ0b2sgKHRva19z dHIsICIsIik7CisgIHByZWRpY2F0ZV9kZWNsID0gaXg4Nl9idWlsdGlucyBb KGludCkgSVg4Nl9CVUlMVElOX0NQVV9TVVBQT1JUU107CisKKyAgd2hpbGUg KHRva2VuICE9IE5VTEwpCisgICAgeworICAgICAgLyogRG8gbm90IHByb2Nl c3MgImFyY2g9IiAgKi8KKyAgICAgIGlmIChzdHJuY21wICh0b2tlbiwgImFy Y2g9IiwgNSkgPT0gMCkKKwl7CisJICB0b2tlbiA9IHN0cnRvayAoTlVMTCwg IiwiKTsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIGZvciAoaSA9IDA7IGkg PCBOVU1fRkVBVFVSRVM7ICsraSkKKwl7CisJICBpZiAoc3RyY21wICh0b2tl biwgZmVhdHVyZV9saXN0W2ldLm5hbWUpID09IDApCisJICAgIHsKKwkgICAg ICBpZiAocHJlZGljYXRlX2xpc3QpCisJCXsKKwkJICBwcmVkaWNhdGVfYXJn ID0gYnVpbGRfc3RyaW5nX2xpdGVyYWwgKAorCQkJCSAgc3RybGVuIChmZWF0 dXJlX2xpc3RbaV0ubmFtZSkgKyAxLAorCQkJCSAgZmVhdHVyZV9saXN0W2ld Lm5hbWUpOworCQkgIHByZWRpY2F0ZV9jaGFpbiA9IHRyZWVfY29ucyAocHJl ZGljYXRlX2RlY2wsIHByZWRpY2F0ZV9hcmcsCisJCQkJCSAgICAgICBwcmVk aWNhdGVfY2hhaW4pOworCQl9CisJICAgICAgLyogRmluZCB0aGUgbWF4aW11 bSBwcmlvcml0eSBmZWF0dXJlLiAgKi8KKwkgICAgICBpZiAoZmVhdHVyZV9s aXN0W2ldLnByaW9yaXR5ID4gcHJpb3JpdHkpCisJCXByaW9yaXR5ID0gZmVh dHVyZV9saXN0W2ldLnByaW9yaXR5OworCisJICAgICAgYnJlYWs7CisJICAg IH0KKwl9CisgICAgICBpZiAocHJlZGljYXRlX2xpc3QgJiYgaSA9PSBOVU1f RkVBVFVSRVMpCisJeworCSAgZXJyb3JfYXQgKERFQ0xfU09VUkNFX0xPQ0FU SU9OIChkZWNsKSwKKwkJICAgICJObyBkaXNwYXRjaGVyIGZvdW5kIGZvciAl cyIsIHRva2VuKTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIHRva2VuID0g c3RydG9rIChOVUxMLCAiLCIpOworICAgIH0KKyAgZnJlZSAodG9rX3N0cik7 CisKKyAgaWYgKHByZWRpY2F0ZV9saXN0ICYmIHByZWRpY2F0ZV9jaGFpbiA9 PSBOVUxMX1RSRUUpCisgICAgeworICAgICAgZXJyb3JfYXQgKERFQ0xfU09V UkNFX0xPQ0FUSU9OIChkZWNsKSwKKwkgICAgICAgICJObyBkaXNwYXRjaGVy IGZvdW5kIGZvciB0aGUgdmVyc2lvbmluZyBhdHRyaWJ1dGVzIDogJXMiLAor CSAgICAgICAgYXR0cnNfc3RyKTsKKyAgICAgIHJldHVybiAwOworICAgIH0K KyAgZWxzZSBpZiAocHJlZGljYXRlX2xpc3QpCisgICAgeworICAgICAgcHJl ZGljYXRlX2NoYWluID0gbnJldmVyc2UgKHByZWRpY2F0ZV9jaGFpbik7Cisg ICAgICAqcHJlZGljYXRlX2xpc3QgPSBwcmVkaWNhdGVfY2hhaW47CisgICAg fQorCisgIHJldHVybiBwcmlvcml0eTsgCit9CisKKy8qIFRoaXMgY29tcGFy ZXMgdGhlIHByaW9yaXR5IG9mIHRhcmdldCBmZWF0dXJlcyBpbiBmdW5jdGlv biBERUNMMQorICAgYW5kIERFQ0wyLiAgSXQgcmV0dXJucyBwb3NpdGl2ZSB2 YWx1ZSBpZiBERUNMMSBpcyBoaWdoZXIgcHJpb3JpdHksCisgICBuZWdhdGl2 ZSB2YWx1ZSBpZiBERUNMMiBpcyBoaWdoZXIgcHJpb3JpdHkgYW5kIDAgaWYg dGhleSBhcmUgdGhlCisgICBzYW1lLiAgKi8KKworc3RhdGljIGludAoraXg4 Nl9jb21wYXJlX3ZlcnNpb25fcHJpb3JpdHkgKHRyZWUgZGVjbDEsIHRyZWUg ZGVjbDIpCit7CisgIHVuc2lnbmVkIGludCBwcmlvcml0eTEgPSAwOworICB1 bnNpZ25lZCBpbnQgcHJpb3JpdHkyID0gMDsKKworICBpZiAobG9va3VwX2F0 dHJpYnV0ZSAoInRhcmdldCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbDEpKSAh PSBOVUxMKQorICAgIHByaW9yaXR5MSA9IGdldF9idWlsdGluX2NvZGVfZm9y X3ZlcnNpb24gKGRlY2wxLCBOVUxMKTsKKworICBpZiAobG9va3VwX2F0dHJp YnV0ZSAoInRhcmdldCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbDIpKSAhPSBO VUxMKQorICAgIHByaW9yaXR5MiA9IGdldF9idWlsdGluX2NvZGVfZm9yX3Zl cnNpb24gKGRlY2wyLCBOVUxMKTsKKworICByZXR1cm4gKGludClwcmlvcml0 eTEgLSAoaW50KXByaW9yaXR5MjsKK30KKworLyogVjEgYW5kIFYyIHBvaW50 IHRvIGZ1bmN0aW9uIHZlcnNpb25zIHdpdGggZGlmZmVyZW50IHByaW9yaXRp ZXMKKyAgIGJhc2VkIG9uIHRoZSB0YXJnZXQgSVNBLiAgVGhpcyBmdW5jdGlv biBjb21wYXJlcyB0aGVpciBwcmlvcml0aWVzLiAgKi8KKyAKK3N0YXRpYyBp bnQKK2ZlYXR1cmVfY29tcGFyZSAoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZv aWQgKnYyKQoreworICB0eXBlZGVmIHN0cnVjdCBfZnVuY3Rpb25fdmVyc2lv bl9pbmZvCisgICAgeworICAgICAgdHJlZSB2ZXJzaW9uX2RlY2w7CisgICAg ICB0cmVlIHByZWRpY2F0ZV9jaGFpbjsKKyAgICAgIHVuc2lnbmVkIGludCBk aXNwYXRjaF9wcmlvcml0eTsKKyAgICB9IGZ1bmN0aW9uX3ZlcnNpb25faW5m bzsKKworICBjb25zdCBmdW5jdGlvbl92ZXJzaW9uX2luZm8gYzEgPSAqKGNv bnN0IGZ1bmN0aW9uX3ZlcnNpb25faW5mbyAqKXYxOworICBjb25zdCBmdW5j dGlvbl92ZXJzaW9uX2luZm8gYzIgPSAqKGNvbnN0IGZ1bmN0aW9uX3ZlcnNp b25faW5mbyAqKXYyOworICByZXR1cm4gKGMyLmRpc3BhdGNoX3ByaW9yaXR5 IC0gYzEuZGlzcGF0Y2hfcHJpb3JpdHkpOworfQorCisvKiBUaGlzIGZ1bmN0 aW9uIGdlbmVyYXRlcyB0aGUgZGlzcGF0Y2ggZnVuY3Rpb24gZm9yCisgICBt dWx0aS12ZXJzaW9uZWQgZnVuY3Rpb25zLiAgRElTUEFUQ0hfREVDTCBpcyB0 aGUgZnVuY3Rpb24gd2hpY2ggd2lsbAorICAgY29udGFpbiB0aGUgZGlzcGF0 Y2ggbG9naWMuICBGTkRFQ0xTIGFyZSB0aGUgZnVuY3Rpb24gY2hvaWNlcyBm b3IKKyAgIGRpc3BhdGNoLCBhbmQgaXMgYSB0cmVlIGNoYWluLiAgRU1QVFlf QkIgaXMgdGhlIGJhc2ljIGJsb2NrIHBvaW50ZXIKKyAgIGluIERJU1BBVENI X0RFQ0wgaW4gd2hpY2ggdGhlIGRpc3BhdGNoIGNvZGUgaXMgZ2VuZXJhdGVk LiAgKi8KKworc3RhdGljIGludAorZGlzcGF0Y2hfZnVuY3Rpb25fdmVyc2lv bnMgKHRyZWUgZGlzcGF0Y2hfZGVjbCwKKwkJCSAgICB2b2lkICpmbmRlY2xz X3AsCisJCQkgICAgYmFzaWNfYmxvY2sgKmVtcHR5X2JiKQoreworICB0cmVl IGRlZmF1bHRfZGVjbDsKKyAgZ2ltcGxlIGlmdW5jX2NwdV9pbml0X3N0bXQ7 CisgIGdpbXBsZV9zZXEgZ3NlcTsKKyAgdHJlZSBvbGRfY3VycmVudF9mdW5j dGlvbl9kZWNsOworICBpbnQgaXg7CisgIHRyZWUgZWxlOworICBWRUMgKHRy ZWUsIGhlYXApICpmbmRlY2xzOworICB1bnNpZ25lZCBpbnQgbnVtX3ZlcnNp b25zID0gMDsKKyAgdW5zaWduZWQgaW50IGFjdHVhbF92ZXJzaW9ucyA9IDA7 CisgIHVuc2lnbmVkIGludCBpOworCisgIHN0cnVjdCBfZnVuY3Rpb25fdmVy c2lvbl9pbmZvCisgICAgeworICAgICAgdHJlZSB2ZXJzaW9uX2RlY2w7Cisg ICAgICB0cmVlIHByZWRpY2F0ZV9jaGFpbjsKKyAgICAgIHVuc2lnbmVkIGlu dCBkaXNwYXRjaF9wcmlvcml0eTsKKyAgICB9KmZ1bmN0aW9uX3ZlcnNpb25f aW5mbzsKKworICBnY2NfYXNzZXJ0IChkaXNwYXRjaF9kZWNsICE9IE5VTEwK KwkgICAgICAmJiBmbmRlY2xzX3AgIT0gTlVMTAorCSAgICAgICYmIGVtcHR5 X2JiICE9IE5VTEwpOworCisgIC8qZm5kZWNsc19wIGlzIGFjdHVhbGx5IGEg dmVjdG9yLiAgKi8KKyAgZm5kZWNscyA9IChWRUMgKHRyZWUsIGhlYXApICop Zm5kZWNsc19wOworCisgIC8qIEF0bGVhc3Qgb25lIG1vcmUgdmVyc2lvbiBv dGhlciB0aGFuIHRoZSBkZWZhdWx0LiAgKi8KKyAgbnVtX3ZlcnNpb25zID0g VkVDX2xlbmd0aCAodHJlZSwgZm5kZWNscyk7CisgIGdjY19hc3NlcnQgKG51 bV92ZXJzaW9ucyA+PSAyKTsKKworICBmdW5jdGlvbl92ZXJzaW9uX2luZm8g PSAoc3RydWN0IF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gKikKKyAgICB4bWFs bG9jICgobnVtX3ZlcnNpb25zIC0gMSkgKiBzaXplb2YgKHN0cnVjdCBfZnVu Y3Rpb25fdmVyc2lvbl9pbmZvKSk7CisKKyAgLyogVGhlIGZpcnN0IHZlcnNp b24gaW4gdGhlIHZlY3RvciBpcyB0aGUgZGVmYXVsdCBkZWNsLiAgKi8KKyAg ZGVmYXVsdF9kZWNsID0gVkVDX2luZGV4ICh0cmVlLCBmbmRlY2xzLCAwKTsK KworICBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNsID0gY3VycmVudF9mdW5j dGlvbl9kZWNsOworICBwdXNoX2NmdW4gKERFQ0xfU1RSVUNUX0ZVTkNUSU9O IChkaXNwYXRjaF9kZWNsKSk7CisgIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9 IGRpc3BhdGNoX2RlY2w7CisKKyAgZ3NlcSA9IGJiX3NlcSAoKmVtcHR5X2Ji KTsKKyAgLyogRnVuY3Rpb24gdmVyc2lvbiBkaXNwYXRjaCBpcyB2aWEgSUZV TkMuICBJRlVOQyByZXNvbHZlcnMgZmlyZSBiZWZvcmUKKyAgICAgY29uc3Ry dWN0b3JzLCBzbyBleHBsaWNpdHkgY2FsbCBfX2J1aWx0aW5fY3B1X2luaXQg aGVyZS4gICovCisgIGlmdW5jX2NwdV9pbml0X3N0bXQgPSBnaW1wbGVfYnVp bGRfY2FsbF92ZWMgKAorICAgICAgICAgICAgICAgICAgICAgaXg4Nl9idWls dGlucyBbKGludCkgSVg4Nl9CVUlMVElOX0NQVV9JTklUXSwgTlVMTCk7Cisg IGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZnc2VxLCBpZnVuY19jcHVfaW5pdF9z dG10KTsKKyAgZ2ltcGxlX3NldF9iYiAoaWZ1bmNfY3B1X2luaXRfc3RtdCwg KmVtcHR5X2JiKTsKKyAgc2V0X2JiX3NlcSAoKmVtcHR5X2JiLCBnc2VxKTsK KworICBwb3BfY2Z1biAoKTsKKyAgY3VycmVudF9mdW5jdGlvbl9kZWNsID0g b2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKworCisgIGZvciAoaXggPSAx OyBWRUNfaXRlcmF0ZSAodHJlZSwgZm5kZWNscywgaXgsIGVsZSk7ICsraXgp CisgICAgeworICAgICAgdHJlZSB2ZXJzaW9uX2RlY2wgPSBlbGU7CisgICAg ICB0cmVlIHByZWRpY2F0ZV9jaGFpbiA9IE5VTExfVFJFRTsKKyAgICAgIHVu c2lnbmVkIGludCBwcmlvcml0eTsKKyAgICAgIC8qIEdldCBhdHRyaWJ1dGUg c3RyaW5nLCBwYXJzZSBpdCBhbmQgZmluZCB0aGUgcmlnaHQgcHJlZGljYXRl IGRlY2wuCisgICAgICAgICBUaGUgcHJlZGljYXRlIGZ1bmN0aW9uIGNvdWxk IGJlIGEgbGVuZ3RoeSBjb21iaW5hdGlvbiBvZiBtYW55CisJIGZlYXR1cmVz LCBsaWtlIGFyY2gtdHlwZSBhbmQgdmFyaW91cyBpc2EtdmFyaWFudHMuICAq LworICAgICAgcHJpb3JpdHkgPSBnZXRfYnVpbHRpbl9jb2RlX2Zvcl92ZXJz aW9uICh2ZXJzaW9uX2RlY2wsCisJIAkJCSAgICAgICAgICAgICAgICZwcmVk aWNhdGVfY2hhaW4pOworCisgICAgICBpZiAocHJlZGljYXRlX2NoYWluID09 IE5VTExfVFJFRSkKKwljb250aW51ZTsKKworICAgICAgYWN0dWFsX3ZlcnNp b25zKys7CisgICAgICBmdW5jdGlvbl92ZXJzaW9uX2luZm8gW2l4IC0gMV0u dmVyc2lvbl9kZWNsID0gdmVyc2lvbl9kZWNsOworICAgICAgZnVuY3Rpb25f dmVyc2lvbl9pbmZvIFtpeCAtIDFdLnByZWRpY2F0ZV9jaGFpbiA9IHByZWRp Y2F0ZV9jaGFpbjsKKyAgICAgIGZ1bmN0aW9uX3ZlcnNpb25faW5mbyBbaXgg LSAxXS5kaXNwYXRjaF9wcmlvcml0eSA9IHByaW9yaXR5OworICAgIH0KKwor ICAvKiBTb3J0IHRoZSB2ZXJzaW9ucyBhY2NvcmRpbmcgdG8gZGVzY2VuZGlu ZyBvcmRlciBvZiBkaXNwYXRjaCBwcmlvcml0eS4gIFRoZQorICAgICBwcmlv cml0eSBpcyBiYXNlZCBvbiB0aGUgSVNBLiAgVGhpcyBpcyBub3QgYSBwZXJm ZWN0IHNvbHV0aW9uLiAgVGhlcmUKKyAgICAgY291bGQgc3RpbGwgYmUgYW1i aWd1aXR5LiAgSWYgbW9yZSB0aGFuIG9uZSBmdW5jdGlvbiB2ZXJzaW9uIGlz IHN1aXRhYmxlCisgICAgIHRvIGV4ZWN1dGUsICB3aGljaCBvbmUgc2hvdWxk IGJlIGRpc3BhdGNoZWQ/ICBJbiBmdXR1cmUsIGFsbG93IHRoZSB1c2VyCisg ICAgIHRvIHNwZWNpZnkgYSBkaXNwYXRjaCAgcHJpb3JpdHkgbmV4dCB0byB0 aGUgdmVyc2lvbi4gICovCisgIHFzb3J0IChmdW5jdGlvbl92ZXJzaW9uX2lu Zm8sIGFjdHVhbF92ZXJzaW9ucywKKyAgICAgICAgIHNpemVvZiAoc3RydWN0 IF9mdW5jdGlvbl92ZXJzaW9uX2luZm8pLCBmZWF0dXJlX2NvbXBhcmUpOwor CisgIGZvciAgKGkgPSAwOyBpIDwgYWN0dWFsX3ZlcnNpb25zOyArK2kpCisg ICAgKmVtcHR5X2JiID0gYWRkX2NvbmRpdGlvbl90b19iYiAoZGlzcGF0Y2hf ZGVjbCwKKwkJCQkgICAgIGZ1bmN0aW9uX3ZlcnNpb25faW5mb1tpXS52ZXJz aW9uX2RlY2wsCisJCQkJICAgICBmdW5jdGlvbl92ZXJzaW9uX2luZm9baV0u cHJlZGljYXRlX2NoYWluLAorCQkJCSAgICAgKmVtcHR5X2JiKTsKKworICAv KiBkaXNwYXRjaCBkZWZhdWx0IHZlcnNpb24gYXQgdGhlIGVuZC4gICovCisg ICplbXB0eV9iYiA9IGFkZF9jb25kaXRpb25fdG9fYmIgKGRpc3BhdGNoX2Rl Y2wsIGRlZmF1bHRfZGVjbCwKKwkJCQkgICBOVUxMLCAqZW1wdHlfYmIpOwor CisgIGZyZWUgKGZ1bmN0aW9uX3ZlcnNpb25faW5mbyk7CisgIHJldHVybiAw OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBmbjEg YW5kIGZuMiBhcmUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24uCisg ICBSZXR1cm5zIGZhbHNlIGlmIG9ubHkgb25lIG9mIHRoZSBmdW5jdGlvbiBk ZWNscyBoYXMgdGhlIHRhcmdldCBhdHRyaWJ1dGUKKyAgIHNldCBvciBpZiB0 aGUgdGFyZ2V0cyBvZiB0aGUgZnVuY3Rpb24gZGVjbHMgYXJlIGRpZmZlcmVu dC4gIFRoaXMgYXNzdW1lcworICAgdGhlIGZuMSBhbmQgZm4yIGhhdmUgdGhl IHNhbWUgc2lnbmF0dXJlLiAgKi8KKworc3RhdGljIGJvb2wKK2l4ODZfZnVu Y3Rpb25fdmVyc2lvbnMgKHRyZWUgZm4xLCB0cmVlIGZuMikKK3sKKyAgdHJl ZSBhdHRyMSwgYXR0cjI7CisgIHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uICp0 YXJnZXQxLCAqdGFyZ2V0MjsKKworICBpZiAoVFJFRV9DT0RFIChmbjEpICE9 IEZVTkNUSU9OX0RFQ0wKKyAgICAgIHx8IFRSRUVfQ09ERSAoZm4yKSAhPSBG VU5DVElPTl9ERUNMKQorICAgIHJldHVybiBmYWxzZTsKKworICBhdHRyMSA9 IERFQ0xfRlVOQ1RJT05fU1BFQ0lGSUNfVEFSR0VUIChmbjEpOworICBhdHRy MiA9IERFQ0xfRlVOQ1RJT05fU1BFQ0lGSUNfVEFSR0VUIChmbjIpOworCisg IGlmIChhdHRyMSA9PSBOVUxMX1RSRUUgJiYgYXR0cjIgPT0gTlVMTF9UUkVF KQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoKGF0dHIxID09IE5VTExf VFJFRSAmJiBhdHRyMiAhPSBOVUxMX1RSRUUpCisgICAgICB8fCAoYXR0cjEg IT0gTlVMTF9UUkVFICYmIGF0dHIyID09IE5VTExfVFJFRSkpCisgICAgcmV0 dXJuIHRydWU7CisKKyAgdGFyZ2V0MSA9IFRSRUVfVEFSR0VUX09QVElPTiAo YXR0cjEpOworICB0YXJnZXQyID0gVFJFRV9UQVJHRVRfT1BUSU9OIChhdHRy Mik7CisKKyAgaWYgKHRhcmdldDEtPnhfaXg4Nl9pc2FfZmxhZ3MgPT0gdGFy Z2V0Mi0+eF9peDg2X2lzYV9mbGFncworICAgICAgJiYgdGFyZ2V0MS0+eF90 YXJnZXRfZmxhZ3MgPT0gdGFyZ2V0Mi0+eF90YXJnZXRfZmxhZ3MKKyAgICAg ICYmIHRhcmdldDEtPmFyY2ggPT0gdGFyZ2V0Mi0+YXJjaAorICAgICAgJiYg dGFyZ2V0MS0+dHVuZSA9PSB0YXJnZXQyLT50dW5lCisgICAgICAmJiB0YXJn ZXQxLT54X2l4ODZfZnBtYXRoID09IHRhcmdldDItPnhfaXg4Nl9mcG1hdGgK KyAgICAgICYmIHRhcmdldDEtPmJyYW5jaF9jb3N0ID09IHRhcmdldDItPmJy YW5jaF9jb3N0KQorICAgIHJldHVybiBmYWxzZTsKKworICByZXR1cm4gdHJ1 ZTsKK30KKworLyogQ29tcGFyYXRvciBmdW5jdGlvbiB0byBiZSB1c2VkIGlu IHFzb3J0IHJvdXRpbmUgdG8gc29ydCBhdHRyaWJ1dGUKKyAgIHNwZWNpZmlj YXRpb24gc3RyaW5ncyB0byAidGFyZ2V0Ii4gICovCisKK3N0YXRpYyBpbnQK K2F0dHJfc3RyY21wIChjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAqdjIp Cit7CisgIGNvbnN0IGNoYXIgKmMxID0gKihjaGFyICpjb25zdCopdjE7Cisg IGNvbnN0IGNoYXIgKmMyID0gKihjaGFyICpjb25zdCopdjI7CisgIHJldHVy biBzdHJjbXAgKGMxLCBjMik7Cit9CisKKy8qIFNUUiBpcyB0aGUgYXJndW1l bnQgdG8gdGFyZ2V0IGF0dHJpYnV0ZS4gIFRoaXMgZnVuY3Rpb24gdG9rZW5p emVzCisgICB0aGUgY29tbWEgc2VwYXJhdGVkIGFyZ3VtZW50cywgc29ydHMg dGhlbSBhbmQgcmV0dXJucyBhIHN0cmluZyB3aGljaAorICAgaXMgYSB1bmlx dWUgaWRlbnRpZmllciBmb3IgdGhlIGNvbW1hIHNlcGFyYXRlZCBhcmd1bWVu dHMuICAgSXQgYWxzbworICAgcmVwbGFjZXMgbm9uLWlkZW50aWZpZXIgY2hh cmFjdGVycyAiPSwtIiB3aXRoICJfIi4gICovCisKK3N0YXRpYyBjaGFyICoK K3NvcnRlZF9hdHRyX3N0cmluZyAoY29uc3QgY2hhciAqc3RyKQoreworICBj aGFyICoqYXJncyA9IE5VTEw7CisgIGNoYXIgKmF0dHJfc3RyLCAqcmV0X3N0 cjsKKyAgY2hhciAqYXR0ciA9IE5VTEw7CisgIHVuc2lnbmVkIGludCBhcmdu dW0gPSAxOworICB1bnNpZ25lZCBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBp IDwgc3RybGVuIChzdHIpOyBpKyspCisgICAgaWYgKHN0cltpXSA9PSAnLCcp CisgICAgICBhcmdudW0rKzsKKworICBhdHRyX3N0ciA9IChjaGFyICopeG1h bGxvYyAoc3RybGVuIChzdHIpICsgMSk7CisgIHN0cmNweSAoYXR0cl9zdHIs IHN0cik7CisKKyAgLyogUmVwbGFjZSAiPSwtIiB3aXRoICJfIi4gICovCisg IGZvciAoaSA9IDA7IGkgPCBzdHJsZW4gKGF0dHJfc3RyKTsgaSsrKQorICAg IGlmIChhdHRyX3N0cltpXSA9PSAnPScgfHwgYXR0cl9zdHJbaV09PSAnLScp CisgICAgICBhdHRyX3N0cltpXSA9ICdfJzsKKworICBpZiAoYXJnbnVtID09 IDEpCisgICAgcmV0dXJuIGF0dHJfc3RyOworCisgIGFyZ3MgPSAoY2hhciAq Kil4bWFsbG9jIChhcmdudW0gKiBzaXplb2YgKGNoYXIgKikpOworCisgIGkg PSAwOworICBhdHRyID0gc3RydG9rIChhdHRyX3N0ciwgIiwiKTsKKyAgd2hp bGUgKGF0dHIgIT0gTlVMTCkKKyAgICB7CisgICAgICBhcmdzW2ldID0gYXR0 cjsKKyAgICAgIGkrKzsKKyAgICAgIGF0dHIgPSBzdHJ0b2sgKE5VTEwsICIs Iik7CisgICAgfQorCisgIHFzb3J0IChhcmdzLCBhcmdudW0sIHNpemVvZiAo Y2hhciopLCBhdHRyX3N0cmNtcCk7CisKKyAgcmV0X3N0ciA9IChjaGFyICop eG1hbGxvYyAoc3RybGVuIChzdHIpICsgMSk7CisgIHN0cmNweSAocmV0X3N0 ciwgYXJnc1swXSk7CisgIGZvciAoaSA9IDE7IGkgPCBhcmdudW07IGkrKykK KyAgICB7CisgICAgICBzdHJjYXQgKHJldF9zdHIsICJfIik7CisgICAgICBz dHJjYXQgKHJldF9zdHIsIGFyZ3NbaV0pOworICAgIH0KKworICBmcmVlIChh cmdzKTsKKyAgZnJlZSAoYXR0cl9zdHIpOworICByZXR1cm4gcmV0X3N0cjsK K30KKworLyogVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBhc3NlbWJsZXIg bmFtZSBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlCisgICB2ZXJzaW9ucy4gIElm IERFQ0wgaXMgYSBmdW5jdGlvbiB2ZXJzaW9uIGFuZCBoYXMgYSAidGFyZ2V0 IgorICAgYXR0cmlidXRlLCBpdCBhcHBlbmRzIHRoZSBhdHRyaWJ1dGUgc3Ry aW5nIHRvIGl0cyBhc3NlbWJsZXIgbmFtZS4gICovCisKK3N0YXRpYyB0cmVl CitpeDg2X21hbmdsZV9mdW5jdGlvbl92ZXJzaW9uX2Fzc2VtYmxlcl9uYW1l ICh0cmVlIGRlY2wsIHRyZWUgaWQpCit7CisgIHRyZWUgdmVyc2lvbl9hdHRy OworICBjb25zdCBjaGFyICpvcmlnX25hbWUsICp2ZXJzaW9uX3N0cmluZywg KmF0dHJfc3RyOworICBjaGFyICphc3NlbWJsZXJfbmFtZTsKKworICBpZiAo REVDTF9ERUNMQVJFRF9JTkxJTkVfUCAoZGVjbCkKKyAgICAgICYmIGxvb2t1 cF9hdHRyaWJ1dGUgKCJnbnVfaW5saW5lIiwKKwkJCSAgIERFQ0xfQVRUUklC VVRFUyAoZGVjbCkpKQorICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NB VElPTiAoZGVjbCksCisJICAgICAgIkZ1bmN0aW9uIHZlcnNpb25zIGNhbm5v dCBiZSBtYXJrZWQgYXMgZ251X2lubGluZSwiCisJICAgICAgIiBib2RpZXMg aGF2ZSB0byBiZSBnZW5lcmF0ZWRcbiIpOworCisgIGlmIChERUNMX1ZJUlRV QUxfUCAoZGVjbCkKKyAgICAgIHx8IERFQ0xfVklOREVYIChkZWNsKSkKKyAg ICBlcnJvcl9hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKGRlY2wpLAorCSAg ICAgICJWaXJ0dWFsIGZ1bmN0aW9uIHZlcnNpb25pbmcgbm90IHN1cHBvcnRl ZFxuIik7CisKKyAgdmVyc2lvbl9hdHRyID0gbG9va3VwX2F0dHJpYnV0ZSAo InRhcmdldCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpOworCisgIC8qIHRh cmdldCBhdHRyaWJ1dGUgc3RyaW5nIGlzIE5VTEwgZm9yIGRlZmF1bHQgZnVu Y3Rpb25zLiAgKi8KKyAgaWYgKHZlcnNpb25fYXR0ciA9PSBOVUxMX1RSRUUp CisgICAgcmV0dXJuIGlkOworCisgIG9yaWdfbmFtZSA9IElERU5USUZJRVJf UE9JTlRFUiAoaWQpOworICB2ZXJzaW9uX3N0cmluZworICAgID0gVFJFRV9T VFJJTkdfUE9JTlRFUiAoVFJFRV9WQUxVRSAoVFJFRV9WQUxVRSAodmVyc2lv bl9hdHRyKSkpOworCisgIGF0dHJfc3RyID0gc29ydGVkX2F0dHJfc3RyaW5n ICh2ZXJzaW9uX3N0cmluZyk7CisgIGFzc2VtYmxlcl9uYW1lID0gKGNoYXIg KikgeG1hbGxvYyAoc3RybGVuIChvcmlnX25hbWUpCisJCQkJICAgICArIHN0 cmxlbiAoYXR0cl9zdHIpICsgMik7CisKKyAgc3ByaW50ZiAoYXNzZW1ibGVy X25hbWUsICIlcy4lcyIsIG9yaWdfbmFtZSwgYXR0cl9zdHIpOworICBpZiAo ZHVtcF9maWxlKQorICAgIGZwcmludGYgKHN0ZGVyciwgIkFzc2VtYmxlciBu YW1lIHNldCB0byAlcyBmb3IgZnVuY3Rpb24gdmVyc2lvbiAlc1xuIiwKKwkg ICAgIGFzc2VtYmxlcl9uYW1lLCBJREVOVElGSUVSX1BPSU5URVIgKGlkKSk7 CisKKyAgLyogQWxsb3cgYXNzZW1ibGVyIG5hbWUgdG8gYmUgbW9kaWZpZWQg aWYgYWxyZWFkeSBzZXQuICAqLworICBpZiAoREVDTF9BU1NFTUJMRVJfTkFN RV9TRVRfUCAoZGVjbCkpCisgICAgU0VUX0RFQ0xfUlRMIChkZWNsLCBOVUxM KTsKKworICByZXR1cm4gZ2V0X2lkZW50aWZpZXIgKGFzc2VtYmxlcl9uYW1l KTsKK30KKworc3RhdGljIHRyZWUgCitpeDg2X21hbmdsZV9kZWNsX2Fzc2Vt Ymxlcl9uYW1lICh0cmVlIGRlY2wsIHRyZWUgaWQpCit7CisgIC8qIEZvciBm dW5jdGlvbiB2ZXJzaW9uLCBhZGQgdGhlIHRhcmdldCBzdWZmaXggdG8gdGhl IGFzc2VtYmxlciBuYW1lLiAgKi8KKyAgaWYgKFRSRUVfQ09ERSAoZGVjbCkg PT0gRlVOQ1RJT05fREVDTAorICAgICAgJiYgREVDTF9GVU5DVElPTl9WRVJT SU9ORUQgKGRlY2wpKQorICAgIHJldHVybiBpeDg2X21hbmdsZV9mdW5jdGlv bl92ZXJzaW9uX2Fzc2VtYmxlcl9uYW1lIChkZWNsLCBpZCk7CisKKyAgcmV0 dXJuIGlkOworfQorCisvKiBSZXR1cm4gYSBuZXcgbmFtZSBieSBhcHBlbmRp bmcgU1VGRklYIHRvIHRoZSBERUNMIG5hbWUuICBJZgorICAgbWFrZV91bmlx dWUgaXMgdHJ1ZSwgYXBwZW5kIHRoZSBmdWxsIHBhdGggbmFtZS4gICovCisK K3N0YXRpYyBjaGFyICoKK21ha2VfbmFtZSAodHJlZSBkZWNsLCBjb25zdCBj aGFyICpzdWZmaXgsIGJvb2wgbWFrZV91bmlxdWUpCit7CisgIGNoYXIgKmds b2JhbF92YXJfbmFtZTsKKyAgaW50IG5hbWVfbGVuOworICBjb25zdCBjaGFy ICpuYW1lOworICBjb25zdCBjaGFyICp1bmlxdWVfbmFtZSA9IE5VTEw7CisK KyAgbmFtZSA9IElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9BU1NFTUJMRVJf TkFNRSAoZGVjbCkpOworCisgIC8qIEdldCBhIHVuaXF1ZSBuYW1lIHRoYXQg Y2FuIGJlIHVzZWQgZ2xvYmFsbHkgd2l0aG91dCBhbnkgY2hhbmNlcworICAg ICBvZiBjb2xsaXNpb24gYXQgbGluayB0aW1lLiAgKi8KKyAgaWYgKG1ha2Vf dW5pcXVlKQorICAgIHVuaXF1ZV9uYW1lID0gSURFTlRJRklFUl9QT0lOVEVS IChnZXRfZmlsZV9mdW5jdGlvbl9uYW1lICgiXDAiKSk7CisKKyAgbmFtZV9s ZW4gPSBzdHJsZW4gKG5hbWUpICsgc3RybGVuIChzdWZmaXgpICsgMjsKKwor ICBpZiAobWFrZV91bmlxdWUpCisgICAgbmFtZV9sZW4gKz0gc3RybGVuICh1 bmlxdWVfbmFtZSkgKyAxOworICBnbG9iYWxfdmFyX25hbWUgPSAoY2hhciAq KSB4bWFsbG9jIChuYW1lX2xlbik7CisKKyAgLyogVXNlICcuJyB0byBjb25j YXRlbmF0ZSBuYW1lcyBhcyBpdCBpcyBkZW1hbmdsZXIgZnJpZW5kbHkuICAq LworICBpZiAobWFrZV91bmlxdWUpCisgICAgICBzbnByaW50ZiAoZ2xvYmFs X3Zhcl9uYW1lLCBuYW1lX2xlbiwgIiVzLiVzLiVzIiwgbmFtZSwKKwkJdW5p cXVlX25hbWUsIHN1ZmZpeCk7CisgIGVsc2UKKyAgICAgIHNucHJpbnRmIChn bG9iYWxfdmFyX25hbWUsIG5hbWVfbGVuLCAiJXMuJXMiLCBuYW1lLCBzdWZm aXgpOworCisgIHJldHVybiBnbG9iYWxfdmFyX25hbWU7Cit9CisKKy8qIE1h a2UgYSBkaXNwYXRjaGVyIGRlY2xhcmF0aW9uIGZvciB0aGUgbXVsdGktdmVy c2lvbmVkIGZ1bmN0aW9uIERFQ0wuCisgICBDYWxscyB0byBERUNMIGZ1bmN0 aW9uIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBjYWxscyB0byB0aGUgZGlzcGF0 Y2hlcgorICAgYnkgdGhlIGZyb250LWVuZC4gIFJldHVybiB0aGUgZGVjbCBj cmVhdGVkLiAgKi8KKworc3RhdGljIHRyZWUKK21ha2VfZGlzcGF0Y2hlcl9k ZWNsIChjb25zdCB0cmVlIGRlY2wpCit7CisgIHRyZWUgZnVuY19kZWNsOwor ICBjaGFyICpmdW5jX25hbWUsICpyZXNvbHZlcl9uYW1lOworICB0cmVlIGZu X3R5cGUsIGZ1bmNfdHlwZTsKKyAgYm9vbCBpc191bmlxID0gZmFsc2U7CisK KyAgaWYgKFRSRUVfUFVCTElDIChkZWNsKSA9PSAwKQorICAgIGlzX3VuaXEg PSB0cnVlOworCisgIGZ1bmNfbmFtZSA9IG1ha2VfbmFtZSAoZGVjbCwgImlm dW5jIiwgaXNfdW5pcSk7CisgIHJlc29sdmVyX25hbWUgPSBtYWtlX25hbWUg KGRlY2wsICJyZXNvbHZlciIsIGlzX3VuaXEpOworICBnY2NfYXNzZXJ0IChy ZXNvbHZlcl9uYW1lKTsKKworICBmbl90eXBlID0gVFJFRV9UWVBFIChkZWNs KTsKKyAgZnVuY190eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoVFJFRV9U WVBFIChmbl90eXBlKSwKKwkJCQkgICBUWVBFX0FSR19UWVBFUyAoZm5fdHlw ZSkpOworICAKKyAgZnVuY19kZWNsID0gYnVpbGRfZm5fZGVjbCAoZnVuY19u YW1lLCBmdW5jX3R5cGUpOworICBUUkVFX1VTRUQgKGZ1bmNfZGVjbCkgPSAx OworICBERUNMX0NPTlRFWFQgKGZ1bmNfZGVjbCkgPSBOVUxMX1RSRUU7Cisg IERFQ0xfSU5JVElBTCAoZnVuY19kZWNsKSA9IGVycm9yX21hcmtfbm9kZTsK KyAgREVDTF9BUlRJRklDSUFMIChmdW5jX2RlY2wpID0gMTsKKyAgLyogTWFy ayB0aGlzIGZ1bmMgYXMgZXh0ZXJuYWwsIHRoZSByZXNvbHZlciB3aWxsIGZs aXAgaXQgYWdhaW4gaWYKKyAgICAgaXQgZ2V0cyBnZW5lcmF0ZWQuICAqLwor ICBERUNMX0VYVEVSTkFMIChmdW5jX2RlY2wpID0gMTsKKyAgLyogVGhpcyB3 aWxsIGJlIG9mIHR5cGUgSUZVTkNzIGhhdmUgdG8gYmUgZXh0ZXJuYWxseSB2 aXNpYmxlLiAgKi8KKyAgVFJFRV9QVUJMSUMgKGZ1bmNfZGVjbCkgPSAxOwor CisgIHJldHVybiBmdW5jX2RlY2w7ICAKK30KKworLyogUmV0dXJucyB0cnVl IGlmIGRlY2wgaXMgbXVsdGktdmVyc2lvbmVkIGFuZCBERUNMIGlzIHRoZSBk ZWZhdWx0IGZ1bmN0aW9uLAorICAgdGhhdCBpcyBpdCBpcyBub3QgdGFnZ2Vk IHdpdGggdGFyZ2V0IHNwZWNpZmljIG9wdGltaXphdGlvbi4gICovCisKK3N0 YXRpYyBib29sCitpc19mdW5jdGlvbl9kZWZhdWx0X3ZlcnNpb24gKGNvbnN0 IHRyZWUgZGVjbCkKK3sKKyAgcmV0dXJuIChUUkVFX0NPREUgKGRlY2wpID09 IEZVTkNUSU9OX0RFQ0wKKwkgICYmIERFQ0xfRlVOQ1RJT05fVkVSU0lPTkVE IChkZWNsKQorCSAgJiYgREVDTF9GVU5DVElPTl9TUEVDSUZJQ19UQVJHRVQg KGRlY2wpID09IE5VTExfVFJFRSk7Cit9CisKKy8qIE1ha2UgYSBkaXNwYXRj aGVyIGRlY2xhcmF0aW9uIGZvciB0aGUgbXVsdGktdmVyc2lvbmVkIGZ1bmN0 aW9uIERFQ0wuCisgICBDYWxscyB0byBERUNMIGZ1bmN0aW9uIHdpbGwgYmUg cmVwbGFjZWQgd2l0aCBjYWxscyB0byB0aGUgZGlzcGF0Y2hlcgorICAgYnkg dGhlIGZyb250LWVuZC4gIEl0IGFsc28gY2hhaW5zIHRoZSBjZ3JhcGggbm9k ZXMgb2YgYWxsIHRoZQorICAgc2VtYW50aWNhbGx5IGlkZW50aWNhbCB2ZXJz aW9ucyBpbiB2ZWN0b3IgRk5fVkVSX1ZFQ19QLiAgUmV0dXJucyB0aGUKKyAg IGRlY2wgb2YgdGhlIGRpc3BhdGNoZXIgZnVuY3Rpb24uICAqLworCitzdGF0 aWMgdHJlZQoraXg4Nl9nZXRfZnVuY3Rpb25fdmVyc2lvbnNfZGlzcGF0Y2hl ciAodm9pZCAqZm5fdmVyX3ZlY19wKQoreworICBzdHJ1Y3QgY2dyYXBoX25v ZGUgKm5vZGUgPSBOVUxMOworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKmRlZmF1 bHRfbm9kZSA9IE5VTEw7CisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqZGlzcGF0 Y2hlcl9ub2RlID0gTlVMTDsKKyAgaW50IGl4OworICB0cmVlIGVsZTsKKyAg dHJlZSBkaXNwYXRjaF9kZWNsID0gTlVMTDsKKyAgVkVDICh0cmVlLCBoZWFw KSAqZm5fdmVyX3ZlYyA9IE5VTEw7CisKKyAgZm5fdmVyX3ZlYyA9IChWRUMg KHRyZWUsaGVhcCkgKikgZm5fdmVyX3ZlY19wOworICBnY2NfYXNzZXJ0IChm bl92ZXJfdmVjICE9IE5VTEwpOworCisgIC8qIEZpbmQgdGhlIGRlZmF1bHQg dmVyc2lvbi4gICovCisgIGZvciAoaXggPSAwOyBWRUNfaXRlcmF0ZSAodHJl ZSwgZm5fdmVyX3ZlYywgaXgsIGVsZSk7ICsraXgpCisgICAgeworICAgICAg aWYgKGlzX2Z1bmN0aW9uX2RlZmF1bHRfdmVyc2lvbiAoZWxlKSkKKwl7CisJ ICBkZWZhdWx0X25vZGUgPSBjZ3JhcGhfZ2V0X2NyZWF0ZV9ub2RlIChlbGUp OworCSAgYnJlYWs7CisJfQorICAgIH0KKworICAvKiBJZiB0aGVyZSBpcyBu byBkZWZhdWx0IG5vZGUsIGp1c3QgcmV0dXJuIE5VTEwuICAqLworICBpZiAo IWRlZmF1bHRfbm9kZSkKKyAgICByZXR1cm4gTlVMTDsKKworICBpZiAoZGVm YXVsdF9ub2RlLT5mdW5jdGlvbl92ZXJzaW9uLmRpc3BhdGNoZXJfcmVzb2x2 ZXIpCisgICAgcmV0dXJuIGRlZmF1bHRfbm9kZS0+ZnVuY3Rpb25fdmVyc2lv bi5kaXNwYXRjaGVyX3Jlc29sdmVyOworCisjaWYgZGVmaW5lZCAoQVNNX09V VFBVVF9UWVBFX0RJUkVDVElWRSkgJiYgSEFWRV9HTlVfSU5ESVJFQ1RfRlVO Q1RJT04KKyAgLyogUmlnaHQgbm93LCB0aGUgZGlzcGF0Y2hpbmcgaXMgZG9u ZSB2aWEgaWZ1bmMuICAqLworICBkaXNwYXRjaF9kZWNsID0gbWFrZV9kaXNw YXRjaGVyX2RlY2wgKGRlZmF1bHRfbm9kZS0+c3ltYm9sLmRlY2wpOyAKKyNl bHNlCisgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAoZGVmYXVs dF9ub2RlLT5zeW1ib2wuZGVjbCksCisJICAgICJNdWx0aXZlcnNpb25pbmcg bmVlZHMgaWZ1bmMgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCAiCisJICAgICJp biB0aGlzIGNvbmZpZ3VyYXRpb24iKTsKKyNlbmRpZgorICBkZWZhdWx0X25v ZGUtPmZ1bmN0aW9uX3ZlcnNpb24uZGlzcGF0Y2hlcl9yZXNvbHZlciA9IGRp c3BhdGNoX2RlY2w7CisgIGRpc3BhdGNoZXJfbm9kZSA9IGNncmFwaF9nZXRf Y3JlYXRlX25vZGUgKGRpc3BhdGNoX2RlY2wpOworICBnY2NfYXNzZXJ0IChk aXNwYXRjaGVyX25vZGUpOworICBkaXNwYXRjaGVyX25vZGUtPmRpc3BhdGNo ZXJfZnVuY3Rpb24gPSAxOworICBjZ3JhcGhfbWFya19hZGRyZXNzX3Rha2Vu X25vZGUgKGRlZmF1bHRfbm9kZSk7CisKKyAgZm9yIChpeCA9IDA7IFZFQ19p dGVyYXRlICh0cmVlLCBmbl92ZXJfdmVjLCBpeCwgZWxlKTsgKytpeCkKKyAg ICB7CisgICAgICBub2RlID0gY2dyYXBoX2dldF9jcmVhdGVfbm9kZSAoZWxl KTsKKyAgICAgIGdjY19hc3NlcnQgKG5vZGUgIT0gTlVMTCAmJiBERUNMX0ZV TkNUSU9OX1ZFUlNJT05FRCAoZWxlKSk7CisgICAgICBpZiAobm9kZSA9PSBk ZWZhdWx0X25vZGUpCisJY29udGludWU7CisgICAgICBnY2NfYXNzZXJ0IChE RUNMX0ZVTkNUSU9OX1NQRUNJRklDX1RBUkdFVCAoZWxlKSAhPSBOVUxMX1RS RUUpOworCisgICAgICBpZiAoZGlzcGF0Y2hlcl9ub2RlLT5mdW5jdGlvbl92 ZXJzaW9uLm5leHQpCisgCXsKKwkgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqZGlz cGF0Y2hlcl9ub2RlX25leHQKKwkgICAgPSBkaXNwYXRjaGVyX25vZGUtPmZ1 bmN0aW9uX3ZlcnNpb24ubmV4dDsKKwkgIG5vZGUtPmZ1bmN0aW9uX3ZlcnNp b24ubmV4dCA9IGRpc3BhdGNoZXJfbm9kZV9uZXh0OworCSAgZGlzcGF0Y2hl cl9ub2RlX25leHQtPmZ1bmN0aW9uX3ZlcnNpb24ucHJldiA9IG5vZGU7CisJ fQorICAgICAgZGlzcGF0Y2hlcl9ub2RlLT5mdW5jdGlvbl92ZXJzaW9uLm5l eHQgPSBub2RlOworICAgICAgbm9kZS0+ZnVuY3Rpb25fdmVyc2lvbi5wcmV2 ID0gZGlzcGF0Y2hlcl9ub2RlOworICAgICAgbm9kZS0+ZnVuY3Rpb25fdmVy c2lvbi5kaXNwYXRjaGVyX3Jlc29sdmVyID0gZGlzcGF0Y2hfZGVjbDsKKyAg ICB9CisKKyAgLyogVGhlIGRlZmF1bHQgdmVyc2lvbiBzaG91bGQgYmUgdGhl IGZpcnN0IG5vZGUuICAqLworICBkZWZhdWx0X25vZGUtPmZ1bmN0aW9uX3Zl cnNpb24ubmV4dCA9IGRpc3BhdGNoZXJfbm9kZS0+ZnVuY3Rpb25fdmVyc2lv bi5uZXh0OworICAoZGlzcGF0Y2hlcl9ub2RlLT5mdW5jdGlvbl92ZXJzaW9u Lm5leHQpLT5mdW5jdGlvbl92ZXJzaW9uLnByZXYKKyAgICAgPSBkZWZhdWx0 X25vZGU7CisgIC8qIFRoZSBkaXNwYXRjaGVyIG5vZGUgc2hvdWxkIGRpcmVj dGx5IHBvaW50IHRvIHRoZSBkZWZhdWx0IG5vZGUuICAqLworICBkaXNwYXRj aGVyX25vZGUtPmZ1bmN0aW9uX3ZlcnNpb24ubmV4dCA9IGRlZmF1bHRfbm9k ZTsKKyAgCisgIHJldHVybiBkaXNwYXRjaF9kZWNsOworfQorCisvKiBNYWtl cyBhIGZ1bmN0aW9uIGF0dHJpYnV0ZSBvZiB0aGUgZm9ybSBOQU1FKEFSR19O QU1FKSBhbmQgY2hhaW5zCisgICBpdCB0byBDSEFJTi4gICovCisKK3N0YXRp YyB0cmVlCittYWtlX2F0dHJpYnV0ZSAoY29uc3QgY2hhciAqbmFtZSwgY29u c3QgY2hhciAqYXJnX25hbWUsIHRyZWUgY2hhaW4pCit7CisgIHRyZWUgYXR0 cl9uYW1lOworICB0cmVlIGF0dHJfYXJnX25hbWU7CisgIHRyZWUgYXR0cl9h cmdzOworICB0cmVlIGF0dHI7CisKKyAgYXR0cl9uYW1lID0gZ2V0X2lkZW50 aWZpZXIgKG5hbWUpOworICBhdHRyX2FyZ19uYW1lID0gYnVpbGRfc3RyaW5n IChzdHJsZW4gKGFyZ19uYW1lKSwgYXJnX25hbWUpOworICBhdHRyX2FyZ3Mg PSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgYXR0cl9hcmdfbmFtZSwgTlVMTF9U UkVFKTsKKyAgYXR0ciA9IHRyZWVfY29ucyAoYXR0cl9uYW1lLCBhdHRyX2Fy Z3MsIGNoYWluKTsKKyAgcmV0dXJuIGF0dHI7Cit9CisKKy8qIE1ha2UgdGhl IHJlc29sdmVyIGZ1bmN0aW9uIGRlY2wgdG8gZGlzcGF0Y2ggdGhlIHZlcnNp b25zIG9mCisgICBhIG11bHRpLXZlcnNpb25lZCBmdW5jdGlvbiwgIERFRkFV TFRfREVDTC4gIENyZWF0ZSBhbgorICAgZW1wdHkgYmFzaWMgYmxvY2sgaW4g dGhlIHJlc29sdmVyIGFuZCBzdG9yZSB0aGUgcG9pbnRlciBpbgorICAgRU1Q VFlfQkIuICBSZXR1cm4gdGhlIGRlY2wgb2YgdGhlIHJlc29sdmVyIGZ1bmN0 aW9uLiAgKi8KKworc3RhdGljIHRyZWUKK21ha2VfcmVzb2x2ZXJfZnVuYyAo Y29uc3QgdHJlZSBkZWZhdWx0X2RlY2wsCisJCSAgICBjb25zdCB0cmVlIGRp c3BhdGNoX2RlY2wsCisJCSAgICBiYXNpY19ibG9jayAqZW1wdHlfYmIpCit7 CisgIGNoYXIgKnJlc29sdmVyX25hbWU7CisgIHRyZWUgZGVjbCwgdHlwZSwg ZGVjbF9uYW1lLCB0OworICBiYXNpY19ibG9jayBuZXdfYmI7CisgIHRyZWUg b2xkX2N1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKyAgYm9vbCBpc191bmlxID0g ZmFsc2U7CisKKyAgLyogSUZVTkMncyBoYXZlIHRvIGJlIGdsb2JhbGx5IHZp c2libGUuICBTbywgaWYgdGhlIGRlZmF1bHRfZGVjbCBpcworICAgICBub3Qs IHRoZW4gdGhlIG5hbWUgb2YgdGhlIElGVU5DIHNob3VsZCBiZSBtYWRlIHVu aXF1ZS4gICovCisgIGlmIChUUkVFX1BVQkxJQyAoZGVmYXVsdF9kZWNsKSA9 PSAwKQorICAgIGlzX3VuaXEgPSB0cnVlOworCisgIC8qIEFwcGVuZCB0aGUg ZmlsZW5hbWUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uIGlmIHRoZSB2ZXJz aW9ucyBhcmUKKyAgICAgbm90IGV4dGVybmFsbHkgdmlzaWJsZS4gIFRoaXMg aXMgYmVjYXVzZSB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gaGFzCisgICAgIHRv IGJlIGV4dGVybmFsbHkgdmlzaWJsZSBmb3IgdGhlIGxvYWRlciB0byBmaW5k IGl0LiAgU28sIGFwcGVuZGluZworICAgICB0aGUgZmlsZW5hbWUgd2lsbCBw cmV2ZW50IGNvbmZsaWN0cyB3aXRoIGEgcmVzb2x2ZXIgZnVuY3Rpb24gZnJv bQorICAgICBhbm90aGVyIG1vZHVsZSB3aGljaCBpcyBiYXNlZCBvbiB0aGUg c2FtZSB2ZXJzaW9uIG5hbWUuICAqLworICByZXNvbHZlcl9uYW1lID0gbWFr ZV9uYW1lIChkZWZhdWx0X2RlY2wsICJyZXNvbHZlciIsIGlzX3VuaXEpOwor CisgIC8qIFRoZSByZXNvbHZlciBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEg KHZvaWQgKikuICovCisgIHR5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBlX2xp c3QgKHB0cl90eXBlX25vZGUsIE5VTExfVFJFRSk7CisKKyAgZGVjbCA9IGJ1 aWxkX2ZuX2RlY2wgKHJlc29sdmVyX25hbWUsIHR5cGUpOworICBkZWNsX25h bWUgPSBnZXRfaWRlbnRpZmllciAocmVzb2x2ZXJfbmFtZSk7CisgIFNFVF9E RUNMX0FTU0VNQkxFUl9OQU1FIChkZWNsLCBkZWNsX25hbWUpOworCisgIERF Q0xfTkFNRSAoZGVjbCkgPSBkZWNsX25hbWU7CisgIFRSRUVfVVNFRCAoZGVj bCkgPSAxOworICBERUNMX0FSVElGSUNJQUwgKGRlY2wpID0gMTsKKyAgREVD TF9JR05PUkVEX1AgKGRlY2wpID0gMDsKKyAgLyogSUZVTkMgcmVzb2x2ZXJz IGhhdmUgdG8gYmUgZXh0ZXJuYWxseSB2aXNpYmxlLiAgKi8KKyAgVFJFRV9Q VUJMSUMgKGRlY2wpID0gMTsKKyAgREVDTF9VTklOTElOQUJMRSAoZGVjbCkg PSAxOworCisgIERFQ0xfRVhURVJOQUwgKGRlY2wpID0gMDsKKyAgREVDTF9F WFRFUk5BTCAoZGlzcGF0Y2hfZGVjbCkgPSAwOworCisgIERFQ0xfQ09OVEVY VCAoZGVjbCkgPSBOVUxMX1RSRUU7CisgIERFQ0xfSU5JVElBTCAoZGVjbCkg PSBtYWtlX25vZGUgKEJMT0NLKTsKKyAgREVDTF9TVEFUSUNfQ09OU1RSVUNU T1IgKGRlY2wpID0gMDsKKyAgVFJFRV9SRUFET05MWSAoZGVjbCkgPSAwOwor ICBERUNMX1BVUkVfUCAoZGVjbCkgPSAwOworCisgIGlmIChERUNMX0NPTURB VF9HUk9VUCAoZGVmYXVsdF9kZWNsKSkKKyAgICB7CisgICAgICBERUNMX0NP TURBVCAoZGVjbCkgPSBERUNMX0NPTURBVCAoZGVmYXVsdF9kZWNsKTsKKyAg ICAgIG1ha2VfZGVjbF9vbmVfb25seSAoZGVjbCwgREVDTF9DT01EQVRfR1JP VVAgKGRlZmF1bHRfZGVjbCkpOworICAgIH0KKyAgZWxzZSBpZiAoVFJFRV9Q VUJMSUMgKGRlZmF1bHRfZGVjbCkpCisgICAgeworICAgICAgLyogSW4gdGhp cyBjYXNlLCBlYWNoIHRyYW5zbGF0aW9uIHVuaXQgd2l0aCBhIGNhbGwgdG8g dGhpcworCSB2ZXJzaW9uZWQgZnVuY3Rpb24gd2lsbCBwdXQgb3V0IGEgcmVz b2x2ZXIuICBFbnN1cmUgaXQKKwkgaXMgY29tZGF0IHRvIGtlZXAganVzdCBv bmUgY29weS4gICovCisgICAgICBERUNMX0NPTURBVCAoZGVjbCkgPSAxOwor ICAgICAgbWFrZV9kZWNsX29uZV9vbmx5IChkZWNsLCBERUNMX0FTU0VNQkxF Ul9OQU1FIChkZWNsKSk7CisgICAgfQorICAvKiBCdWlsZCByZXN1bHQgZGVj bCBhbmQgYWRkIHRvIGZ1bmN0aW9uX2RlY2wuICovCisgIHQgPSBidWlsZF9k ZWNsIChVTktOT1dOX0xPQ0FUSU9OLCBSRVNVTFRfREVDTCwgTlVMTF9UUkVF LCBwdHJfdHlwZV9ub2RlKTsKKyAgREVDTF9BUlRJRklDSUFMICh0KSA9IDE7 CisgIERFQ0xfSUdOT1JFRF9QICh0KSA9IDE7CisgIERFQ0xfUkVTVUxUIChk ZWNsKSA9IHQ7CisKKyAgZ2ltcGxpZnlfZnVuY3Rpb25fdHJlZSAoZGVjbCk7 CisgIG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBjdXJyZW50X2Z1bmN0 aW9uX2RlY2w7CisgIHB1c2hfY2Z1biAoREVDTF9TVFJVQ1RfRlVOQ1RJT04g KGRlY2wpKTsKKyAgY3VycmVudF9mdW5jdGlvbl9kZWNsID0gZGVjbDsKKyAg Z2ltcGxlX3JlZ2lzdGVyX2NmZ19ob29rcyAoKTsKKyAgaW5pdF9lbXB0eV90 cmVlX2NmZ19mb3JfZnVuY3Rpb24gKERFQ0xfU1RSVUNUX0ZVTkNUSU9OIChk ZWNsKSk7CisgIGNmdW4tPmN1cnJfcHJvcGVydGllcyB8PQorICAgIChQUk9Q X2dpbXBsZV9sY2YgfCBQUk9QX2dpbXBsZV9sZWggfCBQUk9QX2NmZyB8IFBS T1Bfc3NhCisgICAgIHwgUFJPUF9naW1wbGVfYW55KTsKKyAgY2Z1bi0+Y3Vy cl9wcm9wZXJ0aWVzID0gMTU7CisgIG5ld19iYiA9IGNyZWF0ZV9lbXB0eV9i YiAoRU5UUllfQkxPQ0tfUFRSKTsKKyAgbWFrZV9lZGdlIChFTlRSWV9CTE9D S19QVFIsIG5ld19iYiwgRURHRV9GQUxMVEhSVSk7CisgIG1ha2VfZWRnZSAo bmV3X2JiLCBFWElUX0JMT0NLX1BUUiwgMCk7CisgICplbXB0eV9iYiA9IG5l d19iYjsKKworICBjZ3JhcGhfYWRkX25ld19mdW5jdGlvbiAoZGVjbCwgdHJ1 ZSk7CisgIGNncmFwaF9jYWxsX2Z1bmN0aW9uX2luc2VydGlvbl9ob29rcyAo Y2dyYXBoX2dldF9jcmVhdGVfbm9kZSAoZGVjbCkpOworCisgIGlmIChERUNM X0NPTURBVF9HUk9VUCAoZGVmYXVsdF9kZWNsKSkKKyAgICB7CisgICAgICBn Y2NfYXNzZXJ0IChjZ3JhcGhfZ2V0X25vZGUgKGRlZmF1bHRfZGVjbCkpOwor ICAgICAgc3ltdGFiX2FkZF90b19zYW1lX2NvbWRhdF9ncm91cCAoCisJKHN5 bXRhYl9ub2RlKSBjZ3JhcGhfZ2V0X25vZGUgKGRlY2wpLAorCShzeW10YWJf bm9kZSkgY2dyYXBoX2dldF9ub2RlIChkZWZhdWx0X2RlY2wpKTsKKyAgICB9 CisKKyAgcG9wX2NmdW4gKCk7CisgIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9 IG9sZF9jdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisKKyAgZ2NjX2Fzc2VydCAo ZGlzcGF0Y2hfZGVjbCAhPSBOVUxMKTsKKyAgLyogTWFyayBkaXNwYXRjaF9k ZWNsIGFzICJpZnVuYyIgd2l0aCByZXNvbHZlciBhcyByZXNvbHZlcl9uYW1l LiAgKi8KKyAgREVDTF9BVFRSSUJVVEVTIChkaXNwYXRjaF9kZWNsKSAKKyAg ICA9IG1ha2VfYXR0cmlidXRlICgiaWZ1bmMiLCByZXNvbHZlcl9uYW1lLCBE RUNMX0FUVFJJQlVURVMgKGRpc3BhdGNoX2RlY2wpKTsKKworICAvKiBDcmVh dGUgdGhlIGFsaWFzIGZvciBkaXNwYXRjaCB0byByZXNvbHZlciBoZXJlLiAg Ki8KKyAgY2dyYXBoX2NyZWF0ZV9mdW5jdGlvbl9hbGlhcyAoZGlzcGF0Y2hf ZGVjbCwgZGVjbCk7CisgIHJldHVybiBkZWNsOworfQorCisvKiBHZW5lcmF0 ZSB0aGUgZGlzcGF0Y2hpbmcgY29kZSBib2R5IHRvIGRpc3BhdGNoIG11bHRp LXZlcnNpb25lZCBmdW5jdGlvbgorICAgREVDTC4gIFRoZSB0YXJnZXQgaG9v ayBpcyBjYWxsZWQgdG8gcHJvY2VzcyB0aGUgInRhcmdldCIgYXR0cmlidXRl cyBhbmQKKyAgIHByb3ZpZGUgdGhlIGNvZGUgdG8gZGlzcGF0Y2ggdGhlIHJp Z2h0IGZ1bmN0aW9uIGF0IHJ1bi10aW1lLiAgTk9ERSBwb2ludHMKKyAgIHRv IHRoZSBkaXNwYXRjaGVyIGRlY2wgd2hvc2UgYm9keSB3aWxsIGJlIGNyZWF0 ZWQuICAqLworCitzdGF0aWMgdHJlZSAKK2l4ODZfZ2VuZXJhdGVfdmVyc2lv bl9kaXNwYXRjaGVyX2JvZHkgKHZvaWQgKm5vZGVfcCkKK3sKKyAgdHJlZSBy ZXNvbHZlcl9kZWNsOworICBiYXNpY19ibG9jayBlbXB0eV9iYjsKKyAgVkVD ICh0cmVlLCBoZWFwKSAqZm5fdmVyX3ZlYyA9IE5VTEw7CisgIHRyZWUgb2xk X2N1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKyAgdHJlZSBkZWZhdWx0X3Zlcl9k ZWNsOworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKnZlcnNuOworICBzdHJ1Y3Qg Y2dyYXBoX25vZGUgKm5vZGU7CisKKyAgbm9kZSA9IChjZ3JhcGhfbm9kZSAq KW5vZGVfcDsKKworICBnY2NfYXNzZXJ0IChub2RlLT5kaXNwYXRjaGVyX2Z1 bmN0aW9uKTsKKworICBpZiAobm9kZS0+ZnVuY3Rpb25fdmVyc2lvbi5kaXNw YXRjaGVyX3Jlc29sdmVyKQorICAgIHJldHVybiBub2RlLT5mdW5jdGlvbl92 ZXJzaW9uLmRpc3BhdGNoZXJfcmVzb2x2ZXI7CisKKyAgZGVmYXVsdF92ZXJf ZGVjbCA9IChub2RlLT5mdW5jdGlvbl92ZXJzaW9uLm5leHQpLT5zeW1ib2wu ZGVjbDsKKyAgcmVzb2x2ZXJfZGVjbCA9IG1ha2VfcmVzb2x2ZXJfZnVuYyAo ZGVmYXVsdF92ZXJfZGVjbCwKKwkJCQkgICAgICBub2RlLT5zeW1ib2wuZGVj bCwgJmVtcHR5X2JiKTsKKyAgbm9kZS0+ZnVuY3Rpb25fdmVyc2lvbi5kaXNw YXRjaGVyX3Jlc29sdmVyID0gcmVzb2x2ZXJfZGVjbDsKKworICBvbGRfY3Vy cmVudF9mdW5jdGlvbl9kZWNsID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOwor ICBwdXNoX2NmdW4gKERFQ0xfU1RSVUNUX0ZVTkNUSU9OIChyZXNvbHZlcl9k ZWNsKSk7CisgIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IHJlc29sdmVyX2Rl Y2w7CisKKyAgZm5fdmVyX3ZlYyA9IFZFQ19hbGxvYyAodHJlZSwgaGVhcCwg Mik7CisKKyAgZm9yICh2ZXJzbiA9IG5vZGUtPmZ1bmN0aW9uX3ZlcnNpb24u bmV4dDsgdmVyc247CisgICAgICAgdmVyc24gPSB2ZXJzbi0+ZnVuY3Rpb25f dmVyc2lvbi5uZXh0KQorICAgIHsKKyAgICAgIC8qIENoZWNrIGZvciB2aXJ0 dWFsIGZ1bmN0aW9ucyBoZXJlIGFnYWluLCBhcyBieSB0aGlzIHRpbWUgaXQg c2hvdWxkCisJIGhhdmUgYmVlbiBkZXRlcm1pbmVkIGlmIHRoaXMgZnVuY3Rp b24gbmVlZHMgYSB2dGFibGUgaW5kZXggb3IKKwkgbm90LiAgVGhpcyBoYXBw ZW5zIGZvciBtZXRob2RzIGluIGRlcml2ZWQgY2xhc3NlcyB0aGF0IG92ZXJy aWRlCisJIHZpcnR1YWwgbWV0aG9kcyBpbiBiYXNlIGNsYXNzZXMgYnV0IGFy ZSBub3QgZXhwbGljaXRseSBtYXJrZWQgYXMKKwkgdmlydHVhbC4gICovCisg ICAgICBpZiAoREVDTF9WSU5ERVggKHZlcnNuLT5zeW1ib2wuZGVjbCkpCisg ICAgICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAodmVyc24t PnN5bWJvbC5kZWNsKSwKKwkJICAiVmlydHVhbCBmdW5jdGlvbiBtdWx0aXZl cnNpb25pbmcgbm90IHN1cHBvcnRlZCIpOworICAgICAgVkVDX3NhZmVfcHVz aCAodHJlZSwgaGVhcCwgZm5fdmVyX3ZlYywgdmVyc24tPnN5bWJvbC5kZWNs KTsKKyAgICB9CisKKyAgZGlzcGF0Y2hfZnVuY3Rpb25fdmVyc2lvbnMocmVz b2x2ZXJfZGVjbCwgZm5fdmVyX3ZlYywgJmVtcHR5X2JiKTsKKworICByZWJ1 aWxkX2NncmFwaF9lZGdlcyAoKTsgCisgIHBvcF9jZnVuICgpOworICBjdXJy ZW50X2Z1bmN0aW9uX2RlY2wgPSBvbGRfY3VycmVudF9mdW5jdGlvbl9kZWNs OworICByZXR1cm4gcmVzb2x2ZXJfZGVjbDsKK30KKwogLyogVGhpcyBidWls ZHMgdGhlIHByb2Nlc3Nvcl9tb2RlbCBzdHJ1Y3QgdHlwZSBkZWZpbmVkIGlu CiAgICBsaWJnY2MvY29uZmlnL2kzODYvY3B1aW5mby5jICAqLwogCkBAIC00 MDkzMiw2ICs0MTkxNiw5IEBAIGl4ODZfbWVtbW9kZWxfY2hlY2sgKHVuc2ln bmVkIEhPU1RfV0lERV9JTlQgdmFsKQogI3VuZGVmIFRBUkdFVF9QUk9GSUxF X0JFRk9SRV9QUk9MT0dVRQogI2RlZmluZSBUQVJHRVRfUFJPRklMRV9CRUZP UkVfUFJPTE9HVUUgaXg4Nl9wcm9maWxlX2JlZm9yZV9wcm9sb2d1ZQogCisj dW5kZWYgVEFSR0VUX01BTkdMRV9ERUNMX0FTU0VNQkxFUl9OQU1FCisjZGVm aW5lIFRBUkdFVF9NQU5HTEVfREVDTF9BU1NFTUJMRVJfTkFNRSBpeDg2X21h bmdsZV9kZWNsX2Fzc2VtYmxlcl9uYW1lCisKICN1bmRlZiBUQVJHRVRfQVNN X1VOQUxJR05FRF9ISV9PUAogI2RlZmluZSBUQVJHRVRfQVNNX1VOQUxJR05F RF9ISV9PUCBUQVJHRVRfQVNNX0FMSUdORURfSElfT1AKICN1bmRlZiBUQVJH RVRfQVNNX1VOQUxJR05FRF9TSV9PUApAQCAtNDEwMjUsNiArNDIwMTIsMTcg QEAgaXg4Nl9tZW1tb2RlbF9jaGVjayAodW5zaWduZWQgSE9TVF9XSURFX0lO VCB2YWwpCiAjdW5kZWYgVEFSR0VUX0ZPTERfQlVJTFRJTgogI2RlZmluZSBU QVJHRVRfRk9MRF9CVUlMVElOIGl4ODZfZm9sZF9idWlsdGluCiAKKyN1bmRl ZiBUQVJHRVRfQ09NUEFSRV9WRVJTSU9OX1BSSU9SSVRZCisjZGVmaW5lIFRB UkdFVF9DT01QQVJFX1ZFUlNJT05fUFJJT1JJVFkgaXg4Nl9jb21wYXJlX3Zl cnNpb25fcHJpb3JpdHkKKworI3VuZGVmIFRBUkdFVF9HRU5FUkFURV9WRVJT SU9OX0RJU1BBVENIRVJfQk9EWQorI2RlZmluZSBUQVJHRVRfR0VORVJBVEVf VkVSU0lPTl9ESVNQQVRDSEVSX0JPRFkgXAorICBpeDg2X2dlbmVyYXRlX3Zl cnNpb25fZGlzcGF0Y2hlcl9ib2R5CisKKyN1bmRlZiBUQVJHRVRfR0VUX0ZV TkNUSU9OX1ZFUlNJT05TX0RJU1BBVENIRVIKKyNkZWZpbmUgVEFSR0VUX0dF VF9GVU5DVElPTl9WRVJTSU9OU19ESVNQQVRDSEVSIFwKKyAgaXg4Nl9nZXRf ZnVuY3Rpb25fdmVyc2lvbnNfZGlzcGF0Y2hlcgorCiAjdW5kZWYgVEFSR0VU X0VOVU1fVkFfTElTVF9QCiAjZGVmaW5lIFRBUkdFVF9FTlVNX1ZBX0xJU1Rf UCBpeDg2X2VudW1fdmFfbGlzdAogCkBAIC00MTE2NSw2ICs0MjE2Myw5IEBA IGl4ODZfbWVtbW9kZWxfY2hlY2sgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQg dmFsKQogI3VuZGVmIFRBUkdFVF9PUFRJT05fUFJJTlQKICNkZWZpbmUgVEFS R0VUX09QVElPTl9QUklOVCBpeDg2X2Z1bmN0aW9uX3NwZWNpZmljX3ByaW50 CiAKKyN1bmRlZiBUQVJHRVRfT1BUSU9OX0ZVTkNUSU9OX1ZFUlNJT05TCisj ZGVmaW5lIFRBUkdFVF9PUFRJT05fRlVOQ1RJT05fVkVSU0lPTlMgaXg4Nl9m dW5jdGlvbl92ZXJzaW9ucworCiAjdW5kZWYgVEFSR0VUX0NBTl9JTkxJTkVf UAogI2RlZmluZSBUQVJHRVRfQ0FOX0lOTElORV9QIGl4ODZfY2FuX2lubGlu ZV9wCiAK --e89a8ff250ee52fbc304cbe413e9--