From owner-freebsd-hackers@FreeBSD.ORG Sun Sep 23 04:12:49 2012 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3267F1065670; Sun, 23 Sep 2012 04:12:49 +0000 (UTC) (envelope-from yanegomi@gmail.com) Received: from mail-oa0-f54.google.com (mail-oa0-f54.google.com [209.85.219.54]) by mx1.freebsd.org (Postfix) with ESMTP id CE6218FC12; Sun, 23 Sep 2012 04:12:47 +0000 (UTC) Received: by oagm1 with SMTP id m1so5760475oag.13 for ; Sat, 22 Sep 2012 21:12:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=bzgd74Lb9TOanuVHex5VupFRW9S/olVKwWYyvEuzmec=; b=nJKa+ly9rm0PbVSLcP/yx9TntDTMdmVrTS889BJu7HFo9zHEkjbL5vS/9287neeaRZ ihkcIKArv28bewarumkqsXb+suFUnTNe0x6yhXup1oO0Xg4Frb0W0uz11W0PveIyTX5e MZP9R0nnlynJFdtrZbsyPwh1QkvrkthKWxLrLnONcIlF2UPO71Zv8vDtomHWh5/scs+i LKqJkIgNKWM29XE2KHczeu38qidZeQCLyYgcwLLrn1JBOv3J02ijRVpVotTL7J8S5iv+ HkW34Wnvyea9ANBQCqjXDJ/cfQWzOphtdkU6TCJazJ1ipOboxEwFDMbegx4RjOuW2098 tdWg== MIME-Version: 1.0 Received: by 10.60.20.69 with SMTP id l5mr7008395oee.114.1348373565539; Sat, 22 Sep 2012 21:12:45 -0700 (PDT) Received: by 10.76.142.201 with HTTP; Sat, 22 Sep 2012 21:12:44 -0700 (PDT) In-Reply-To: References: Date: Sat, 22 Sep 2012 21:12:44 -0700 Message-ID: From: Garrett Cooper To: freebsd-toolchain@freebsd.org Content-Type: multipart/mixed; boundary=e89a8fb206686603e204ca56aff2 Cc: freebsd-hackers@freebsd.org, Bruce Evans Subject: Re: [CFT/RFC]: refactor bsd.prog.mk to understand multiple programs instead of a singular program X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 23 Sep 2012 04:12:49 -0000 --e89a8fb206686603e204ca56aff2 Content-Type: text/plain; charset=ISO-8859-1 On Sun, Sep 2, 2012 at 11:01 PM, Garrett Cooper wrote: > Hello, > I've been a bit busy working on porting over ATF from NetBSD, and > one of the pieces that's currently not available in FreeBSD that's > available in NetBSD is the ability to understand and compile multiple > programs. In order to do this I had to refactor bsd.prog.mk (a lot). > The attached patch is the end result so far, and I was wondering if > anyone could please review it and/or test it (outside of me doing so). > I wrote over 40 tests, but it's not exercising everything, and I would > like for someone to please review/test this out who has an interest in > NLS support (ala bsd.nls.mk) in particular. AFAICT this is the only > gap that I couldn't resolve right away (there isn't a ton of recent > documentation on how to use bsd.nls.mk). > I'll run a micro benchmark and buildworld a few times (in > progress) with and without the change to measure the performance > effect. > Any assistance would be much appreciated. I've attached an updated version of the patch (run through buildworld successfully multiple times; make universe successfully; going to submit for an -exp run). I needed to modify bsd.crunchgen.mk to grok OBJS.${PROG}, but apart from that backwards compatibility has been maintained -- sans-INSTALLFLAGS_EDIT (does anyone still use that undocumented functionality?). Performance wise, it's slightly slower on my W3520 with the change, but not by much (~20 seconds). As always, questions and comments are welcome, and if someone has a chance, please review the proposed patch. Thanks! -Garrett Without the change: $ python calc_runtime.py bw.*_without.log | ministat -w 72 x +------------------------------------------------------------------------+ | x | |x x x x x xx x x| | |_________________________A_________M________________| | +------------------------------------------------------------------------+ N Min Max Median Avg Stddev x 10 919 1010 972 958.9 33.994934 With the change: $ python calc_runtime.py bw.*.log | ministat -w 72 x +------------------------------------------------------------------------+ | x | |xx x x x x x xx| | |___________________________A_________________M_________| | +------------------------------------------------------------------------+ N Min Max Median Avg Stddev x 10 940 1002 988 972.3 24.476973 make universe results: # make universe MAKE_JUST_WORLDS=y -------------------------------------------------------------- >>> make universe started on Tue Sep 18 09:30:04 PDT 2012 -------------------------------------------------------------- >> amd64 started on Tue Sep 18 09:30:04 PDT 2012 >> amd64.amd64 buildworld started on Tue Sep 18 09:30:04 PDT 2012 >> amd64.amd64 buildworld completed on Tue Sep 18 11:20:19 PDT 2012 >> amd64 completed on Tue Sep 18 11:20:19 PDT 2012 >> arm started on Tue Sep 18 11:20:19 PDT 2012 >> arm.arm buildworld started on Tue Sep 18 11:20:19 PDT 2012 >> arm.arm buildworld completed on Tue Sep 18 12:25:24 PDT 2012 >> arm.armeb buildworld started on Tue Sep 18 12:25:24 PDT 2012 >> arm.armeb buildworld completed on Tue Sep 18 13:30:25 PDT 2012 >> arm.armv6 buildworld started on Tue Sep 18 13:30:25 PDT 2012 >> arm.armv6 buildworld completed on Tue Sep 18 14:35:14 PDT 2012 >> arm.armv6eb buildworld started on Tue Sep 18 14:35:14 PDT 2012 >> arm.armv6eb buildworld completed on Tue Sep 18 15:40:05 PDT 2012 >> arm completed on Tue Sep 18 15:40:05 PDT 2012 >> i386 started on Tue Sep 18 15:40:05 PDT 2012 >> i386.i386 buildworld started on Tue Sep 18 15:40:05 PDT 2012 >> i386.i386 buildworld completed on Tue Sep 18 16:56:06 PDT 2012 >> i386 completed on Tue Sep 18 16:56:06 PDT 2012 >> ia64 started on Tue Sep 18 16:56:06 PDT 2012 >> ia64.ia64 buildworld started on Tue Sep 18 16:56:06 PDT 2012 >> ia64.ia64 buildworld completed on Tue Sep 18 18:27:49 PDT 2012 >> ia64 completed on Tue Sep 18 18:27:49 PDT 2012 >> mips started on Tue Sep 18 18:27:49 PDT 2012 >> mips.mipsel buildworld started on Tue Sep 18 18:27:49 PDT 2012 >> mips.mipsel buildworld completed on Tue Sep 18 19:34:50 PDT 2012 >> mips.mips buildworld started on Tue Sep 18 19:34:50 PDT 2012 >> mips.mips buildworld completed on Tue Sep 18 20:41:49 PDT 2012 >> mips.mips64el buildworld started on Tue Sep 18 20:41:49 PDT 2012 >> mips.mips64el buildworld completed on Tue Sep 18 21:49:21 PDT 2012 >> mips.mips64 buildworld started on Tue Sep 18 21:49:21 PDT 2012 >> mips.mips64 buildworld completed on Tue Sep 18 22:57:13 PDT 2012 >> mips.mipsn32 buildworld started on Tue Sep 18 22:57:13 PDT 2012 >> mips.mipsn32 buildworld completed on Wed Sep 19 00:04:43 PDT 2012 >> mips completed on Wed Sep 19 00:04:43 PDT 2012 >> pc98 started on Wed Sep 19 00:04:43 PDT 2012 >> pc98.i386 buildworld started on Wed Sep 19 00:04:43 PDT 2012 >> pc98.i386 buildworld completed on Wed Sep 19 01:20:42 PDT 2012 >> pc98 completed on Wed Sep 19 01:20:42 PDT 2012 >> powerpc started on Wed Sep 19 01:20:42 PDT 2012 >> powerpc.powerpc buildworld started on Wed Sep 19 01:20:42 PDT 2012 >> powerpc.powerpc buildworld completed on Wed Sep 19 02:37:34 PDT 2012 >> powerpc.powerpc64 buildworld started on Wed Sep 19 02:37:34 PDT 2012 >> powerpc.powerpc64 buildworld completed on Wed Sep 19 04:28:10 PDT 2012 >> powerpc completed on Wed Sep 19 04:28:10 PDT 2012 >> sparc64 started on Wed Sep 19 04:28:10 PDT 2012 >> sparc64.sparc64 buildworld started on Wed Sep 19 04:28:10 PDT 2012 >> sparc64.sparc64 buildworld completed on Wed Sep 19 05:42:30 PDT 2012 >> sparc64 completed on Wed Sep 19 05:42:30 PDT 2012 -------------------------------------------------------------- >>> make universe completed on Wed Sep 19 05:42:30 PDT 2012 (started Tue Sep 18 09:30:04 PDT 2012) -------------------------------------------------------------- --e89a8fb206686603e204ca56aff2 Content-Type: application/octet-stream; name="share-mk-bsd-prog-mk-CURRENT.patch" Content-Disposition: attachment; filename="share-mk-bsd-prog-mk-CURRENT.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h7fmqx4g0 SW5kZXg6IHNoYXJlL21rL2JzZC5jcnVuY2hnZW4ubWsKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2hhcmUvbWsv YnNkLmNydW5jaGdlbi5tawkocmV2aXNpb24gMjQwNjg5KQorKysgc2hhcmUvbWsvYnNkLmNydW5j aGdlbi5tawkod29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsNyBAQAogIyAgICAgICBsb2NhbCBh cmNoaXRlY3R1cmUuCiAjCiAjIFNwZWNpYWwgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGZvciBp bmRpdmlkdWFsIHByb2dyYW1zCisjICBDUlVOQ0hfT0JKVkFSXyQoUCk6IE9CSlMgdmFyaWFibGUg Zm9yIHByb2dyYW0gJChQKTsgZGVmYXVsdHMgdG8gT0JKUy4ke1BST0d9LgogIyAgQ1JVTkNIX1NS Q0RJUl8kKFApOiBiYXNlIHNvdXJjZSBkaXJlY3RvcnkgZm9yIHByb2dyYW0gJChQKQogIyAgQ1JV TkNIX0JVSUxET1BUU18kKFApOiBhZGRpdGlvbmFsIGJ1aWxkIG9wdGlvbnMgZm9yICQoUCkKICMg IENSVU5DSF9BTElBU18kKFApOiBhZGRpdGlvbmFsIG5hbWVzIHRvIGJlIHVzZWQgZm9yICQoUCkK QEAgLTQ5LDYgKzUwLDcgQEAKICMgZXhjZXB0IGZvciB0aG9zZSB0aGF0IGdldCBzdXBwcmVzc2Vk LgogLmZvciBEIGluICQoQ1JVTkNIX1NSQ0RJUlMpCiAuZm9yIFAgaW4gJChDUlVOQ0hfUFJPR1Nf JChEKSkKK0NSVU5DSF9PQkpWQVJfJHtQfT89CSdPQkpTLiQke1BST0d9JwogLmlmZGVmIENSVU5D SF9TUkNESVJfJHtQfQogJChPVVRQVVRTKTogJChDUlVOQ0hfU1JDRElSXyR7UH0pL01ha2VmaWxl CiAuZWxzZQpAQCAtOTUsNiArOTcsNyBAQAogLmVsc2UKIAllY2hvIHNwZWNpYWwgJChQKSBidWls ZG9wdHMgRElSUFJGWD0ke0RJUlBSRlh9JHtQfS8gPj4kKC5UQVJHRVQpCiAuZW5kaWYKKwllY2hv IHNwZWNpYWwgJChQKSBvYmp2YXIgJChDUlVOQ0hfT0JKVkFSXyR7UH0pID4+ICQoLlRBUkdFVCkK IC5mb3IgQSBpbiAkKENSVU5DSF9BTElBU18kKFApKQogCWVjaG8gbG4gJChQKSAkKEEpID4+JCgu VEFSR0VUKQogLmVuZGZvcgpJbmRleDogc2hhcmUvbWsvYnNkLmR0cmFjZS5tawo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBzaGFyZS9tay9ic2QuZHRyYWNlLm1rCShyZXZpc2lvbiAyNDA2ODkpCisrKyBzaGFyZS9t ay9ic2QuZHRyYWNlLm1rCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBACiBEUEFERCs9 JHtMSUJFTEZ9CiBMREFERCs9LWxlbGYKIAotLmlmIGRlZmluZWQoUFJPRykKKy5pZiBkZWZpbmVk KFBST0cpIHx8IGRlZmluZWQoUFJPR1MpCiBfRFRSQUNFTElOS0lORz0ke09CSlN9CiBPQkpTKz0k e0RUUkFDRU9CSlN9CiAuZWxzZQpJbmRleDogc2hhcmUvbWsvYnNkLnByb2cubWsKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gc2hhcmUvbWsvYnNkLnByb2cubWsJKHJldmlzaW9uIDI0MDY4OSkKKysrIHNoYXJlL21r L2JzZC5wcm9nLm1rCSh3b3JraW5nIGNvcHkpCkBAIC01LDIyMiArNSwzMzYgQEAKIAogLlNVRkZJ WEVTOiAub3V0IC5vIC5jIC5jYyAuY3BwIC5jeHggLkMgLm0gLnkgLmwgLmxuIC5zIC5TIC5hc20K IAotIyBYWFggVGhlIHVzZSBvZiBDT1BUUyBpbiBtb2Rlcm4gbWFrZWZpbGVzIGlzIGRpc2NvdXJh Z2VkLgorLmlmICR7TUtfTUFOfSA9PSAibm8iCitOT19NQU49CisuZW5kaWYKKworIyBMZWdhY3kg a25vYnMKKy5pZiBkZWZpbmVkKFBST0cpIHx8IGRlZmluZWQoUFJPR19DWFgpCisuIGlmIGRlZmlu ZWQoUFJPRykKK1BST0dTPQkJJHtQUk9HfQorLiBlbmRpZgorLiBpZiBkZWZpbmVkKFBST0dfQ1hY KQorUFJPR1M9CQkke1BST0dfQ1hYfQorUFJPR1NfQ1hYPQkke1BST0dfQ1hYfQorLiBlbmRpZgor IyBMb29wIG9uY2UgdG8ga2VlcCBwYXR0ZXJuIGFuZCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9u CisuIGZvciBfUCBpbiAke1BST0dTfQorLiAgaWYgZGVmaW5lZChJTlRFUk5BTFBST0cpCitJTlRF Uk5BTFBST0cuJHtfUH09CisuICBlbmRpZgorLiAgaWYgIWRlZmluZWQoTk9fTUFOKQorLiAgIGlm IGRlZmluZWQoTUFOKQorTUFOLiR7X1B9PQkke01BTn0KKy4gICBlbHNlCisuICAgIGZvciBzZWN0 IGluIDEgMWFvdXQgMiAzIDQgNSA2IDcgOCA5CisuICAgICBpZiBkZWZpbmVkKE1BTiR7c2VjdH0p CitNQU4uJHtfUH09CSR7TUFOJHtzZWN0fX0KKy4gICAgIGVuZGlmCisuICAgIGVuZGZvcgorLiAg IGVuZGlmCisuICBlbmRpZiAjIGRlZmluZWQoTk9fTUFOKQorLiAgaWYgZGVmaW5lZChOTFNOQU1F KSAmJiAhZW1wdHkoTkxTTkFNRSkKK05MU05BTUUuJHtQfTo9CSR7TkxTTkFNRX0KKy4gIGVuZGlm CisuICBpZiBkZWZpbmVkKE9CSlMpCitPQkpTLiR7X1B9Oj0JJHtPQkpTfQorLiAgZW5kaWYKKy4g IGlmIGRlZmluZWQoUFJFQ0lPVVNQUk9HKQorUFJFQ0lPVVNQUk9HLiR7X1B9PQorLiAgZW5kaWYK Ky4gIGlmIGRlZmluZWQoUFJPR05BTUUpCitQUk9HTkFNRS4ke19QfT0JJHtQUk9HTkFNRX0KKy4g IGVuZGlmCisuICBpZiBkZWZpbmVkKFNSQ1MpCitTUkNTLiR7X1B9Oj0JJHtTUkNTfQorLiAgZW5k aWYKKy4gZW5kZm9yCisuZWxzZSAjICFkZWZpbmVkKFBST0cpICYmICFkZWZpbmVkKFBST0dfQ1hY KQorLiBpZiBkZWZpbmVkKFBST0dTX0NYWCkgJiYgIWVtcHR5KFBST0dTX0NYWCkKK1BST0dTKz0J CSR7UFJPR1NfQ1hYfQorLiBlbmRpZgorLmVuZGlmICMgZGVmaW5lZChQUk9HKSB8fCBkZWZpbmVk KFBST0dfQ1hYKQorCisuaWYgZGVmaW5lZChQUk9HU19DWFgpICYmICFlbXB0eShQUk9HU19DWFgp CisuIGZvciBfUCBpbiAke1BST0dTX0NYWH0KK1BST0dfQ1hYLiR7X1B9PQorLiBlbmRmb3IKKy5l bmRpZgorCisjIEF2b2lkIHJlY3Vyc2l2ZSB2YXJpYWJsZXMKKy51bmRlZiBOTFNOQU1FCisKIC5p ZiBkZWZpbmVkKENPUFRTKQogQ0ZMQUdTKz0ke0NPUFRTfQogLmVuZGlmCiAKKy5pZiBkZWZpbmVk KERFQlVHX0ZMQUdTKQorLiBpZiAke01LX0NURn0gIT0gIm5vIiAmJiAke0RFQlVHX0ZMQUdTOk0t Z30gIT0gIiIKK0NURkZMQUdTKz0gLWcKKy4gZW5kaWYKK0NGTEFHUys9JHtERUJVR19GTEFHU30K K0NYWEZMQUdTKz0ke0RFQlVHX0ZMQUdTfQorLmVuZGlmCisKK1NUUklQPz0JCS1zCisKIC5pZiAk e01LX0FTU0VSVF9ERUJVR30gPT0gIm5vIgogQ0ZMQUdTKz0gLUROREVCVUcKIE5PX1dFUlJPUj0K IC5lbmRpZgogCi0uaWYgZGVmaW5lZChERUJVR19GTEFHUykKLUNGTEFHUys9JHtERUJVR19GTEFH U30KLUNYWEZMQUdTKz0ke0RFQlVHX0ZMQUdTfQorLmZvciBfUCBpbiAke1BST0dTfQogCi0uaWYg JHtNS19DVEZ9ICE9ICJubyIgJiYgJHtERUJVR19GTEFHUzpNLWd9ICE9ICIiCi1DVEZGTEFHUys9 IC1nCi0uZW5kaWYKLS5lbmRpZgorQklORElSLiR7X1B9Pz0JJHtCSU5ESVJ9CitCSU5HUlAuJHtf UH0/PQkke0JJTkdSUH0KK0JJTk1PREUuJHtfUH0/PQkke0JJTk1PREV9CitCSU5PV04uJHtfUH0/ PQkke0JJTk9XTn0KIAotLmlmIGRlZmluZWQoQ1JVTkNIX0NGTEFHUykKLUNGTEFHUys9JHtDUlVO Q0hfQ0ZMQUdTfQotLmVuZGlmCitDRkxBR1MuJHtfUH0rPQkke0NGTEFHU30KK0NYWEZMQUdTLiR7 X1B9Kz0gJHtDWFhGTEFHU30KK0RQQURELiR7X1B9Kz0JJHtEUEFERH0KK0xEQURELiR7X1B9Kz0J JHtMREFERH0KK0xERkxBR1MuJHtfUH0rPQkke0xERkxBR1N9CiAKLS5pZiAhZGVmaW5lZChERUJV R19GTEFHUykKLVNUUklQPz0JLXMKLS5lbmRpZgorSU5TVEFMTEZMQUdTLiR7X1B9Pz0gJHtJTlNU QUxMRkxBR1N9CiAKLS5pZiBkZWZpbmVkKE5PX1NIQVJFRCkgJiYgKCR7Tk9fU0hBUkVEfSAhPSAi bm8iICYmICR7Tk9fU0hBUkVEfSAhPSAiTk8iKQotTERGTEFHUys9IC1zdGF0aWMKLS5lbmRpZgor LiBpZiBkZWZpbmVkKFBSRUNJT1VTUFJPRy4ke19QfSkKKy4gIGlmICFkZWZpbmVkKE5PX0ZTQ0hH KSAmJiAhZGVmaW5lZChOT19GU0NIRy4ke19QfSkKK0lOU1RBTExGTEFHUy4ke19QfSs9IC1mc2No ZworLiAgZW5kaWYKK0lOU1RBTExGTEFHUy4ke19QfSs9IC1TCisuIGVuZGlmCiAKLS5pZiBkZWZp bmVkKFBST0dfQ1hYKQotUFJPRz0JJHtQUk9HX0NYWH0KLS5lbmRpZgorTk9fU0hBUkVELiR7X1B9 Pz0JJHtOT19TSEFSRUR9CiAKLS5pZiBkZWZpbmVkKFBST0cpCi0uaWYgZGVmaW5lZChTUkNTKQor LiBpZiAhZGVmaW5lZChOTFNESVIuJHtfUH0pCitOTFNESVIuJHtfUH06PQkke05MU0RJUn0KKy4g ZW5kaWYKKy4gdW5kZWYgTkxTRElSCiAKLU9CSlMrPSAgJHtTUkNTOk4qLmg6UjpTLyQvLm8vZ30K Ky4gaWYgIWVtcHR5KE5PX1NIQVJFRC4ke19QfSkgJiYgJHtOT19TSEFSRUQuJHtfUH06dGx9ICE9 ICJubyIKK0xERkxBR1MuJHtfUH0rPSAtc3RhdGljCisuIGVuZGlmCiAKLS5pZiB0YXJnZXQoYmVm b3JlbGlua2luZykKLSR7UFJPR306ICR7T0JKU30gYmVmb3JlbGlua2luZwotLmVsc2UKLSR7UFJP R306ICR7T0JKU30KLS5lbmRpZgotLmlmIGRlZmluZWQoUFJPR19DWFgpCi0JJHtDWFh9ICR7Q1hY RkxBR1N9ICR7TERGTEFHU30gLW8gJHsuVEFSR0VUfSAke09CSlN9ICR7TERBRER9Ci0uZWxzZQot CSR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IC1vICR7LlRBUkdFVH0gJHtPQkpTfSAke0xEQURE fQotLmVuZGlmCi0uaWYgJHtNS19DVEZ9ICE9ICJubyIKLQkke0NURk1FUkdFfSAke0NURkZMQUdT fSAtbyAkey5UQVJHRVR9ICR7T0JKU30KLS5lbmRpZgorLiBpZiBkZWZpbmVkKFNSQ1MuJHtfUH0p CiAKLS5lbHNlCSMgIWRlZmluZWQoU1JDUykKK19TUkNTOj0JCSR7U1JDUy4ke19QfX0KK09CSlMu JHtfUH0rPQkke19TUkNTOk4qLmg6UjpTLyQvLm8vZ30KIAotLmlmICF0YXJnZXQoJHtQUk9HfSkK LS5pZiBkZWZpbmVkKFBST0dfQ1hYKQotU1JDUz0JJHtQUk9HfS5jYwotLmVsc2UKLVNSQ1M9CSR7 UFJPR30uYwotLmVuZGlmCisuICBpZiB0YXJnZXQoYmVmb3JlbGlua2luZykKKyR7X1B9OiAke09C SlMuJHtfUH19IGJlZm9yZWxpbmtpbmcKKy4gIGVsc2UKKyR7X1B9OiAke09CSlMuJHtfUH19Cisu ICBlbmRpZgorLiAgaWYgZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKKwkke0NYWH0gJHtDWFhGTEFH Uy4ke19QfX0gJHtMREZMQUdTLiR7X1B9fSAtbyAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0gXAor CSAgICAke0xEQURELiR7X1B9fQorLiAgZWxzZQorCSR7Q0N9ICR7Q0ZMQUdTLiR7X1B9fSAke0xE RkxBR1MuJHtfUH19IC1vICR7LlRBUkdFVH0gJHtPQkpTLiR7X1B9fSBcCisJICAgICR7TERBREQu JHtfUH19CisuICBlbmRpZgorLiAgaWYgJHtNS19DVEZ9ICE9ICJubyIKKwkke0NURk1FUkdFfSAk e0NURkZMQUdTfSAtbyAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0KKy4gIGVuZGlmCiAKKy4gZWxz ZSAjICFkZWZpbmVkKFNSQ1MuJHtfUH0pCisKKy4gIGlmICF0YXJnZXQoJHtfUH0pCisuICAgaWYg ZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKK1NSQ1MuJHtfUH0/PQkke19QfS5jYworLiAgIGVsc2UK K1NSQ1MuJHtfUH0/PQkke19QfS5jCisuICAgZW5kaWYKKwogIyBBbHdheXMgbWFrZSBhbiBpbnRl cm1lZGlhdGUgb2JqZWN0IGZpbGUgYmVjYXVzZToKICMgLSBpdCBzYXZlcyB0aW1lIHJlYnVpbGRp bmcgd2hlbiBvbmx5IHRoZSBsaWJyYXJ5IGhhcyBjaGFuZ2VkCiAjIC0gdGhlIG5hbWUgb2YgdGhl IG9iamVjdCBnZXRzIHB1dCBpbnRvIHRoZSBleGVjdXRhYmxlIHN5bWJvbCB0YWJsZSBpbnN0ZWFk IG9mCiAjICAgdGhlIG5hbWUgb2YgYSB2YXJpYWJsZSB0ZW1wb3Jhcnkgb2JqZWN0LgogIyAtIGl0 J3MgdXNlZnVsIHRvIGtlZXAgb2JqZWN0cyBhcm91bmQgZm9yIGNydW5jaGluZy4KLU9CSlM9CSR7 UFJPR30ubworT0JKUy4ke19QfTo9CSR7X1B9Lm8KIAotLmlmIHRhcmdldChiZWZvcmVsaW5raW5n KQotJHtQUk9HfTogJHtPQkpTfSBiZWZvcmVsaW5raW5nCi0uZWxzZQotJHtQUk9HfTogJHtPQkpT fQotLmVuZGlmCi0uaWYgZGVmaW5lZChQUk9HX0NYWCkKLQkke0NYWH0gJHtDWFhGTEFHU30gJHtM REZMQUdTfSAtbyAkey5UQVJHRVR9ICR7T0JKU30gJHtMREFERH0KLS5lbHNlCi0JJHtDQ30gJHtD RkxBR1N9ICR7TERGTEFHU30gLW8gJHsuVEFSR0VUfSAke09CSlN9ICR7TERBRER9Ci0uZW5kaWYK LS5pZiAke01LX0NURn0gIT0gIm5vIgotCSR7Q1RGTUVSR0V9ICR7Q1RGRkxBR1N9IC1vICR7LlRB UkdFVH0gJHtPQkpTfQotLmVuZGlmCi0uZW5kaWYKKy4gICBpZiB0YXJnZXQoYmVmb3JlbGlua2lu ZykKKyR7X1B9OiAke09CSlMuJHtfUH19IGJlZm9yZWxpbmtpbmcKKy4gICBlbHNlCiske19QfTog JHtPQkpTLiR7X1B9fQorLiAgIGVuZGlmICMgdGFyZ2V0KGJlZm9yZWxpbmtpbmcpCisuICAgaWYg ZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKKwkke0NYWH0gJHtDWFhGTEFHUy4ke19QfX0gJHtMREZM QUdTLiR7X1B9fSAtbyAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0gXAorCSAgICAke0xEQURELiR7 X1B9fQorLiAgIGVsc2UKKwkke0NDfSAke0NGTEFHUy4ke19QfX0gJHtMREZMQUdTLiR7X1B9fSAt byAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0gXAorCSAgICAke0xEQURELiR7X1B9fQorLiAgIGVu ZGlmCisuICAgaWYgJHtNS19DVEZ9ICE9ICJubyIKKwkke0NURk1FUkdFfSAke0NURkZMQUdTfSAt byAkey5UQVJHRVR9ICR7T0JKUy4ke19QfX0KKy4gICBlbmRpZgogCi0uZW5kaWYKKy4gIGVuZGlm ICMgIXRhcmdldCgke19QfSkKIAotLmlmCSR7TUtfTUFOfSAhPSAibm8iICYmICFkZWZpbmVkKE1B TikgJiYgXAotCSFkZWZpbmVkKE1BTjEpICYmICFkZWZpbmVkKE1BTjIpICYmICFkZWZpbmVkKE1B TjMpICYmIFwKLQkhZGVmaW5lZChNQU40KSAmJiAhZGVmaW5lZChNQU41KSAmJiAhZGVmaW5lZChN QU42KSAmJiBcCi0JIWRlZmluZWQoTUFONykgJiYgIWRlZmluZWQoTUFOOCkgJiYgIWRlZmluZWQo TUFOOSkgJiYgXAotCSFkZWZpbmVkKE1BTjFhb3V0KQotTUFOPQkke1BST0d9LjEKLU1BTjE9CSR7 TUFOfQotLmVuZGlmCi0uZW5kaWYKKy4gZW5kaWYgIyBkZWZpbmVkKFNSQ1MuJHtfUH0pCiAKLWFs bDogb2Jqd2FybiAke1BST0d9ICR7U0NSSVBUU30KLS5pZiAke01LX01BTn0gIT0gIm5vIgorQ0xF QU5GSUxFUys9IAkke09CSlMuJHtfUH19CisKKy5lbmRmb3IgIyBmb3IgX1AgaW4gJHtQUk9HU30K KworYWxsOiBvYmp3YXJuICR7UFJPR1N9ICR7U0NSSVBUU30KKworLmlmICFkZWZpbmVkKE5PX01B TikKKy4gZm9yIF9QIGluICR7UFJPR1N9CitNQU4uJHtfUH0/PQkke19QfS4xCitNQU46PQkJJHtN QU4uJHtfUH19CisuICBpbmNsdWRlIDxic2QubWFuLm1rPgorLiBlbmRmb3IKKy4gaWYgdGFyZ2V0 KF9tYW5wYWdlcykgIyBic2QubWFuLm1rIHdhcyBpbmNsdWRlZAogYWxsOiBfbWFucGFnZXMKKy4g ZW5kaWYKIC5lbmRpZgogCi0uaWYgZGVmaW5lZChQUk9HKQotQ0xFQU5GSUxFUys9ICR7UFJPR30K LS5lbmRpZgorQ0xFQU5GSUxFUys9CSR7UFJPR1N9CiAKLS5pZiBkZWZpbmVkKE9CSlMpCi1DTEVB TkZJTEVTKz0gJHtPQkpTfQotLmVuZGlmCi0KIC5pbmNsdWRlIDxic2QubGlibmFtZXMubWs+CiAK LS5pZiBkZWZpbmVkKFBST0cpCiBfRVhUUkFERVBFTkQ6Ci0uaWYgZGVmaW5lZChMREZMQUdTKSAm JiAhZW1wdHkoTERGTEFHUzpNLW5vc3RkbGliKQotLmlmIGRlZmluZWQoRFBBREQpICYmICFlbXB0 eShEUEFERCkKLQllY2hvICR7UFJPR306ICR7RFBBRER9ID4+ICR7REVQRU5ERklMRX0KLS5lbmRp ZgotLmVsc2UKLQllY2hvICR7UFJPR306ICR7TElCQ30gJHtEUEFERH0gPj4gJHtERVBFTkRGSUxF fQotLmlmIGRlZmluZWQoUFJPR19DWFgpCi0uaWYgIWVtcHR5KENYWEZMQUdTOk0tc3RkbGliPWxp YmMrKykKLQllY2hvICR7UFJPR306ICR7TElCQ1BMVVNQTFVTfSA+PiAke0RFUEVOREZJTEV9Ci0u ZWxzZQotCWVjaG8gJHtQUk9HfTogJHtMSUJTVERDUExVU1BMVVN9ID4+ICR7REVQRU5ERklMRX0K LS5lbmRpZgotLmVuZGlmCi0uZW5kaWYKLS5lbmRpZgorLmZvciBfUCBpbiAke1BST0dTfQorLiBp ZiAhZW1wdHkoTERGTEFHUy4ke1B9Ok0tbm9zdGRsaWIpCisuICBpZiAhZW1wdHkoRFBBREQuJHtf UH0pCisJZWNobyAke19QfTogJHtEUEFERC4ke19QfX0gPj4gJHtERVBFTkRGSUxFfQorLiAgZW5k aWYKKy4gZWxzZQorCWVjaG8gJHtfUH06ICR7TElCQ30gJHtEUEFERC4ke19QfX0gPj4gJHtERVBF TkRGSUxFfQorLiAgaWYgZGVmaW5lZChQUk9HX0NYWC4ke19QfSkKKy4gICBpZiAhZW1wdHkoQ1hY RkxBR1MuJHtQfTpNLXN0ZGxpYj1saWJjKyspCisJZWNobyAke19QfTogJHtMSUJDUExVU1BMVVN9 ID4+ICR7REVQRU5ERklMRX0KKy4gICBlbHNlCisJZWNobyAke19QfTogJHtMSUJTVERDUExVU1BM VVN9ID4+ICR7REVQRU5ERklMRX0KKy4gICBlbmRpZgorLiAgZW5kaWYKKy4gZW5kaWYKKy5lbmRm b3IKIAogLmlmICF0YXJnZXQoaW5zdGFsbCkKIAotLmlmIGRlZmluZWQoUFJFQ0lPVVNQUk9HKQot LmlmICFkZWZpbmVkKE5PX0ZTQ0hHKQotSU5TVEFMTEZMQUdTKz0gLWZzY2hnCi0uZW5kaWYKLUlO U1RBTExGTEFHUys9IC1TCi0uZW5kaWYKKy4gaWYgIXRhcmdldChyZWFsaW5zdGFsbCkKIAotX0lO U1RBTExGTEFHUzo9CSR7SU5TVEFMTEZMQUdTfQotLmZvciBpZSBpbiAke0lOU1RBTExGTEFHU19F RElUfQotX0lOU1RBTExGTEFHUzo9CSR7X0lOU1RBTExGTEFHUyR7aWV9fQotLmVuZGZvcgorLiAg Zm9yIF9QIGluICR7UFJPR1N9CiAKLS5pZiAhdGFyZ2V0KHJlYWxpbnN0YWxsKSAmJiAhZGVmaW5l ZChJTlRFUk5BTFBST0cpCi1yZWFsaW5zdGFsbDogX3Byb2dpbnN0YWxsCi0uT1JERVI6IGJlZm9y ZWluc3RhbGwgX3Byb2dpbnN0YWxsCi1fcHJvZ2luc3RhbGw6Ci0uaWYgZGVmaW5lZChQUk9HKQot LmlmIGRlZmluZWQoUFJPR05BTUUpCi0JJHtJTlNUQUxMfSAke1NUUklQfSAtbyAke0JJTk9XTn0g LWcgJHtCSU5HUlB9IC1tICR7QklOTU9ERX0gXAotCSAgICAke19JTlNUQUxMRkxBR1N9ICR7UFJP R30gJHtERVNURElSfSR7QklORElSfS8ke1BST0dOQU1FfQotLmVsc2UKLQkke0lOU1RBTEx9ICR7 U1RSSVB9IC1vICR7QklOT1dOfSAtZyAke0JJTkdSUH0gLW0gJHtCSU5NT0RFfSBcCi0JICAgICR7 X0lOU1RBTExGTEFHU30gJHtQUk9HfSAke0RFU1RESVJ9JHtCSU5ESVJ9Ci0uZW5kaWYKLS5lbmRp ZgotLmVuZGlmCSMgIXRhcmdldChyZWFsaW5zdGFsbCkKKy4gICBpZiAhZGVmaW5lZChJTlRFUk5B TFBST0cuJHtfUH0pCiAKLS5pZiBkZWZpbmVkKFNDUklQVFMpICYmICFlbXB0eShTQ1JJUFRTKQot cmVhbGluc3RhbGw6IF9zY3JpcHRzaW5zdGFsbAotLk9SREVSOiBiZWZvcmVpbnN0YWxsIF9zY3Jp cHRzaW5zdGFsbAorLk9SREVSOiBiZWZvcmVpbnN0YWxsIF9wcm9naW5zdGFsbC4ke19QfQorX3By b2dpbnN0YWxsLiR7X1B9OgorLiAgICBpZiBkZWZpbmVkKFBST0dOQU1FLiR7X1B9KQorCSR7SU5T VEFMTH0gJHtTVFJJUH0gLW8gJHtCSU5PV04uJHtfUH19IC1nICR7QklOR1JQLiR7X1B9fSBcCisJ ICAgIC1tICR7QklOTU9ERS4ke19QfX0gJHtJTlNUQUxMRkxBR1MuJHtfUH19ICR7X1B9IFwKKwkg ICAgJHtERVNURElSfSR7QklORElSLiR7X1B9fS8ke1BST0dOQU1FLiR7X1B9fQorLiAgICBlbHNl CisJJHtJTlNUQUxMfSAke1NUUklQfSAtbyAke0JJTk9XTi4ke19QfX0gLWcgJHtCSU5HUlAuJHtf UH19IFwKKwkgICAgLW0gJHtCSU5NT0RFLiR7X1B9fSAke0lOU1RBTExGTEFHUy4ke19QfX0gJHtf UH0gXAorCSAgICAke0RFU1RESVJ9JHtCSU5ESVIuJHtfUH19CisuICAgIGVuZGlmIAogCityZWFs aW5zdGFsbDogX3Byb2dpbnN0YWxsLiR7X1B9CisKKy4gICBlbmRpZiAjICFkZWZpbmVkKElOVEVS TkFMUFJPRy4ke19QfSkKKworLiAgZW5kZm9yICMgZm9yIF9QIGluICR7UFJPR1N9CisKKy4gZW5k aWYgIyAhdGFyZ2V0KHJlYWxpbnN0YWxsKQorCisuIGlmIGRlZmluZWQoU0NSSVBUUykgJiYgIWVt cHR5KFNDUklQVFMpCiBTQ1JJUFRTRElSPz0JJHtCSU5ESVJ9CiBTQ1JJUFRTT1dOPz0JJHtCSU5P V059CiBTQ1JJUFRTR1JQPz0JJHtCSU5HUlB9CiBTQ1JJUFRTTU9ERT89CSR7QklOTU9ERX0KIAot LmZvciBzY3JpcHQgaW4gJHtTQ1JJUFRTfQotLmlmIGRlZmluZWQoU0NSSVBUU05BTUUpCi1TQ1JJ UFRTTkFNRV8ke3NjcmlwdDpUfT89CSR7U0NSSVBUU05BTUV9Ci0uZWxzZQotU0NSSVBUU05BTUVf JHtzY3JpcHQ6VH0/PQkke3NjcmlwdDpUOlJ9Ci0uZW5kaWYKLVNDUklQVFNESVJfJHtzY3JpcHQ6 VH0/PQkke1NDUklQVFNESVJ9Ci1TQ1JJUFRTT1dOXyR7c2NyaXB0OlR9Pz0JJHtTQ1JJUFRTT1dO fQotU0NSSVBUU0dSUF8ke3NjcmlwdDpUfT89CSR7U0NSSVBUU0dSUH0KLVNDUklQVFNNT0RFXyR7 c2NyaXB0OlR9Pz0JJHtTQ1JJUFRTTU9ERX0KLV9zY3JpcHRzaW5zdGFsbDogX1NDUklQVFNJTlNf JHtzY3JpcHQ6VH0KLV9TQ1JJUFRTSU5TXyR7c2NyaXB0OlR9OiAke3NjcmlwdH0KLQkke0lOU1RB TEx9IC1vICR7U0NSSVBUU09XTl8key5BTExTUkM6VH19IFwKLQkgICAgLWcgJHtTQ1JJUFRTR1JQ XyR7LkFMTFNSQzpUfX0gLW0gJHtTQ1JJUFRTTU9ERV8key5BTExTUkM6VH19IFwKKy4gIGZvciBT IGluICR7U0NSSVBUU30KKworcmVhbGluc3RhbGw6IHNjcmlwdHNpbnN0YWxsCisuT1JERVI6IGJl Zm9yZWluc3RhbGwgc2NyaXB0c2luc3RhbGwKKworLiAgIGlmIGRlZmluZWQoU0NSSVBUU05BTUUp CitTQ1JJUFRTTkFNRV8ke1N9Pz0gJHtTQ1JJUFRTTkFNRX0KKy4gICBlbHNlCitTQ1JJUFRTTkFN RV8ke1N9Pz0gJHtTOlQ6Un0KKy4gICBlbmRpZgorCitTQ1JJUFRTRElSXyR7U30/PSAke1NDUklQ VFNESVJ9CitTQ1JJUFRTT1dOXyR7U30/PSAke1NDUklQVFNPV059CitTQ1JJUFRTR1JQXyR7U30/ PSAke1NDUklQVFNHUlB9CitTQ1JJUFRTTU9ERV8ke1N9Pz0gJHtTQ1JJUFRTTU9ERX0KKworc2Ny aXB0c2luc3RhbGw6ICR7REVTVERJUn0ke1NDUklQVFNESVJfJHtTfX0vJHtTQ1JJUFRTTkFNRV8k e1N9fQorCiske0RFU1RESVJ9JHtTQ1JJUFRTRElSXyR7U319LyR7U0NSSVBUU05BTUVfJHtTfX06 ICR7U30KKwkke0lOU1RBTEx9IC1vICR7U0NSSVBUU09XTl8ke1N9fSBcCisJICAgIC1nICR7U0NS SVBUU0dSUF8ke1N9fSBcCisJICAgIC1tICR7U0NSSVBUU01PREVfJHtTfX0gXAogCSAgICAkey5B TExTUkN9IFwKLQkgICAgJHtERVNURElSfSR7U0NSSVBUU0RJUl8key5BTExTUkM6VH19LyR7U0NS SVBUU05BTUVfJHsuQUxMU1JDOlR9fQotLmVuZGZvcgorCSAgICAkey5UQVJHRVR9CisKKy4gIGVu ZGZvciAjIGZvciBTIGluICR7U0NSSVBUU30KKworLiBlbmRpZiAjIGRlZmluZWQoU0NSSVBUUykg JiYgIWVtcHR5KFNDUklQVFMpCisKKy5lbmRpZiAjICF0YXJnZXQoaW5zdGFsbCkKKworLmlmICFk ZWZpbmVkKE5PX01BTikKKy4gaWYgdGFyZ2V0KF9tYW5wYWdlcykgIyBic2QubWFuLm1rIHdhcyBp bmNsdWRlZAorcmVhbGluc3RhbGw6IF9tYW5pbnN0YWxsCisuIGVuZGlmCiAuZW5kaWYKIAotTkxT TkFNRT89CSR7UFJPR30KKyMgV3JhcCBic2QubmxzLm1rIGJlY2F1c2UgSSBjYW4ndCBmb3JjZSB0 aGF0IE1ha2VmaWxlIHNuaXBwZXQgdG8gd29yayBvbmx5IHdpdGgKKyMgJHtQUk9HU30uCisuZm9y IF9QIGluICR7UFJPR1N9CitOTFNOQU1FLiR7X1B9Pz0JJHtfUH0KK05MUzo9CQkke05MUy4ke19Q fX0KK05MU0RJUjo9CSR7TkxTRElSLiR7X1B9fQorTkxTTkFNRTo9CSR7TkxTTkFNRS4ke19QfX0K IC5pbmNsdWRlIDxic2QubmxzLm1rPgorLmVuZGZvcgogCiAuaW5jbHVkZSA8YnNkLmZpbGVzLm1r PgogLmluY2x1ZGUgPGJzZC5pbmNzLm1rPgogLmluY2x1ZGUgPGJzZC5saW5rcy5taz4KIAotLmlm ICR7TUtfTUFOfSAhPSAibm8iCi1yZWFsaW5zdGFsbDogX21hbmluc3RhbGwKLS5PUkRFUjogYmVm b3JlaW5zdGFsbCBfbWFuaW5zdGFsbAotLmVuZGlmCisuaWYgIXRhcmdldChsaW50KQorLiBmb3Ig X1AgaW4gJHtQUk9HU30KKy4gIGlmICF0YXJnZXQobGludC4ke19QfSkKKy4gICBpZiBkZWZpbmVk KFBST0dfQ1hYLiR7X1B9KQorbGludC4ke19QfToKKy4gICBlbHNlCitfQ0ZMQUdTOj0JJHtDRkxB R1MuJHtfUH19CitfU1JDUzo9CQkke1NSQ1MuJHtfUH19CitsaW50LiR7X1B9OiAke19TUkNTOk0q LmN9CisJJHtMSU5UfSAke0xJTlRGTEFHU30gJHtfQ0ZMQUdTOk0tW0RJVV0qfSAkey5BTExTUkN9 CisuICAgZW5kaWYKKy4gIGVuZGlmCitsaW50OiBsaW50LiR7X1B9CiAKLS5lbmRpZgorLiBlbmRm b3IKKy5lbmRpZiAjICF0YXJnZXQobGludCkKIAotLmlmICF0YXJnZXQobGludCkKLWxpbnQ6ICR7 U1JDUzpNKi5jfQotLmlmIGRlZmluZWQoUFJPRykKLQkke0xJTlR9ICR7TElOVEZMQUdTfSAke0NG TEFHUzpNLVtESVVdKn0gJHsuQUxMU1JDfQotLmVuZGlmCi0uZW5kaWYKKy5mb3IgX1AgaW4gJHtQ Uk9HU30KK0NGTEFHUzo9CSR7Q0ZMQUdTLiR7X1B9fQorQ1hYRkxBR1M6PQkke0NYWEZMQUdTLiR7 X1B9fQorU1JDUzo9CQkke1NSQ1MuJHtfUH19CisuIGluY2x1ZGUgPGJzZC5kZXAubWs+CisjIGJz ZC5kZXAubWsgbWFuZ2xlcyBTUkNTCitTUkNTLiR7X1B9Oj0JJHtTUkNTfQorLmVuZGZvcgogCi0u aWYgJHtNS19NQU59ICE9ICJubyIKLS5pbmNsdWRlIDxic2QubWFuLm1rPgorIyBYWFg6IGVtdWxh dGUgdGhlIG9sZCBic2QucHJvZy5tayBieSBhbGxvd2luZyBNYWtlZmlsZXMgdGhhdCBkaWRuJ3Qg c2V0CisjICR7UFJPRyp9IHRvIGZ1bmN0aW9uIHdpdGggdGhpcyBNYWtlZmlsZSBzbmlwcGV0Lgor LmlmIGVtcHR5KFBST0dTKQorLiBpbmNsdWRlIDxic2QuZGVwLm1rPgogLmVuZGlmCiAKLS5pbmNs dWRlIDxic2QuZGVwLm1rPgotCi0uaWYgZGVmaW5lZChQUk9HKSAmJiAhZXhpc3RzKCR7Lk9CSkRJ Un0vJHtERVBFTkRGSUxFfSkKLSR7T0JKU306ICR7U1JDUzpNKi5ofQorLmlmICFleGlzdHMoJHsu T0JKRElSfS8ke0RFUEVOREZJTEV9KQorLiBmb3IgX1AgaW4gJHtQUk9HU30KK19TUkNTOj0JCSR7 U1JDUy4ke19QfX0KKyR7T0JKUy4ke19QfX06ICR7X1NSQ1M6TSouaH0KKy4gZW5kZm9yCiAuZW5k aWYKIAogLmluY2x1ZGUgPGJzZC5vYmoubWs+CkluZGV4OiBzaGFyZS9tay9ic2QuUkVBRE1FCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHNoYXJlL21rL2JzZC5SRUFETUUJKHJldmlzaW9uIDI0MDY4OSkKKysrIHNo YXJlL21rL2JzZC5SRUFETUUJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw5OCArMjA3LDE1NyBAQAog CiBJdCBzZXRzL3VzZXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CiAKLUJJTkdSUAkJQmluYXJ5 IGdyb3VwLgorVmFyaWFibGVzIGdsb2JhbCB0byBhbGwgcHJvZ3JhbXM6CiAKLUJJTk9XTgkJQmlu YXJ5IG93bmVyLgorQ0xFQU5GSUxFUwkJQWRkaXRpb25hbCBmaWxlcyB0byByZW1vdmUgYW5kCitD TEVBTkRJUlMJCWFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgdG8gcmVtb3ZlIGR1cmluZyBjbGVhbiBh bmQgY2xlYW5kaXIKKwkJCXRhcmdldHMuICAicm0gLWYiIGFuZCAicm0gLXJmIiB1c2VkIHJlc3Bl Y3RpdmVseS4KIAotQklOTU9ERQkJQmluYXJ5IG1vZGUuCitERUJVR19GTEFHUwkJZGVidWdnaW5n IHNwZWNpZmljIENGTEFHUy9MREZMQUdTOyBpZiBzZXQgYW55IGJpbmFyaWVzCisgCQkJcHJvZHVj ZWQgd2lsbCBub3QgYmUgc3RyaXBwZWQuICBTZWUgYWxzbzogV0lUSF9DVEYKIAotQ0xFQU5GSUxF UwlBZGRpdGlvbmFsIGZpbGVzIHRvIHJlbW92ZSBhbmQKLUNMRUFORElSUwlhZGRpdGlvbmFsIGRp cmVjdG9yaWVzIHRvIHJlbW92ZSBkdXJpbmcgY2xlYW4gYW5kIGNsZWFuZGlyCi0JCXRhcmdldHMu ICAicm0gLWYiIGFuZCAicm0gLXJmIiB1c2VkIHJlc3BlY3RpdmVseS4KK0ZJTEVTCQkJQSBsaXN0 IG9mIG5vbi1leGVjdXRhYmxlIGZpbGVzLgorCQkJVGhlIGluc3RhbGxhdGlvbiBpcyBjb250cm9s bGVkIGJ5IHRoZSBGSUxFU05BTUUsIEZJTEVTT1dOLAorCQkJRklMRVNHUlAsIEZJTEVTTU9ERSwg RklMRVNESVIgdmFyaWFibGVzIHRoYXQgY2FuIGJlCisJCQlmdXJ0aGVyIHNwZWNpYWxpemVkIGJ5 IEZJTEVTPFZBUj5fPGZpbGU+LgogCi1DRkxBR1MJCUZsYWdzIHRvIHRoZSBjb21waWxlciB3aGVu IGNyZWF0aW5nIEMgb2JqZWN0cy4KK0xJTktTCQkJVGhlIGxpc3Qgb2YgYmluYXJ5IGxpbmtzOyBz aG91bGQgYmUgZnVsbCBwYXRobmFtZXMsIHRoZQorCQkJbGlua2VkLXRvIGZpbGUgY29taW5nIGZp cnN0LCBmb2xsb3dlZCBieSB0aGUgbGlua2VkCisJCQlmaWxlLiAgVGhlIGZpbGVzIGFyZSBoYXJk LWxpbmtlZC4gIEZvciBleGFtcGxlLCB0byBsaW5rCisJCQkvYmluL3Rlc3QgYW5kIC9iaW4vWywg dXNlOgogCi1GSUxFUwkJQSBsaXN0IG9mIG5vbi1leGVjdXRhYmxlIGZpbGVzLgotCQlUaGUgaW5z dGFsbGF0aW9uIGlzIGNvbnRyb2xsZWQgYnkgdGhlIEZJTEVTTkFNRSwgRklMRVNPV04sCi0JCUZJ TEVTR1JQLCBGSUxFU01PREUsIEZJTEVTRElSIHZhcmlhYmxlcyB0aGF0IGNhbiBiZQotCQlmdXJ0 aGVyIHNwZWNpYWxpemVkIGJ5IEZJTEVTPFZBUj5fPGZpbGU+LgorCQkJTElOS1M9CSR7REVTVERJ Un0vYmluL3Rlc3QgJHtERVNURElSfS9iaW4vWwogCi1MREFERAkJQWRkaXRpb25hbCBsb2FkZXIg b2JqZWN0cy4gIFVzdWFsbHkgdXNlZCBmb3IgbGlicmFyaWVzLgotCQlGb3IgZXhhbXBsZSwgdG8g bG9hZCB3aXRoIHRoZSBjb21wYXRpYmlsaXR5IGFuZCB1dGlsaXR5Ci0JCWxpYnJhcmllcywgdXNl OgorUFJPRwkJCVRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIGJ1aWxkLiAgSWYgbm90IHN1cHBs aWVkLAorCQkJbm90aGluZyBpcyBidWlsdC4KIAorUFJPR19DWFgJCUlmIGRlZmluZWQsIHRoZSBu YW1lIG9mIHRoZSBDKysgcHJvZ3JhbSB0byBidWlsZC4gIEFsc28KKwkJCWNhdXNlcyA8YnNkLnBy b2cubWs+IHRvIGxpbmsgdGhlIHByb2dyYW0gd2l0aCB0aGUKKwkJCXN0YW5kYXJkIEMrKyBsaWJy YXJ5LiAgUFJPR19DWFggb3ZlcnJpZGVzIHRoZSB2YWx1ZQorCQkJb2YgUFJPRyBpZiBQUk9HIGlz IGFsc28gc2V0LgorCitTVFJJUAkJCVRoZSBmbGFnIHBhc3NlZCB0byB0aGUgaW5zdGFsbCBwcm9n cmFtIHRvIGNhdXNlIHRoZQorCQkJYmluYXJ5IHRvIGJlIHN0cmlwcGVkLiAgVGhpcyBpcyB0byBi ZSB1c2VkIHdoZW4KKwkJCWJ1aWxkaW5nIHlvdXIgb3duIGluc3RhbGwgc2NyaXB0IHNvIHRoYXQg dGhlIGVudGlyZQorCQkJc3lzdGVtIGNhbiBiZSBtYWRlIHN0cmlwcGVkL25vdC1zdHJpcHBlZCB1 c2luZyBhCisJCQlzaW5nbGUga25vYi4KKworU1VCRElSCQkJQSBsaXN0IG9mIHN1YmRpcmVjdG9y aWVzIHRoYXQgc2hvdWxkIGJlIGJ1aWx0IGFzIHdlbGwuCisJCQlFYWNoIG9mIHRoZSB0YXJnZXRz IHdpbGwgZXhlY3V0ZSB0aGUgc2FtZSB0YXJnZXQgaW4gdGhlCisJCQlzdWJkaXJlY3Rvcmllcy4K KworVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgY2FuIGJlIHR1bmVkIGZvciBzcGVjaWZpYyBwcm9n cmFtIHVzZSAoeW91IHdpbGwgbmVlZAordG8gc3VmZml4IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyB3 aXRoIC4ke1BST0d9LCBlLmcuIFBST0c9IGZvbyAtPiBTUkNTLmZvbyk6CisKK0JJTkRJUgkJCUJp bmFyeSBkaXJlY3RvcnkuCisKK0JJTkdSUAkJCUJpbmFyeSBncm91cC4KKworQklOT1dOCQkJQmlu YXJ5IG93bmVyLgorCitCSU5NT0RFCQkJQmluYXJ5IG1vZGUuCisKK0NGTEFHUwkJCUZsYWdzIHRv IHRoZSBjb21waWxlciB3aGVuIGNyZWF0aW5nIEMgb2JqZWN0cy4KKworRFBBREQJCQlBZGRpdGlv bmFsIGRlcGVuZGVuY2llcyBmb3IgdGhlIHByb2dyYW0uICBVc3VhbGx5IHVzZWQKKwkJCWZvciBs aWJyYXJpZXMuICBGb3IgZXhhbXBsZSwgdG8gZGVwZW5kIG9uIHRoZQorCQkJY29tcGF0aWJpbGl0 eSBhbmQgdXRpbGl0eSBsaWJyYXJpZXMgdXNlOgorCisJCQkJRFBBREQ9JHtMSUJDT01QQVR9ICR7 TElCVVRJTH0KKworCQkJVGhlcmUgaXMgYSBwcmVkZWZpbmVkIGlkZW50aWZpZXIgZm9yIGVhY2gK KwkJCShub24tcHJvZmlsZWQsIG5vbi1zaGFyZWQpIGxpYnJhcnkgYW5kIG9iamVjdC4gIExpYnJh cnkKKwkJCWZpbGUgbmFtZXMgYXJlIHRyYW5zZm9ybWVkIHRvIGlkZW50aWZpZXJzIGJ5IHJlbW92 aW5nCisJCQl0aGUgZXh0ZW5zaW9uIGFuZCBjb252ZXJ0aW5nIHRvIHVwcGVyIGNhc2UuCisKKwkJ CVRoZXJlIGFyZSBubyBzcGVjaWFsIGlkZW50aWZpZXJzIGZvciBwcm9maWxlZCBvciBzaGFyZWQK KwkJCWxpYnJhcmllcyBvciBvYmplY3RzLiAgVGhlIGlkZW50aWZpZXJzIGZvciB0aGUgc3RhbmRh cmQKKwkJCWxpYnJhcmllcyBhcmUgdXNlZCBpbiBEUEFERC4gIFRoaXMgd29ya3MgY29ycmVjdGx5 IGlmZgorCQkJYWxsIHRoZSBsaWJyYXJpZXMgYXJlIGJ1aWx0IGF0IHRoZSBzYW1lIHRpbWUuCisJ CQlVbmZvcnR1bmF0ZWx5LCBpdCBjYXVzZXMgdW5uZWNlc3NhcnkgcmVsaW5rcyB0byBzaGFyZWQK KwkJCWxpYnJhcmllcyB3aGVuIG9ubHkgdGhlIHN0YXRpYyBsaWJyYXJpZXMgaGF2ZSBjaGFuZ2Vk LgorCQkJRGVwZW5kZW5jaWVzIG9uIHNoYXJlZCBsaWJyYXJpZXMgc2hvdWxkIGJlIG9ubHkgb24g dGhlCisJCQlsaWJyYXJ5IHZlcnNpb24gbnVtYmVycy4KKworSU5TVEFMTEZMQUdTCQlpbnN0YWxs KDEpIGZsYWdzLgorCitMREFERAkJCUFkZGl0aW9uYWwgbG9hZGVyIG9iamVjdHMuICBVc3VhbGx5 IHVzZWQgZm9yIGxpYnJhcmllcy4KKwkJCUZvciBleGFtcGxlLCB0byBsb2FkIHdpdGggdGhlIGNv bXBhdGliaWxpdHkgYW5kIHV0aWxpdHkKKwkJCWxpYnJhcmllcywgdXNlOgorCiAJCQlMREFERD0t bHV0aWwgLWxjb21wYXQKIAotTERGTEFHUwkJQWRkaXRpb25hbCBsb2FkZXIgZmxhZ3MuCitMREZM QUdTCQkJQWRkaXRpb25hbCBsb2FkZXIgZmxhZ3MuCiAKLUxJTktTCQlUaGUgbGlzdCBvZiBiaW5h cnkgbGlua3M7IHNob3VsZCBiZSBmdWxsIHBhdGhuYW1lcywgdGhlCi0JCWxpbmtlZC10byBmaWxl IGNvbWluZyBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlIGxpbmtlZAotCQlmaWxlLiAgVGhlIGZpbGVz IGFyZSBoYXJkLWxpbmtlZC4gIEZvciBleGFtcGxlLCB0byBsaW5rCi0JCS9iaW4vdGVzdCBhbmQg L2Jpbi9bLCB1c2U6CitNQU4JCQlNYW51YWwgcGFnZXMgKHNob3VsZCBlbmQgaW4gLjEgLSAuOSku ICBJZiBubyBNQU4KKwkJCXZhcmlhYmxlIGlzIGRlZmluZWQsICJNQU49PFBST0c+LjEiIGlzIGFz c3VtZWQuCiAKLQkJCUxJTktTPQkke0RFU1RESVJ9L2Jpbi90ZXN0ICR7REVTVERJUn0vYmluL1sK K05PX0ZTQ0hHCQlEbyBub3QgY2FsbCBpbnN0YWxsKDEpIHdpdGggLWYgc2NoZy4KIAotTUFOCQlN YW51YWwgcGFnZXMgKHNob3VsZCBlbmQgaW4gLjEgLSAuOSkuICBJZiBubyBNQU4gdmFyaWFibGUK LQkJaXMgZGVmaW5lZCwgIk1BTj0ke1BST0d9LjEiIGlzIGFzc3VtZWQuCitQUkVDSU9VU1BST0cJ CUluc3RhbGwgd2l0aCAtUyAoc2FmZSBjb3B5KSBhbmQgaGFuZGxlIE5PX0ZTQ0hHCisJCQl2YXJp YWJsZSBjYXNlIGFzIHdlbGwuCiAKLVBST0cJCVRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIGJ1 aWxkLiAgSWYgbm90IHN1cHBsaWVkLCBub3RoaW5nCi0JCWlzIGJ1aWx0LgorUFJPR19DWFgJCUMr KyBhcHBsaWNhdGlvbiBuYW1lKHMpOyB0aGUgc291cmNlcyBmb3IgdGhlCisJCQlhcHBsaWNhdGlv bihzKSBhcmUgY29tcGlsZWQgdmlhICR7Q1hYfQogCi1QUk9HX0NYWAlJZiBkZWZpbmVkLCB0aGUg bmFtZSBvZiB0aGUgcHJvZ3JhbSB0byBidWlsZC4gIEFsc28KLQkJY2F1c2VzIDxic2QucHJvZy5t az4gdG8gbGluayB0aGUgcHJvZ3JhbSB3aXRoIHRoZQotCQlzdGFuZGFyZCBDKysgbGlicmFyeS4g IFBST0dfQ1hYIG92ZXJyaWRlcyB0aGUgdmFsdWUKLQkJb2YgUFJPRyBpZiBQUk9HIGlzIGFsc28g c2V0LgorUFJPR05BTUUJCVRoZSBuYW1lIHRoYXQgdGhlIGFib3ZlIHByb2dyYW0gd2lsbCBiZSBp bnN0YWxsZWQsIGlmCisJCQlkaWZmZXJlbnQgZnJvbSA8UFJPRz4uCiAKLVBST0dOQU1FCVRoZSBu YW1lIHRoYXQgdGhlIGFib3ZlIHByb2dyYW0gd2lsbCBiZSBpbnN0YWxsZWQgYXMsIGlmCi0JCWRp ZmZlcmVudCBmcm9tICR7UFJPR30uCitTUkNTCQkJTGlzdCBvZiBzb3VyY2UgZmlsZXMgdG8gYnVp bGQgdGhlIHByb2dyYW0uICBJZiBTUkNTIGlzCisJCQlub3QgZGVmaW5lZCwgaXQncyBhc3N1bWVk IHRvIGJlICR7UFJPR30uYyBvciwgaWYKKwkJCVBST0dfQ1hYIGlzIGRlZmluZWQsICR7UFJPR19D WFh9LmNjLgogCi1TUkNTCQlMaXN0IG9mIHNvdXJjZSBmaWxlcyB0byBidWlsZCB0aGUgcHJvZ3Jh bS4gIElmIFNSQ1MgaXMgbm90Ci0JCWRlZmluZWQsIGl0J3MgYXNzdW1lZCB0byBiZSAke1BST0d9 LmMgb3IsIGlmIFBST0dfQ1hYIGlzCi0JCWRlZmluZWQsICR7UFJPR19DWFh9LmNjLgorU0NSSVBU UwkJCUEgbGlzdCBvZiBpbnRlcnByZXRlciBzY3JpcHRzIFtmaWxlLntzaCxjc2gscGwsYXdrLC4u Ln1dLgorCQkJVGhlIGluc3RhbGxhdGlvbiBpcyBjb250cm9sbGVkIGJ5IHRoZSBTQ1JJUFRTTkFN RSwgU0NSSVBUU09XTiwKKwkJCVNDUklQVFNHUlAsIFNDUklQVFNNT0RFLCBTQ1JJUFRTRElSIHZh cmlhYmxlcyB0aGF0IGNhbiBiZQorCQkJZnVydGhlciBzcGVjaWFsaXplZCBieSBTQ1JJUFRTPFZB Uj5fPHNjcmlwdD4uCiAKLURQQURECQlBZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBmb3IgdGhlIHBy b2dyYW0uICBVc3VhbGx5IHVzZWQgZm9yCi0JCWxpYnJhcmllcy4gIEZvciBleGFtcGxlLCB0byBk ZXBlbmQgb24gdGhlIGNvbXBhdGliaWxpdHkgYW5kCi0JCXV0aWxpdHkgbGlicmFyaWVzIHVzZToK K1RoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGNhbiBiZSB0dW5lZCBmb3Igc3BlY2lmaWMgc2NyaXB0 czsgeW91IHdpbGwgbmVlZAordG8gc3VmZml4IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyB3aXRoIF88 U0NSSVBUPiwgZS5nLgorU0NSSVBUIC0+IGZvbywgLT4gU0NSSVBURElSX2Zvby4gIEluIGFsbCBj YXNlcywgdGhlIHBlci1zY3JpcHQgdmFyaWFibGVzCitkZWZhdWx0IHRvIHRoZSBlcXVpdmFsZW50 IGdsb2JhbCBTQ1JJUFQqIHZhcmlhYmxlIGFuZCBmYWxsYmFjayB0byB0aGUKK0JJTiogZXF1aXZh bGVudHMsIGUuZy4gU0NSSVBURElSX2ZvbyBmYWxscyBiYWNrIHRvIFNDUklQVERJUiBpZiBTQ1JJ UFRESVJfZm9vCitpcyBub3QgZGVmaW5lZCwgdGhlbiBCSU5ESVIgaWYgU0NSSVBURElSIGlzIG5v dCBkZWZpbmVkOgogCi0JCQlEUEFERD0ke0xJQkNPTVBBVH0gJHtMSUJVVElMfQorU0NSSVBUU0RJ UgkJRGlyZWN0b3J5IHRvIGluc3RhbGwgYSBzY3JpcHQgdG8uCiAKLQkJVGhlcmUgaXMgYSBwcmVk ZWZpbmVkIGlkZW50aWZpZXIgZm9yIGVhY2ggKG5vbi1wcm9maWxlZCwKLQkJbm9uLXNoYXJlZCkg bGlicmFyeSBhbmQgb2JqZWN0LiAgTGlicmFyeSBmaWxlIG5hbWVzIGFyZQotCQl0cmFuc2Zvcm1l ZCB0byBpZGVudGlmaWVycyBieSByZW1vdmluZyB0aGUgZXh0ZW5zaW9uIGFuZAotCQljb252ZXJ0 aW5nIHRvIHVwcGVyIGNhc2UuCitTQ1JJUFRHUlAJCUdyb3VwIHRvIHNldCBmb3IgYSBzY3JpcHQu CiAKLQkJVGhlcmUgYXJlIG5vIHNwZWNpYWwgaWRlbnRpZmllcnMgZm9yIHByb2ZpbGVkIG9yIHNo YXJlZAotCQlsaWJyYXJpZXMgb3Igb2JqZWN0cy4gIFRoZSBpZGVudGlmaWVycyBmb3IgdGhlIHN0 YW5kYXJkCi0JCWxpYnJhcmllcyBhcmUgdXNlZCBpbiBEUEFERC4gIFRoaXMgd29ya3MgY29ycmVj dGx5IGlmZiBhbGwKLQkJdGhlIGxpYnJhcmllcyBhcmUgYnVpbHQgYXQgdGhlIHNhbWUgdGltZS4g IFVuZm9ydHVuYXRlbHksCi0JCWl0IGNhdXNlcyB1bm5lY2Vzc2FyeSByZWxpbmtzIHRvIHNoYXJl ZCBsaWJyYXJpZXMgd2hlbgotCQlvbmx5IHRoZSBzdGF0aWMgbGlicmFyaWVzIGhhdmUgY2hhbmdl ZC4gIERlcGVuZGVuY2llcyBvbgotCQlzaGFyZWQgbGlicmFyaWVzIHNob3VsZCBiZSBvbmx5IG9u IHRoZSBsaWJyYXJ5IHZlcnNpb24KLQkJbnVtYmVycy4KK1NDUklQVE1PREUJCU1vZGUgdG8gYXBw bHkgdG8gYSBzY3JpcHQuCiAKLVNUUklQCQlUaGUgZmxhZyBwYXNzZWQgdG8gdGhlIGluc3RhbGwg cHJvZ3JhbSB0byBjYXVzZSB0aGUgYmluYXJ5Ci0JCXRvIGJlIHN0cmlwcGVkLiAgVGhpcyBpcyB0 byBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgeW91cgotCQlvd24gaW5zdGFsbCBzY3JpcHQgc28gdGhh dCB0aGUgZW50aXJlIHN5c3RlbSBjYW4gYmUgbWFkZQotCQlzdHJpcHBlZC9ub3Qtc3RyaXBwZWQg dXNpbmcgYSBzaW5nbGUgbm9iLgorU0NSSVBUT1dOCQlPd25lciB0byBzZXQgZm9yIGEgc2NyaXB0 LgogCi1TVUJESVIJCUEgbGlzdCBvZiBzdWJkaXJlY3RvcmllcyB0aGF0IHNob3VsZCBiZSBidWls dCBhcyB3ZWxsLgotCQlFYWNoIG9mIHRoZSB0YXJnZXRzIHdpbGwgZXhlY3V0ZSB0aGUgc2FtZSB0 YXJnZXQgaW4gdGhlCi0JCXN1YmRpcmVjdG9yaWVzLgorTGVnYWN5IHZhcmlhYmxlcyBhcmUgYXMg Zm9sbG93czoKIAotU0NSSVBUUwkJQSBsaXN0IG9mIGludGVycHJldGVyIHNjcmlwdHMgW2ZpbGUu e3NoLGNzaCxwbCxhd2ssLi4ufV0uCi0JCVRoZSBpbnN0YWxsYXRpb24gaXMgY29udHJvbGxlZCBi eSB0aGUgU0NSSVBUU05BTUUsIFNDUklQVFNPV04sCi0JCVNDUklQVFNHUlAsIFNDUklQVFNNT0RF LCBTQ1JJUFRTRElSIHZhcmlhYmxlcyB0aGF0IGNhbiBiZQotCQlmdXJ0aGVyIHNwZWNpYWxpemVk IGJ5IFNDUklQVFM8VkFSPl88c2NyaXB0Pi4KK0NPUFRTCQkJT3B0aW1pemF0aW9uIGZsYWdzIGFw cGVuZGVkIHRvIENGTEFHUzsgaGlnaGx5CisgCQkJZGlzY291cmFnZWQgaW4gbW9kZXJuIE1ha2Vm aWxlcy4KIAorUFJPRwkJCUxlZ2FjeSBmb3JtIG9mIGBQUk9HU2AKKworUFJPR19DWFgJCUxlZ2Fj eSBmb3JtIG9mIGBQUk9HU19DWFhgCisKK1RoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSB3cmFw cGVkIHRvIGJlIG1hZGUgYFBST0dTIGF3YXJlYDoKKworTkxTCQkJU2VlIGJzZC5ubHMubWsgZGVz Y3JpcHRpb24gZm9yIG1vcmUgZGV0YWlscy4KK05MU0RJUgorTkxTTkFNRQorCitEZXZlbG9wZXIg Y29udmVuaWVuY2UgdmFyaWFibGVzOgorCitXSVRIX0FTU0VSVF9ERUJVRwlDb21waWxlIHdpdGgg Q0ZMQUdTKz0tRE5ERUJVRworCiBUaGUgaW5jbHVkZSBmaWxlIDxic2QucHJvZy5taz4gaW5jbHVk ZXMgdGhlIGZpbGUgbmFtZWQgIi4uL01ha2VmaWxlLmluYyIKLWlmIGl0IGV4aXN0cywgYXMgd2Vs bCBhcyB0aGUgaW5jbHVkZSBmaWxlIDxic2QubWFuLm1rPi4KK2lmIGl0IGV4aXN0cywgYXMgd2Vs bCBhcyB0aGUgaW5jbHVkZSBmaWxlIDxic2QubWFuLm1rPi4gIEZ1cnRoZXJtb3JlLCBpZgorV0lU SF9OTFMgaXMgZGVmaW5lZCBhbmQgTkxTLjxQUk9HPiBpcyBhbHNvIGRlZmluZWQsIHRoZW4gYnNk Lm5scy5tayBpcworaW5jbHVkZWQgYXMgd2VsbC4KIAogU29tZSBzaW1wbGUgZXhhbXBsZXM6CiAK KzEuIFNpbmdsZSBDIFByb2dyYW06CisKIFRvIGJ1aWxkIGZvbyBmcm9tIGZvby5jIHdpdGggYSBt YW51YWwgcGFnZSBmb28uMSwgdXNlOgogCi0JUFJPRz0JZm9vCisJUFJPR1M9CWZvbwogCiAJLmlu Y2x1ZGUgPGJzZC5wcm9nLm1rPgogCkBAIC0zMTQsNiArMzczLDM0IEBACiAKIAlTUkNTPQlhLmMg Yi5jIGMuYyBkLmMKIAorMi4gU2luZ2xlIEMrKyBQcm9ncmFtOgorCitUbyBidWlsZCBiYXIgd2l0 aCBiYXIuY2Mgd2l0aCBhIG1hbnVhbCBwYWdlIGJhci4xLCB1c2U6CisKKwlQUk9HU19DWFg9CWJh cgorCisJLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgorCitBbGwgb3RoZXIgY29uc3RydWN0cyBhcmUg dGhlIHNhbWUgYXMgaW4gdGhlIFNpbmdsZSBDIFByb2dyYW0gY2FzZS4KKworMy4gTXVsdGlwbGUg QyBwcm9ncmFtczoKKworVG8gYnVpbGQgZm9vIGZyb20gZm9vLmMgYW5kIGJhciB3aXRoIGJhci5j LCB1c2U6CisKKwlQUk9HUz0JZm9vIGJhcgorCisJLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgorCitU byBidWlsZCBmb28gZnJvbSBiYXIuYyBhbmQgYmFyIHdpdGggZm9vLmMsIHVzZToKKworCVBST0dT PQlmb28gYmFyCisKKwlTUkNTLmZvbz0gYmFyLmMKKworCVNSQ1MuYmFyPSBmb28uYworCisJLmlu Y2x1ZGUgPGJzZC5wcm9nLm1rPgorCiA9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0t PS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09CiAKIFRoZSBpbmNsdWRlIGZp bGUgPGJzZC5zdWJkaXIubWs+IGNvbnRhaW5zIHRoZSBkZWZhdWx0IHRhcmdldHMgZm9yIGJ1aWxk aW5nCg== --e89a8fb206686603e204ca56aff2--