From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/116847 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: =?utf-8?q?Michal_Vlas=C3=A1k_via_ntg-context?= Newsgroups: gmane.comp.tex.context Subject: Re: question about multimedia renderings Date: Mon, 16 Jan 2023 02:42:50 +0100 Message-ID: References: <1d8f651a-dfa2-7fc1-815a-a6b564ee9908@gmx.es> Reply-To: mailing list for ConTeXt users Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=599102e9273014e1b10a6e27aaf5402f44d7884526f7e1d46ad3a9a38b75 Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="34187"; mail-complaints-to="usenet@ciao.gmane.io" Cc: =?utf-8?q?Michal_Vlas=C3=A1k?= , Pablo Rodriguez To: "mailing list for ConTeXt users" Original-X-From: ntg-context-bounces@ntg.nl Mon Jan 16 02:43:29 2023 Return-path: Envelope-to: gctc-ntg-context-518@m.gmane-mx.org Original-Received: from zapf.boekplan.nl ([5.39.185.232] helo=zapf.ntg.nl) by ciao.gmane.io with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pHEX3-0008lh-La for gctc-ntg-context-518@m.gmane-mx.org; Mon, 16 Jan 2023 02:43:29 +0100 Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id 2E86B3806F4; Mon, 16 Jan 2023 02:43:01 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id olAjGxYgtqs3; Mon, 16 Jan 2023 02:42:59 +0100 (CET) Original-Received: from zapf.ntg.nl (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id B694338070B; Mon, 16 Jan 2023 02:42:59 +0100 (CET) Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id F01B93806F4 for ; Mon, 16 Jan 2023 02:42:56 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id fEZFlA11LeTQ for ; Mon, 16 Jan 2023 02:42:55 +0100 (CET) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=209.85.218.44; helo=mail-ej1-f44.google.com; envelope-from=lahcim8@gmail.com; receiver= Original-Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by zapf.ntg.nl (Postfix) with ESMTPS id 57F393803AA for ; Mon, 16 Jan 2023 02:42:55 +0100 (CET) Original-Received: by mail-ej1-f44.google.com with SMTP id vm8so64718743ejc.2 for ; Sun, 15 Jan 2023 17:42:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:references:to:subject:cc:from:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=QXY7n+IL2X/HTgFY7cQsAMSWomkhZIo0qc99pSrpk1I=; b=GCNcEd3gfg/XIASsJdT5TxYNKvoiLkP0MEloAfbx2Mp/9RN2dHpzcg7N98tlCIpxfO FbG5vxyovvw3/B6463C8cRDyoP9sL5v8zaZYR/HkWcR3hZHKCsMF6DeravfzH20Dn6wr W7FyM71Dh1Rmmzgw4b+VmBL0VURG938SzSDFlgDjw0JlF6TQlNkNFl59PV+F3tYCMbfI vgoT9wbrV53dFdN/iOlDfxUacTn0SWAfJ0k20ETJkhGUJGYOcKpIj98O+KKILXbbvPru /JzVQSAPlV/iq0jfKUsvgFU049HQgVsnsWyMCEbugVdy3r/NqoMKRJoNPvA43NnunnwZ iyAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references:to:subject:cc:from:message-id:date :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=QXY7n+IL2X/HTgFY7cQsAMSWomkhZIo0qc99pSrpk1I=; b=CfMTLJA0cvrYEa2oJNcKgdet5xaEvTcO2c/HuICWpCbogiZo6A30HlltukIRidyuv5 o2n4UctvrzqPqE8PlP9Wck+gdXPeNq0u0nFNeiG/V59z4DhRx8Q/zqe37JVRNNbAfy6z rzGx2R23Od8oFzPSp3Ibe3U1TvQedPCW1wwKHlg9JvKgnnhOROyZ+lp5AL9H3ffXOZUE iubl6dML8Ed/f4D+Aue1JqkvXu8O+oRlvPoIqlvB8Dk8/j8LFXXvDM69NIrQOIw1utCJ EhDY5H4BWtZVIP8NHzgMbFDFWVv5iZvIKgNnHLlusMYoeB7aB8/dh8FUXfvf3GwciqRt UIiQ== X-Gm-Message-State: AFqh2kp2eXIp4xJLk12O768lWg+d9Wv0bMp4LIjZx5UWpDSI2IXap9+3 kDCy0zUyYW6+D9DvO9kd8GyLQYwSqPw= X-Google-Smtp-Source: AMrXdXvlvrp4YTcIz7LokF0jyvhvGhzjz27c782cY6KJnzGyl5jWm9jjZgCa88JPAiPPHYKCGJ5OHg== X-Received: by 2002:a17:907:c9a7:b0:86d:d041:b8aa with SMTP id uj39-20020a170907c9a700b0086dd041b8aamr5625214ejc.27.1673833374349; Sun, 15 Jan 2023 17:42:54 -0800 (PST) Original-Received: from localhost (88-101-230-166.rcg.o2.cz. [88.101.230.166]) by smtp.gmail.com with ESMTPSA id qw25-20020a1709066a1900b007ae1e528390sm11099375ejc.163.2023.01.15.17.42.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 15 Jan 2023 17:42:52 -0800 (PST) X-Mailer: aerc 0.13.0 In-Reply-To: <1d8f651a-dfa2-7fc1-815a-a6b564ee9908@gmx.es> X-BeenThere: ntg-context@ntg.nl X-Mailman-Version: 2.1.26 Precedence: list List-Id: mailing list for ConTeXt users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ntg-context-bounces@ntg.nl Original-Sender: "ntg-context" Xref: news.gmane.io gmane.comp.tex.context:116847 Archived-At: --599102e9273014e1b10a6e27aaf5402f44d7884526f7e1d46ad3a9a38b75 Content-Type: multipart/alternative; boundary=877024778359065d29cce1276d63dd0e6fe3c12a3a2705c434ba2d049bc6 --877024778359065d29cce1276d63dd0e6fe3c12a3a2705c434ba2d049bc6 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Sun Jan 15, 2023 at 10:49 PM CET, Pablo Rodriguez via ntg-context wrote: > Dear list, > > I=E2=80=99m planning to add an explanation about multimedia inclusion to = the > wiki, but first I wanted to discuss an issue I have found. > > I have the following sample (adapted from scrn-wid.mklx): > > \setupinteraction[state=3Dstart] > \starttext > \null\page > \definerenderingwindow[myrenderingwindow] > [width=3D\textwidth, height=3D\textwidth, > %openpageaction=3DStartCurrentRendering, > %closepageaction=3DStopCurrentRendering, > openpageaction=3DStartRendering{\currentrendering}, > closepageaction=3DStopRendering{\currentrendering}, > framecolor=3Dred] > \startTEXpage[offset=3D1em, pagestate=3Dstart] > \userendering[key-name][video/mp4][video.mp4] > [embed=3Dyes, > auto, > ] > \placerenderingwindow[myrenderingwindow][key-name] > \stopTEXpage > \null\page > \stoptext > > \userendering[][][auto] would enable automatic play or stop when the > page with the rendering is reached or left (respectively). > > I cannot get it working. Neither do work the commented lines in > \definerenderingwindow. > > Inspecting the PDF code, the screen annotation only gets an additional > actions dictionary > (https://opensource.adobe.com/dc-acrobat-sdk-docs/standards/pdfstandards/= pdf/PDF32000_2008.pdf#G11.2096829) > with /PO and /PC entries, when open and close page actions are set to > StartRendering{\currentrendering} and StopRendering{\currentrendering}. > > Just for reference, this is the screen annotation object with the > additional actions dictionary: > > 13 0 obj > << > /Type /Annot > /A << > /AN 13 0 R > /OP 0 > /R 12 0 R > /S /Rendition > >> > /AA << > /PC << > /AN 13 0 R > /OP 1 > /R 12 0 R > /S /Rendition > >> > /PO << > /AN 13 0 R > /OP 0 > /R 12 0 R > /S /Rendition > >> > >> > /Border [ 0 0 0 ] > /P 14 0 R > /Subtype /Screen > /T > /Rect [ 12.353668 12.353668 437.54664 437.54664 ] > >> > endobj > > And this is what I get with \userendering[][][auto]: > > 13 0 obj > << > /Type /Annot > /A << > /AN 13 0 R > /OP 0 > /R 12 0 R > /S /Rendition > >> > /Border [ 0 0 0 ] > /P 14 0 R > /Subtype /Screen > /T > /Rect [ 12.353668 12.353668 437.54664 437.54664 ] > >> > endobj > > Could anyone be so kind to confirm the issue? AFAICT I based the auto option on the "Start/StopCurrentRendering" actions (2021-09-14) which we later agreed to remove (2021-09-17), so there was a bug. Reasoning for removal of the "Current" variants at the time: On Tue Sep 14, 2021 at 9:37 PM CEST, Hans Hagen wrote: > Because \currentrendering is local we could as well drop the Current=20 > variants ... it's not like people will put hundreds of videos in a file= =20 > so enforcing the named one makes sense. So Start/StopRendering{label} should be used instead (Hans already redid most of the examples, you found the two places in scrn-wid.mklx where there is an incosistency. I would think that something like the attached could work. But in some cases it fails on the TeX side with something I am not sure about. I probably overlooked something. Anyways the idea is to just use the Start/StopRendering actions with the correct label. Michal --877024778359065d29cce1276d63dd0e6fe3c12a3a2705c434ba2d049bc6-- --599102e9273014e1b10a6e27aaf5402f44d7884526f7e1d46ad3a9a38b75 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=lpdf-wid.lmt Content-Type: text/plain; charset=utf-8; name=lpdf-wid.lmt aWYgbm90IG1vZHVsZXMgdGhlbiBtb2R1bGVzID0geyB9IGVuZCBtb2R1bGVzIFsnbHBkZi13aWQn XSA9IHsKICAgIHZlcnNpb24gICA9IDEuMDAxLAogICAgY29tbWVudCAgID0gImNvbXBhbmlvbiB0 byBscGRmLWluaS5ta2l2IiwKICAgIGF1dGhvciAgICA9ICJIYW5zIEhhZ2VuLCBQUkFHTUEtQURF LCBIYXNzZWx0IE5MIiwKICAgIGNvcHlyaWdodCA9ICJQUkFHTUEgQURFIC8gQ29uVGVYdCBEZXZl bG9wbWVudCBUZWFtIiwKICAgIGxpY2Vuc2UgICA9ICJzZWUgY29udGV4dCByZWxhdGVkIHJlYWRt ZSBmaWxlcyIKfQoKLS0gSXQncyBhYm91dCB0aW1lIHRvIGdpdmUgdXAgb24gbWVkaWEgaW4gcGRm IGFuZCBhZG1pdCB0aGF0IHBkZiBsb3N0IGl0IHRvIGh0bWwuCi0tIEZpcnN0IHdlIGhhZCBtb3Zp ZXMgYW5kIHNvdW5kLCBxdWl0ZSBlYXN5IHRvIGRlYWwgd2l0aCwgYnV0IG9ic29sZXRlIG5vdy4g VGhlbiB3ZQotLSBoYWQgcmVuZGl0aW9ucyBidXQgdGhleSB0dXJuZWQgb3V0IHRvIGJlIHVucmVs aWFibGUgZnJvbSB0aGUgc3RhcnQgYW5kIGxvb2sKLS0gb2Jzb2xldGUgdG9vIG9yIGF0IGxlYXN0 IHRoZXkgYXJlIGJvdW5kIHRvIHRoZSAob2Jzb2xldGUpIGZsYXNoIHRlY2hub2xvZ3kgZm9yCi0t IHJlbmRlcmluZy4gVGhleSB3ZXJlIGFscmVhZHkgY29tcGxleCBjb25zdHJ1Y3RzLiBOb3cgd2Ug aGF2ZSByaWNoIG1lZGlhIHdoaWNoCi0tIGluc3RlYWQgb2YgcHJvdmlkaW5nIGEgcm9idXN0IGZ1 dHVyZSBwcm9vZiBmcmFtZXdvcmsgZm9yIGdlbmVyYWwgbWVkaWEgdHlwZXMKLS0gYWdhaW4gc2Vl bXMgdG8gZGVwZW5kIG9uIHZpZXdlcnMgYnVpbHQgaW4gKHllcywgYWxzbyBraW5kIG9mIG9ic29s ZXRlKSBmbGFzaAotLSB0ZWNobm9sb2d5LCBhbmQgd2UgY2Fubm90IGV4cGVjdCB0aGlzIG5vbi1v cGVuIHRlY2hub2xvZ3kgdG8gc2hvdyB1cCBpbiBvcGVuCi0tIGJyb3dzZXJzLiBTbywgaW4gdGhl IGVuZCB3ZSBjYW4gYmVzdCBqdXN0IHVzZSBsaW5rcyB0byBleHRlcm5hbCByZXNvdXJjZXMgdG8g YmUKLS0gZnV0dXJlIHByb29mLiBKdXN0IGxvb2sgYXQgdGhlIHZpZXdlciBwcmVmZXJlbmNlcyBw YW5lIHRvIHNlZSBob3cgZnJhZ2lsZSBzdXBwb3J0Ci0tIGlzLiBJbnRlcmVzdGluZ2x5IHUzZCBz dXBwb3J0IGlzIGtpbmQgb2YgYnVpbHQgaW4sIHdoaWxlIGUuZy4gbXA0IHN1cHBvcnQgcmVsaWVz Ci0tIG9uIHdyYXBwaW5nIGluIHN3Zi4gV2UgdXNlZCB0byBzdGF5IGFoZWFkIG9mIHRoZSBwYWNr IHdpdGggc3VwcG9ydCBvZiB0aGUgZmFuY3kKLS0gcGRmIGZlYXR1cmVzIGJ1dCBpdCBiYWNrZmly ZXMgYW5kIGlzIG5vdCB3b3J0aCB0aGUgdHJvdWJsZS4gQW5kIHllcywgZm9yIGNvbnRyb2wKLS0g KGV2ZW4gc2ltcGxlIGxpa2Ugc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHZpZGVvcykgb25lIGhhcyB0 byByZXZlcnQgdG8gSmF2YVNjcmlwdCwKLS0gdGhlIG90aGVyIGZyYWdpbGUgYml0LiBBbmQsIG5v dyB0aGF0IGFkb2JlIHF1aXRzIGZsYXNoIGluIDIwMjAgd2UncmUgd2l0aG91dCBhbnkKLS0gdmlk ZW8gYW55d2F5LiBBbHNvLCBpdCB3b24ndCBwbGF5IG9uIGFsbCBwbGF0Zm9ybXMgYW5kIGRldmlj ZXMgc28gbGV0J3Mgd2FpdCBmb3IKLS0gaHRtbDUgbWVkaWEgaW4gcGRmIHRoZW4uCi0tCi0tIFNl ZSBtYWlsIGJ5IE1pY2hhbCBWbGFzw6FrIHRvIHRoZSBtYWlsaW5nIGxpc3QgdGhhdCBkaXNjdXNz ZXMgY3VycmVudCBzdXBwb3J0IGluCi0tIHZpZXdlcnMgYW5kIGFsc28gbWVudGlvbnMgKGFuZCBz dWJtaXR0ZWQpIGEgZmV3IGZpeGVzIHdydCBlbWJlZGRpbmcgbWVkaWEuIFRoZQotLSBvbGQgc291 bmQgYW5kIG1vdmllIGZlYXR1cmVzIGFyZSBnb25lLgoKbG9jYWwgdG9udW1iZXIsIG5leHQgPSB0 b251bWJlciwgbmV4dApsb2NhbCBnbWF0Y2gsIGdzdWIsIGZpbmQsIGxvd2VyID0gc3RyaW5nLmdt YXRjaCwgc3RyaW5nLmdzdWIsIHN0cmluZy5maW5kLCBzdHJpbmcubG93ZXIKbG9jYWwgZmlsZW5h bWVvbmx5LCBiYXNlZmlsZW5hbWUsIGZpbGVzdWZmaXgsIGFkZGZpbGVzdWZmaXggPSBmaWxlLm5h bWVvbmx5LCBmaWxlLmJhc2VuYW1lLCBmaWxlLnN1ZmZpeCwgZmlsZS5hZGRzdWZmaXgKbG9jYWwg aXNmaWxlLCBtb2RpZmljYXRpb250aW1lID0gbGZzLmlzZmlsZSwgbGZzLm1vZGlmaWNhdGlvbgps b2NhbCBzdHJpcHN0cmluZyA9IHN0cmluZy5zdHJpcApsb2NhbCBzZXR0aW5nc190b19hcnJheSA9 IHV0aWxpdGllcy5wYXJzZXJzLnNldHRpbmdzX3RvX2FycmF5CmxvY2FsIHNldHRpbmdzX3RvX2hh c2ggPSB1dGlsaXRpZXMucGFyc2Vycy5zZXR0aW5nc190b19oYXNoCmxvY2FsIHNvcnRlZGhhc2gs IHNvcnRlZGtleXMgPSB0YWJsZS5zb3J0ZWRoYXNoLCB0YWJsZS5zb3J0ZWRrZXlzCgpsb2NhbCBy ZXBvcnRfbWVkaWEgICAgICAgICAgICAgPSBsb2dzLnJlcG9ydGVyKCJiYWNrZW5kIiwibWVkaWEi KQpsb2NhbCByZXBvcnRfYXR0YWNobWVudCAgICAgICAgPSBsb2dzLnJlcG9ydGVyKCJiYWNrZW5k IiwiYXR0YWNobWVudCIpCgpsb2NhbCBjb250ZXh0ICAgICAgICAgICAgICAgICAgPSBjb250ZXh0 Cgpsb2NhbCB0ZXhnZXRjb3VudCAgICAgICAgICAgICAgPSB0ZXguZ2V0Y291bnQKbG9jYWwgZ2V0 bWFjcm8gICAgICAgICAgICAgICAgID0gdG9rZW5zLmdldHRlcnMubWFjcm8KCmxvY2FsIGhwYWNr bm9kZSAgICAgICAgICAgICAgICA9IG5vZGVzLmhwYWNrCgpsb2NhbCBwZGZiYWNrZW5kICAgICAg ICAgICAgICAgPSBiYWNrZW5kcy5yZWdpc3RlcmVkLnBkZgpsb2NhbCBub2RlaW5qZWN0aW9ucyAg ICAgICAgICAgPSBwZGZiYWNrZW5kLm5vZGVpbmplY3Rpb25zCmxvY2FsIGNvZGVpbmplY3Rpb25z ICAgICAgICAgICA9IHBkZmJhY2tlbmQuY29kZWluamVjdGlvbnMKbG9jYWwgcmVnaXN0cmF0aW9u cyAgICAgICAgICAgID0gcGRmYmFja2VuZC5yZWdpc3RyYXRpb25zCgpsb2NhbCBleGVjdXRlcnMg ICAgICAgICAgICAgICAgPSBzdHJ1Y3R1cmVzLnJlZmVyZW5jZXMuZXhlY3V0ZXJzCmxvY2FsIHZh cmlhYmxlcyAgICAgICAgICAgICAgICA9IGludGVyZmFjZXMudmFyaWFibGVzCgpsb2NhbCB2X2hp ZGRlbiAgICAgICAgICAgICAgICAgPSB2YXJpYWJsZXMuaGlkZGVuCmxvY2FsIHZfYXV0byAgICAg ICAgICAgICAgICAgICA9IHZhcmlhYmxlcy5hdXRvCmxvY2FsIHZfZW1iZWQgICAgICAgICAgICAg ICAgICA9IHZhcmlhYmxlcy5lbWJlZApsb2NhbCB2X21heCAgICAgICAgICAgICAgICAgICAgPSB2 YXJpYWJsZXMubWF4CmxvY2FsIHZfeWVzICAgICAgICAgICAgICAgICAgICA9IHZhcmlhYmxlcy55 ZXMKbG9jYWwgdl9ubyAgICAgICAgICAgICAgICAgICAgID0gdmFyaWFibGVzLm5vCmxvY2FsIHZf Y29tcHJlc3MgICAgICAgICAgICAgICA9IHZhcmlhYmxlcy5jb21wcmVzcwpsb2NhbCB2X2xpc3Qg ICAgICAgICAgICAgICAgICAgPSB2YXJpYWJsZXMubGlzdApsb2NhbCB2X3RpdGxlICAgICAgICAg ICAgICAgICAgPSB2YXJpYWJsZXMudGl0bGUKCmxvY2FsIGxwZGYgICAgICAgICAgICAgICAgICAg ICA9IGxwZGYKCmxvY2FsIHBkZmNvbnN0YW50ICAgICAgICAgICAgICA9IGxwZGYuY29uc3RhbnQK bG9jYWwgcGRmbnVsbCAgICAgICAgICAgICAgICAgID0gbHBkZi5udWxsCmxvY2FsIHBkZmRpY3Rp b25hcnkgICAgICAgICAgICA9IGxwZGYuZGljdGlvbmFyeQpsb2NhbCBwZGZhcnJheSAgICAgICAg ICAgICAgICAgPSBscGRmLmFycmF5CmxvY2FsIHBkZnJlZmVyZW5jZSAgICAgICAgICAgICA9IGxw ZGYucmVmZXJlbmNlCmxvY2FsIHBkZnVuaWNvZGUgICAgICAgICAgICAgICA9IGxwZGYudW5pY29k ZQpsb2NhbCBwZGZzdHJpbmcgICAgICAgICAgICAgICAgPSBscGRmLnN0cmluZwpsb2NhbCBwZGZi b29sZWFuICAgICAgICAgICAgICAgPSBscGRmLmJvb2xlYW4KbG9jYWwgcGRmYWN0aW9uICAgICAg ICAgICAgICAgID0gbHBkZi5hY3Rpb24KbG9jYWwgcGRmYm9yZGVyICAgICAgICAgICAgICAgID0g bHBkZi5ib3JkZXIKCmxvY2FsIHBkZnRyYW5zcGFyZW5jeXZhbHVlICAgICA9IGxwZGYudHJhbnNw YXJlbmN5dmFsdWUKbG9jYWwgcGRmY29sb3J2YWx1ZXMgICAgICAgICAgID0gbHBkZi5jb2xvcnZh bHVlcwoKbG9jYWwgcGRmZmx1c2hvYmplY3QgICAgICAgICAgID0gbHBkZi5mbHVzaG9iamVjdAps b2NhbCBwZGZmbHVzaHN0cmVhbW9iamVjdCAgICAgPSBscGRmLmZsdXNoc3RyZWFtb2JqZWN0Cmxv Y2FsIHBkZmZsdXNoc3RyZWFtZmlsZW9iamVjdCA9IGxwZGYuZmx1c2hzdHJlYW1maWxlb2JqZWN0 CmxvY2FsIHBkZnJlc2VydmVvYmplY3QgICAgICAgICA9IGxwZGYucmVzZXJ2ZW9iamVjdApsb2Nh bCBwZGZwYWdlcmVmZXJlbmNlICAgICAgICAgPSBscGRmLnBhZ2VyZWZlcmVuY2UKbG9jYWwgcGRm c2hhcmVvYmplY3RyZWZlcmVuY2UgID0gbHBkZi5zaGFyZW9iamVjdHJlZmVyZW5jZQoKLS0gc3lt Ym9scwoKbG9jYWwgcHJlc2V0cyA9IHsgfSAtLSB4Zm9ybXMKCmxvY2FsIGZ1bmN0aW9uIHJlZ2lz dGVyc3ltYm9sKG5hbWUsbikKICAgIHByZXNldHNbbmFtZV0gPSBwZGZyZWZlcmVuY2UobikKZW5k Cgpsb2NhbCBmdW5jdGlvbiByZWdpc3RlcmVkc3ltYm9sKG5hbWUpCiAgICByZXR1cm4gcHJlc2V0 c1tuYW1lXQplbmQKCmxvY2FsIGZ1bmN0aW9uIHByZXNldHN5bWJvbChzeW1ib2wpCiAgICBpZiBu b3QgcHJlc2V0c1tzeW1ib2xdIHRoZW4KICAgICAgICBjb250ZXh0LnByZWRlZmluZXN5bWJvbCB7 IHN5bWJvbCB9CiAgICBlbmQKZW5kCgpsb2NhbCBmdW5jdGlvbiBwcmVzZXRzeW1ib2xsaXN0KGxp c3QpCiAgICBpZiBsaXN0IHRoZW4KICAgICAgICBmb3Igc3ltYm9sIGluIGdtYXRjaChsaXN0LCJb XiwgXSsiKSBkbwogICAgICAgICAgICBwcmVzZXRzeW1ib2woc3ltYm9sKQogICAgICAgIGVuZAog ICAgZW5kCmVuZAoKY29kZWluamVjdGlvbnMucmVnaXN0ZXJzeW1ib2wgICA9IHJlZ2lzdGVyc3lt Ym9sCmNvZGVpbmplY3Rpb25zLnJlZ2lzdGVyZWRzeW1ib2wgPSByZWdpc3RlcmVkc3ltYm9sCmNv ZGVpbmplY3Rpb25zLnByZXNldHN5bWJvbCAgICAgPSBwcmVzZXRzeW1ib2wKY29kZWluamVjdGlv bnMucHJlc2V0c3ltYm9sbGlzdCA9IHByZXNldHN5bWJvbGxpc3QKCi0tIGNvbW1lbnRzCgotLSBs b2NhbCBzeW1ib2xzID0gewotLSAgICAgQWRkaXRpb24gICAgID0gcGRmY29uc3RhbnQoIk5ld1Bh cmFncmFwaCIpLAotLSAgICAgQXR0YWNobWVudCAgID0gcGRmY29uc3RhbnQoIkF0dGFjaG1lbnQi KSwKLS0gICAgIEJhbGxvb24gICAgICA9IHBkZmNvbnN0YW50KCJDb21tZW50IiksCi0tICAgICBD aGVjayAgICAgICAgPSBwZGZjb25zdGFudCgiQ2hlY2sgTWFyayIpLAotLSAgICAgQ2hlY2tNYXJr ICAgID0gcGRmY29uc3RhbnQoIkNoZWNrIE1hcmsiKSwKLS0gICAgIENpcmNsZSAgICAgICA9IHBk ZmNvbnN0YW50KCJDaXJjbGUiKSwKLS0gICAgIENyb3NzICAgICAgICA9IHBkZmNvbnN0YW50KCJD cm9zcyIpLAotLSAgICAgQ3Jvc3NIYWlycyAgID0gcGRmY29uc3RhbnQoIkNyb3NzIEhhaXJzIiks Ci0tICAgICBHcmFwaCAgICAgICAgPSBwZGZjb25zdGFudCgiR3JhcGgiKSwKLS0gICAgIEluc2Vy dFRleHQgICA9IHBkZmNvbnN0YW50KCJJbnNlcnQgVGV4dCIpLAotLSAgICAgTmV3ICAgICAgICAg ID0gcGRmY29uc3RhbnQoIkluc2VydCIpLAotLSAgICAgUGFwZXJjbGlwICAgID0gcGRmY29uc3Rh bnQoIlBhcGVyY2xpcCIpLAotLSAgICAgUmlnaHRBcnJvdyAgID0gcGRmY29uc3RhbnQoIlJpZ2h0 IEFycm93IiksCi0tICAgICBSaWdodFBvaW50ZXIgPSBwZGZjb25zdGFudCgiUmlnaHQgUG9pbnRl ciIpLAotLSAgICAgU3RhciAgICAgICAgID0gcGRmY29uc3RhbnQoIlN0YXIiKSwKLS0gICAgIFRh ZyAgICAgICAgICA9IHBkZmNvbnN0YW50KCJUYWciKSwKLS0gICAgIFRleHQgICAgICAgICA9IHBk ZmNvbnN0YW50KCJOb3RlIiksCi0tICAgICBUZXh0Tm90ZSAgICAgPSBwZGZjb25zdGFudCgiVGV4 dCBOb3RlIiksCi0tICAgICBVcEFycm93ICAgICAgPSBwZGZjb25zdGFudCgiVXAgQXJyb3ciKSwK LS0gICAgIFVwTGVmdEFycm93ICA9IHBkZmNvbnN0YW50KCJVcC1MZWZ0IEFycm93IiksCi0tIH0K CmxvY2FsIGF0dGFjaG1lbnRfc3ltYm9scyA9IHsKICAgIEdyYXBoICAgICA9IHBkZmNvbnN0YW50 KCJHcmFwaCIpLAogICAgUGFwZXJjbGlwID0gcGRmY29uc3RhbnQoIlBhcGVyY2xpcCIpLAogICAg UHVzaHBpbiAgID0gcGRmY29uc3RhbnQoIlB1c2hQaW4iKSwKfQoKYXR0YWNobWVudF9zeW1ib2xz LlB1c2hQaW4gPSBhdHRhY2htZW50X3N5bWJvbHMuUHVzaHBpbgphdHRhY2htZW50X3N5bWJvbHMu RGVmYXVsdCA9IGF0dGFjaG1lbnRfc3ltYm9scy5QdXNocGluCgpmdW5jdGlvbiBscGRmLmF0dGFj aG1lbnRzeW1ib2xzKCkKICAgIHJldHVybiBzb3J0ZWRrZXlzKGNvbW1lbnRfc3ltYm9scykKZW5k Cgpsb2NhbCBjb21tZW50X3N5bWJvbHMgPSB7CiAgICBDb21tZW50ICAgICAgPSBwZGZjb25zdGFu dCgiQ29tbWVudCIpLAogICAgSGVscCAgICAgICAgID0gcGRmY29uc3RhbnQoIkhlbHAiKSwKICAg IEluc2VydCAgICAgICA9IHBkZmNvbnN0YW50KCJJbnNlcnQiKSwKICAgIEtleSAgICAgICAgICA9 IHBkZmNvbnN0YW50KCJLZXkiKSwKICAgIE5ld3BhcmFncmFwaCA9IHBkZmNvbnN0YW50KCJOZXdQ YXJhZ3JhcGgiKSwKICAgIE5vdGUgICAgICAgICA9IHBkZmNvbnN0YW50KCJOb3RlIiksCiAgICBQ YXJhZ3JhcGggICAgPSBwZGZjb25zdGFudCgiUGFyYWdyYXBoIiksCn0KCmNvbW1lbnRfc3ltYm9s cy5OZXdQYXJhZ3JhcGggPSBOZXdwYXJhZ3JhcGgKY29tbWVudF9zeW1ib2xzLkRlZmF1bHQgICAg ICA9IE5vdGUKCmZ1bmN0aW9uIGxwZGYuY29tbWVudHN5bWJvbHMoKQogICAgcmV0dXJuIHNvcnRl ZGtleXMoY29tbWVudF9zeW1ib2xzKQplbmQKCmxvY2FsIGZ1bmN0aW9uIGFuYWx5emVzeW1ib2wo c3ltYm9sLGNvbGxlY3Rpb24pCiAgICBpZiBub3Qgc3ltYm9sIG9yIHN5bWJvbCA9PSAiIiB0aGVu CiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24gYW5kIGNvbGxlY3Rpb24uRGVmYXVsdCwgbmlsCiAg ICBlbHNlaWYgY29sbGVjdGlvbiBhbmQgY29sbGVjdGlvbltzeW1ib2xdIHRoZW4KICAgICAgICBy ZXR1cm4gY29sbGVjdGlvbltzeW1ib2xdLCBuaWwKICAgIGVsc2UKICAgICAgICBsb2NhbCBzZXRu LCBzZXRyLCBzZXRkCiAgICAgICAgbG9jYWwgc2V0ID0gc2V0dGluZ3NfdG9fYXJyYXkoc3ltYm9s KQogICAgICAgIGlmICNzZXQgPT0gMSB0aGVuCiAgICAgICAgICAgIHNldG4sIHNldHIsIHNldGQg PSBzZXRbMV0sIHNldFsxXSwgc2V0WzFdCiAgICAgICAgZWxzZWlmICNzZXQgPT0gMiB0aGVuCiAg ICAgICAgICAgIHNldG4sIHNldHIsIHNldGQgPSBzZXRbMV0sIHNldFsxXSwgc2V0WzJdCiAgICAg ICAgZWxzZQogICAgICAgICAgICBzZXRuLCBzZXRyLCBzZXRkID0gc2V0WzFdLCBzZXRbMl0sIHNl dFszXQogICAgICAgIGVuZAogICAgICAgIGxvY2FsIGFwcGVhcmFuY2UgPSBwZGZkaWN0aW9uYXJ5 IHsKICAgICAgICAgICAgTiA9IHNldG4gYW5kIHJlZ2lzdGVyZWRzeW1ib2woc2V0biksCiAgICAg ICAgICAgIFIgPSBzZXRyIGFuZCByZWdpc3RlcmVkc3ltYm9sKHNldHIpLAogICAgICAgICAgICBE ID0gc2V0ZCBhbmQgcmVnaXN0ZXJlZHN5bWJvbChzZXRkKSwKICAgICAgICB9CiAgICAgICAgbG9j YWwgYXBwZWFyYW5jZXJlZiA9IHBkZnNoYXJlb2JqZWN0cmVmZXJlbmNlKGFwcGVhcmFuY2UpCiAg ICAgICAgcmV0dXJuIG5pbCwgYXBwZWFyYW5jZXJlZgogICAgZW5kCmVuZAoKbG9jYWwgZnVuY3Rp b24gYW5hbHl6ZW5vcm1hbHN5bWJvbChzeW1ib2wpCiAgICBsb2NhbCBhcHBlYXJhbmNlID0gcGRm ZGljdGlvbmFyeSB7CiAgICAgICAgTiA9IHJlZ2lzdGVyZWRzeW1ib2woc3ltYm9sKSwKICAgIH0K ICAgIGxvY2FsIGFwcGVhcmFuY2VyZWYgPSBwZGZzaGFyZW9iamVjdHJlZmVyZW5jZShhcHBlYXJh bmNlKQogICAgcmV0dXJuIGFwcGVhcmFuY2VyZWYKZW5kCgpjb2RlaW5qZWN0aW9ucy5hbmFseXpl c3ltYm9sICAgICAgID0gYW5hbHl6ZXN5bWJvbApjb2RlaW5qZWN0aW9ucy5hbmFseXplbm9ybWFs c3ltYm9sID0gYW5hbHl6ZW5vcm1hbHN5bWJvbAoKbG9jYWwgZnVuY3Rpb24gYW5hbHl6ZWxheWVy KGxheWVyKQogICAgLS0gdG9kbzogIChzcGVjaWZpY2F0aW9uLmxheWVyIH49ICIiIGFuZCBwZGZy ZWZlcmVuY2Uoc3BlY2lmaWNhdGlvbi5sYXllcikpIG9yIG5pbCwgLS0gdG9kbzogcmVmIHRvIGxh eWVyCmVuZAoKbG9jYWwgZnVuY3Rpb24gYW5hbHl6ZWNvbG9yKGNvbG9ydmFsdWUsY29sb3Jtb2Rl bCkKICAgIGxvY2FsIGN2YWx1ZSA9IGNvbG9ydmFsdWUgYW5kIHRvbnVtYmVyKGNvbG9ydmFsdWUp CiAgICBsb2NhbCBjbW9kZWwgPSBjb2xvcm1vZGVsIGFuZCB0b251bWJlcihjb2xvcm1vZGVsKSBv ciAzCiAgICByZXR1cm4gY3ZhbHVlIGFuZCBwZGZhcnJheSB7IHBkZmNvbG9ydmFsdWVzKGNtb2Rl bCxjdmFsdWUpIH0gb3IgbmlsCmVuZAoKbG9jYWwgZnVuY3Rpb24gYW5hbHl6ZXRyYW5zcGFyZW5j eSh0cmFuc3BhcmVuY3l2YWx1ZSkKICAgIGxvY2FsIHR2YWx1ZSA9IHRyYW5zcGFyZW5jeXZhbHVl IGFuZCB0b251bWJlcih0cmFuc3BhcmVuY3l2YWx1ZSkKICAgIHJldHVybiB0dmFsdWUgYW5kIHBk ZnRyYW5zcGFyZW5jeXZhbHVlKHR2YWx1ZSkgb3IgbmlsCmVuZAoKLS0gQXR0YWNobWVudHMKCmxv Y2FsIG5vZmF0dGFjaG1lbnRzICAgID0gMApsb2NhbCBhdHRhY2htZW50cyAgICAgICA9IHsgfQps b2NhbCBmaWxlc3RyZWFtcyAgICAgICA9IHsgfQpsb2NhbCByZWZlcmVuY2VkICAgICAgICA9IHsg fQpsb2NhbCBpZ25vcmVyZWZlcmVuY2VkICA9IHRydWUgLS0gZnV6enkgcGRmIHNwZWMgLi4gdHdp Y2UgaW4gYXR0YWNobWVudCBsaXN0LCBjYW4gYmVjb21lIGFuIG9wdGlvbgpsb2NhbCB0b2Jlc2F2 ZWRvYmpyZWZzICA9IHV0aWxpdGllcy5zdG9yYWdlLmFsbG9jYXRlKCkKbG9jYWwgY29sbGVjdGVk b2JqcmVmcyAgPSB1dGlsaXRpZXMuc3RvcmFnZS5hbGxvY2F0ZSgpCmxvY2FsIHBlcm1pdHRlZCAg ICAgICAgID0gdHJ1ZQpsb2NhbCBlbmFibGVkICAgICAgICAgICA9IHRydWUKCmZ1bmN0aW9uIGNv ZGVpbmplY3Rpb25zLnNldGF0dGFjaG1lbnRzdXBwb3J0KG9wdGlvbikKICAgIGlmIG9wdGlvbiA9 PSBmYWxzZSB0aGVuCiAgICAgICAgcGVybWl0dGVkID0gZmFsc2UKICAgICAgICBlbmFibGVkICAg PSBmYWxzZQogICAgZW5kCmVuZAoKbG9jYWwgZmlsZW9ianJlZmVyZW5jZXMgPSB7CiAgICBjb2xs ZWN0ZWQgPSBjb2xsZWN0ZWRvYmpyZWZzLAogICAgdG9iZXNhdmVkID0gdG9iZXNhdmVkb2JqcmVm cywKfQoKam9iLmZpbGVvYmpyZWZlcmVuY2VzID0gZmlsZW9ianJlZmVyZW5jZXMKCmxvY2FsIGZ1 bmN0aW9uIGluaXRpYWxpemVyKCkKICAgIGNvbGxlY3RlZG9ianJlZnMgPSBqb2IuZmlsZW9ianJl ZmVyZW5jZXMuY29sbGVjdGVkIG9yIHsgfQogICAgdG9iZXNhdmVkb2JqcmVmcyA9IGpvYi5maWxl b2JqcmVmZXJlbmNlcy50b2Jlc2F2ZWQgb3IgeyB9CmVuZAoKam9iLnJlZ2lzdGVyKCdqb2IuZmls ZW9ianJlZmVyZW5jZXMuY29sbGVjdGVkJywgdG9iZXNhdmVkb2JqcmVmcywgaW5pdGlhbGl6ZXIp Cgpsb2NhbCBmdW5jdGlvbiBmbHVzaGVtYmVkZGVkZmlsZXMoKQogICAgaWYgZW5hYmxlZCBhbmQg bmV4dChmaWxlc3RyZWFtcykgdGhlbgogICAgICAgIGxvY2FsIGUgPSBwZGZhcnJheSgpCiAgICAg ICAgbG9jYWwgZiA9IHBkZmFycmF5KCkKICAgICAgICBmb3IgdGFnLCByZWZlcmVuY2UgaW4gc29y dGVkaGFzaChmaWxlc3RyZWFtcykgZG8KICAgICAgICAgICAgaWYgbm90IHJlZmVyZW5jZSB0aGVu CiAgICAgICAgICAgICAgICByZXBvcnRfYXR0YWNobWVudCgidW5yZWZlcmVuY2VkIGZpbGUsIHRh ZyAlYSIsdGFnKQogICAgICAgICAgICBlbHNlaWYgcmVmZXJlbmNlZFt0YWddID09ICJoaWRkZW4i IG9yIHJlZmVyZW5jZWRbdGFnXSA9PSAiZm9yY2VkIiB0aGVuCiAgICAgICAgICAgICAgICBlWyNl KzFdID0gcGRmc3RyaW5nKHRhZykKICAgICAgICAgICAgICAgIGVbI2UrMV0gPSByZWZlcmVuY2Ug LS0gYWxyZWFkeSBhIHJlZmVyZW5jZQogICAgICAgICAgICAgICAgZlsjZisxXSA9IHJlZmVyZW5j ZSAtLSBjb2xsZWN0IGFsbCBmaWxlIGRlc2NyaXB0aW9uIHJlZmVyZW5jZXMKICAgICAgICAgICAg ZWxzZQogICAgICAgICAgICAgICAgLS0gbWVzc3kgc3BlYyAuLi4gd2hlbiBhbm5vdCBub3QgaW4g bmFtZWQgZWxzZSB0d2ljZSBpbiBtZW51IGxpc3QgYWNyb2JhdAogICAgICAgICAgICAgICAgZlsj ZisxXSA9IHJlZmVyZW5jZQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgICBpZiAj ZSA+IDAgdGhlbgogICAgICAgICAgICBscGRmLmFkZHRvbmFtZXMoIkVtYmVkZGVkRmlsZXMiLHBk ZnJlZmVyZW5jZShwZGZmbHVzaG9iamVjdChwZGZkaWN0aW9uYXJ5eyBOYW1lcyA9IGUgfSkpKQog ICAgICAgIGVuZAogICAgICAgIGlmICNmID4gMCB0aGVuIC0tIFBERi9BLTJ8MzogYWxsIGFzc29j aWF0ZWQgZmlsZXMgbXVzdCBoYXZlIGEgcmVsYXRpb25zaGlwIHRvIHRoZSBQREYgZG9jdW1lbnQg KGdsb2JhbCBvciBwYXJ0KQogICAgICAgICAgICBscGRmLmFkZHRvY2F0YWxvZygiQUYiLCBwZGZy ZWZlcmVuY2UocGRmZmx1c2hvYmplY3QoZikpKSAtLSBnbG9iYWwgKENhdGFsb2cpCiAgICAgICAg ZW5kCiAgICBlbmQKZW5kCgpscGRmLnJlZ2lzdGVyZG9jdW1lbnRmaW5hbGl6ZXIoZmx1c2hlbWJl ZGRlZGZpbGVzLCJlbWJlZGRlZGZpbGVzIikKCmZ1bmN0aW9uIGNvZGVpbmplY3Rpb25zLmVtYmVk ZmlsZShzcGVjaWZpY2F0aW9uKQogICAgaWYgZW5hYmxlZCB0aGVuCiAgICAgICAgbG9jYWwgZGF0 YSAgICAgID0gc3BlY2lmaWNhdGlvbi5kYXRhCiAgICAgICAgbG9jYWwgZmlsZW5hbWUgID0gc3Bl Y2lmaWNhdGlvbi5maWxlCiAgICAgICAgbG9jYWwgbmFtZSAgICAgID0gc3BlY2lmaWNhdGlvbi5u YW1lIG9yICIiCiAgICAgICAgbG9jYWwgdGl0bGUgICAgID0gc3BlY2lmaWNhdGlvbi50aXRsZSBv ciAiIgogICAgICAgIGxvY2FsIGhhc2ggICAgICA9IHNwZWNpZmljYXRpb24uaGFzaCBvciBmaWxl bmFtZQogICAgICAgIGxvY2FsIGtlZXBkaXIgICA9IHNwZWNpZmljYXRpb24ua2VlcGRpciAtLSBj YW4gY2hhbmdlCiAgICAgICAgbG9jYWwgdXNlZG5hbWUgID0gc3BlY2lmaWNhdGlvbi51c2VkbmFt ZQogICAgICAgIGxvY2FsIGZpbGV0eXBlICA9IHNwZWNpZmljYXRpb24uZmlsZXR5cGUKICAgICAg ICBsb2NhbCBjb21wcmVzcyAgPSBzcGVjaWZpY2F0aW9uLmNvbXByZXNzCiAgICAgICAgbG9jYWwg bWltZXR5cGUgID0gc3BlY2lmaWNhdGlvbi5taW1ldHlwZSBvciBzcGVjaWZpY2F0aW9uLm1pbWUK ICAgICAgICBpZiBmaWxlbmFtZSA9PSAiIiB0aGVuCiAgICAgICAgICAgIGZpbGVuYW1lID0gbmls CiAgICAgICAgZW5kCiAgICAgICAgaWYgY29tcHJlc3MgPT0gbmlsIHRoZW4KICAgICAgICAgICAg Y29tcHJlc3MgPSB0cnVlCiAgICAgICAgZW5kCiAgICAgICAgaWYgZGF0YSB0aGVuCiAgICAgICAg ICAgIGxvY2FsIHIgPSBmaWxlc3RyZWFtc1toYXNoXQogICAgICAgICAgICBpZiByID09IGZhbHNl IHRoZW4KICAgICAgICAgICAgICAgIHJldHVybiBuaWwKICAgICAgICAgICAgZWxzZWlmIHIgdGhl bgogICAgICAgICAgICAgICAgcmV0dXJuIHIKICAgICAgICAgICAgZWxzZWlmIG5vdCBmaWxlbmFt ZSB0aGVuCiAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IHNwZWNpZmljYXRpb24udGFnCiAgICAg ICAgICAgICAgICBpZiBub3QgZmlsZW5hbWUgb3IgZmlsZW5hbWUgPT0gIiIgdGhlbgogICAgICAg ICAgICAgICAgICAgIGZpbGVuYW1lID0gc3BlY2lmaWNhdGlvbi5yZWdpc3RlcmVkCiAgICAgICAg ICAgICAgICBlbmQKICAgICAgICAgICAgICAgIGlmIG5vdCBmaWxlbmFtZSBvciBmaWxlbmFtZSA9 PSAiIiB0aGVuCiAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBoYXNoCiAgICAgICAgICAg ICAgICBlbmQKICAgICAgICAgICAgZW5kCiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiBub3Qg ZmlsZW5hbWUgdGhlbgogICAgICAgICAgICAgICAgcmV0dXJuIG5pbAogICAgICAgICAgICBlbmQK ICAgICAgICAgICAgbG9jYWwgciA9IGZpbGVzdHJlYW1zW2hhc2hdCiAgICAgICAgICAgIGlmIHIg PT0gZmFsc2UgdGhlbgogICAgICAgICAgICAgICAgcmV0dXJuIG5pbAogICAgICAgICAgICBlbHNl aWYgciB0aGVuCiAgICAgICAgICAgICAgICByZXR1cm4gcgogICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICBsb2NhbCBmb3VuZG5hbWUgPSByZXNvbHZlcnMuZmluZGJpbmZpbGUoZmlsZW5h bWUpIG9yICIiCiAgICAgICAgICAgICAgICBpZiBmb3VuZG5hbWUgPT0gIiIgb3Igbm90IGlzZmls ZShmb3VuZG5hbWUpIHRoZW4KICAgICAgICAgICAgICAgICAgICBmaWxlc3RyZWFtc1tmaWxlbmFt ZV0gPSBmYWxzZQogICAgICAgICAgICAgICAgICAgIHJldHVybiBuaWwKICAgICAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY2F0aW9uLmZvdW5kbmFtZSA9IGZvdW5k bmFtZQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAg ICAgIC0tIG5lZWRzIHRvIGJlIGNsZWFuZWQgdXA6CiAgICAgICAgdXNlZG5hbWUgPSB1c2VkbmFt ZSB+PSAiIiBhbmQgdXNlZG5hbWUgb3IgZmlsZW5hbWUgb3IgbmFtZQogICAgICAgIGxvY2FsIGJh c2VuYW1lICA9IGtlZXBkaXIgPT0gdHJ1ZSBhbmQgdXNlZG5hbWUgb3IgYmFzZWZpbGVuYW1lKHVz ZWRuYW1lKQogICAgICAgIGxvY2FsIGJhc2VuYW1lICA9IGdzdWIoYmFzZW5hbWUsIiUuLyIsIiIp CiAgICAgICAgbG9jYWwgc2F2ZW5hbWUgID0gbmFtZSB+PSAiIiBhbmQgbmFtZSBvciBiYXNlbmFt ZQogICAgICAgIGxvY2FsIGZvdW5kbmFtZSA9IHNwZWNpZmljYXRpb24uZm91bmRuYW1lIG9yIGZp bGVuYW1lCiAgICAgICAgaWYgbm90IGZpbGV0eXBlIG9yIGZpbGV0eXBlID09ICIiIHRoZW4KICAg ICAgICAgICAgZmlsZXR5cGUgPSBuYW1lIGFuZCAoZmlsZW5hbWUgYW5kIGZpbGVzdWZmaXgoZmls ZW5hbWUpKSBvciAidHh0IgogICAgICAgIGVuZAogICAgICAgIHNhdmVuYW1lID0gYWRkZmlsZXN1 ZmZpeChzYXZlbmFtZSxmaWxldHlwZSkgLS0gdHlwZSBpcyBtYW5kYXRlIGZvciBwcm9wZXIgd29y a2luZyBpbiB2aWV3ZXIKICAgICAgICBsb2NhbCBhID0gcGRmZGljdGlvbmFyeSB7CiAgICAgICAg ICAgIFR5cGUgICAgPSBwZGZjb25zdGFudCgiRW1iZWRkZWRGaWxlIiksCiAgICAgICAgICAgIFN1 YnR5cGUgPSBtaW1ldHlwZSBhbmQgbWltZXR5cGUgfj0gIiIgYW5kIHBkZmNvbnN0YW50KG1pbWV0 eXBlKSBvciBuaWwsCiAgICAgICAgfQogICAgICAgIGxvY2FsIGYKICAgICAgICBpZiBkYXRhIHRo ZW4KICAgICAgICAgICAgZiA9IHBkZmZsdXNoc3RyZWFtb2JqZWN0KGRhdGEsYSkKICAgICAgICAg ICAgc3BlY2lmaWNhdGlvbi5kYXRhID0gdHJ1ZSAtLSBzaWduYWwgdGhhdCBzdGlsbCBkYXRhIGJ1 dCBhbHJlYWR5IGZsdXNoZWQKICAgICAgICBlbHNlCiAgICAgICAgICAgIGxvY2FsIGF0dHJpYnV0 ZXMgICA9IGxmcy5hdHRyaWJ1dGVzKGZvdW5kbmFtZSkKICAgICAgICAgICAgbG9jYWwgbW9kaWZp Y2F0aW9uID0gbW9kaWZpY2F0aW9udGltZShmb3VuZG5hbWUpCiAgICAgICAgICAgIGEuUGFyYW1z ID0gewogICAgICAgICAgICAgICAgU2l6ZSAgICA9IGF0dHJpYnV0ZXMuc2l6ZSwKICAgICAgICAg ICAgICAgIE1vZERhdGUgPSBscGRmLnBkZnRpbWVzdGFtcChtb2RpZmljYXRpb24pLAogICAgICAg ICAgICB9CiAgICAgICAgICAgIGYgPSBwZGZmbHVzaHN0cmVhbWZpbGVvYmplY3QoZm91bmRuYW1l LGEsY29tcHJlc3MpCiAgICAgICAgZW5kCiAgICAgICAgbG9jYWwgZCA9IHBkZmRpY3Rpb25hcnkg ewogICAgICAgICAgICBUeXBlICAgICAgICAgICA9IHBkZmNvbnN0YW50KCJGaWxlc3BlYyIpLAog ICAgICAgICAgICBGICAgICAgICAgICAgICA9IHBkZnN0cmluZyhzYXZlbmFtZSksCiAgICAgICAg IC0tIFVGICAgICAgICAgICAgID0gcGRmc3RyaW5nKHNhdmVuYW1lKSwKICAgICAgICAgICAgVUYg ICAgICAgICAgICAgPSBwZGZ1bmljb2RlKHNhdmVuYW1lKSwKICAgICAgICAgICAgRUYgICAgICAg ICAgICAgPSBwZGZkaWN0aW9uYXJ5IHsgRiA9IHBkZnJlZmVyZW5jZShmKSB9LAogICAgICAgICAg ICBEZXNjICAgICAgICAgICA9IHRpdGxlIH49ICIiIGFuZCBwZGZ1bmljb2RlKHRpdGxlKSBvciBu aWwsCiAgICAgICAgICAgIEFGUmVsYXRpb25zaGlwID0gcGRmY29uc3RhbnQoIlVuc3BlY2lmaWVk IiksIC0tIFN1cHBsZW1lbnQsIERhdGEsIFNvdXJjZSwgQWx0ZXJuYXRpdmUsIERhdGEKICAgICAg ICB9CiAgICAgICAgbG9jYWwgciA9IHBkZnJlZmVyZW5jZShwZGZmbHVzaG9iamVjdChkKSkKICAg ICAgICBmaWxlc3RyZWFtc1toYXNoXSA9IHIKICAgICAgICBpZiBzcGVjaWZpY2F0aW9uLmZvcmNl cmVmZXJlbmNlID09IHRydWUgdGhlbgogICAgICAgICAgICByZWZlcmVuY2VkW2hhc2hdID0gImZv cmNlZCIKICAgICAgICBlbmQKICAgICAgICByZXR1cm4gcgogICAgZW5kCmVuZAoKZnVuY3Rpb24g bm9kZWluamVjdGlvbnMuYXR0YWNoZmlsZShzcGVjaWZpY2F0aW9uKQogICAgaWYgZW5hYmxlZCB0 aGVuCiAgICAgICAgbG9jYWwgcmVnaXN0ZXJlZCA9IHNwZWNpZmljYXRpb24ucmVnaXN0ZXJlZCBv ciAiPHVuc2V0PiIKICAgICAgICBsb2NhbCBkYXRhID0gc3BlY2lmaWNhdGlvbi5kYXRhCiAgICAg ICAgbG9jYWwgaGFzaAogICAgICAgIGxvY2FsIGZpbGVuYW1lCiAgICAgICAgaWYgZGF0YSB0aGVu CiAgICAgICAgICAgIGhhc2ggPSBtZDUuSEVYKGRhdGEpCiAgICAgICAgZWxzZQogICAgICAgICAg ICBmaWxlbmFtZSA9IHNwZWNpZmljYXRpb24uZmlsZQogICAgICAgICAgICBpZiBub3QgZmlsZW5h bWUgb3IgZmlsZW5hbWUgPT0gIiIgdGhlbgogICAgICAgICAgICAgICAgcmVwb3J0X2F0dGFjaG1l bnQoIm5vIGZpbGUgc3BlY2lmaWVkLCB1c2luZyByZWdpc3RlcmVkICVhIGluc3RlYWQiLHJlZ2lz dGVyZWQpCiAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IHJlZ2lzdGVyZWQKICAgICAgICAgICAg ICAgIHNwZWNpZmljYXRpb24uZmlsZSA9IHJlZ2lzdGVyZWQKICAgICAgICAgICAgZW5kCiAgICAg ICAgICAgIGxvY2FsIGZvdW5kbmFtZSA9IHJlc29sdmVycy5maW5kYmluZmlsZShmaWxlbmFtZSkg b3IgIiIKICAgICAgICAgICAgaWYgZm91bmRuYW1lID09ICIiIG9yIG5vdCBpc2ZpbGUoZm91bmRu YW1lKSB0aGVuCiAgICAgICAgICAgICAgICByZXBvcnRfYXR0YWNobWVudCgiaW52YWxpZCBmaWxl bmFtZSAlYSwgaWdub3JpbmcgcmVnaXN0ZXJlZCAlYSIsZmlsZW5hbWUscmVnaXN0ZXJlZCkKICAg ICAgICAgICAgICAgIHJldHVybiBuaWwKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg c3BlY2lmaWNhdGlvbi5mb3VuZG5hbWUgPSBmb3VuZG5hbWUKICAgICAgICAgICAgZW5kCiAgICAg ICAgICAgIGhhc2ggPSBmaWxlbmFtZQogICAgICAgIGVuZAogICAgICAgIHNwZWNpZmljYXRpb24u aGFzaCA9IGhhc2gKICAgICAgICBub2ZhdHRhY2htZW50cyA9IG5vZmF0dGFjaG1lbnRzICsgMQog ICAgICAgIGxvY2FsIHJlZ2lzdGVyZWQgPSBzcGVjaWZpY2F0aW9uLnJlZ2lzdGVyZWQgb3IgIiIK ICAgICAgICBsb2NhbCB0aXRsZSAgICAgID0gc3BlY2lmaWNhdGlvbi50aXRsZSAgICAgIG9yICIi CiAgICAgICAgbG9jYWwgc3VidGl0bGUgICA9IHNwZWNpZmljYXRpb24uc3VidGl0bGUgICBvciAi IgogICAgICAgIGxvY2FsIGF1dGhvciAgICAgPSBzcGVjaWZpY2F0aW9uLmF1dGhvciAgICAgb3Ig IiIKICAgICAgICBsb2NhbCBvbmx5bmFtZSAgID0gZmlsZW5hbWUgYW5kIGZpbGVuYW1lb25seShm aWxlbmFtZSkgb3IgIiIKICAgICAgICBpZiByZWdpc3RlcmVkID09ICIiIHRoZW4KICAgICAgICAg ICAgcmVnaXN0ZXJlZCA9IGZpbGVuYW1lCiAgICAgICAgZW5kCiAgICAgICAgaWYgYXV0aG9yID09 ICIiIGFuZCB0aXRsZSB+PSAiIiB0aGVuCiAgICAgICAgICAgIGF1dGhvciA9IHRpdGxlCiAgICAg ICAgICAgIHRpdGxlICA9IG9ubHluYW1lIG9yICIiCiAgICAgICAgZW5kCiAgICAgICAgaWYgYXV0 aG9yID09ICIiIHRoZW4KICAgICAgICAgICAgYXV0aG9yID0gb25seW5hbWUgb3IgIjx1bmtub3du PiIKICAgICAgICBlbmQKICAgICAgICBpZiB0aXRsZSA9PSAiIiB0aGVuCiAgICAgICAgICAgIHRp dGxlID0gcmVnaXN0ZXJlZAogICAgICAgIGVuZAogICAgICAgIGlmIHRpdGxlID09ICIiIGFuZCBm aWxlbmFtZSB0aGVuCiAgICAgICAgICAgIHRpdGxlID0gb25seW5hbWUKICAgICAgICBlbmQKICAg ICAgICBsb2NhbCBhcmVmID0gYXR0YWNobWVudHNbcmVnaXN0ZXJlZF0KICAgICAgICBpZiBub3Qg YXJlZiB0aGVuCiAgICAgICAgICAgIGFyZWYgPSBjb2RlaW5qZWN0aW9ucy5lbWJlZGZpbGUoc3Bl Y2lmaWNhdGlvbikKICAgICAgICAgICAgYXR0YWNobWVudHNbcmVnaXN0ZXJlZF0gPSBhcmVmCiAg ICAgICAgZW5kCiAgICAgICAgbG9jYWwgcmVmZXJlbmNlID0gc3BlY2lmaWNhdGlvbi5yZWZlcmVu Y2UKICAgICAgICBpZiByZWZlcmVuY2UgYW5kIGFyZWYgdGhlbgogICAgICAgICAgICB0b2Jlc2F2 ZWRvYmpyZWZzW3JlZmVyZW5jZV0gPSBhcmVmWzFdCiAgICAgICAgZW5kCiAgICAgICAgaWYgbm90 IGFyZWYgdGhlbgogICAgICAgICAgICByZXBvcnRfYXR0YWNobWVudCgic2tpcHBpbmcgYXR0YWNo bWVudCwgcmVnaXN0ZXJlZCAlYSIscmVnaXN0ZXJlZCkKICAgICAgICAgICAgLS0gYWxyZWFkeSBy ZXBvcnRlZAogICAgICAgIGVsc2VpZiBzcGVjaWZpY2F0aW9uLm1ldGhvZCA9PSB2X2hpZGRlbiB0 aGVuCiAgICAgICAgICAgIHJlZmVyZW5jZWRbaGFzaF0gPSAiaGlkZGVuIgogICAgICAgIGVsc2UK ICAgICAgICAgICAgcmVmZXJlbmNlZFtoYXNoXSA9ICJhbm5vdGF0aW9uIgogICAgICAgICAgICBs b2NhbCBuYW1lLCBhcHBlYXJhbmNlID0gYW5hbHl6ZXN5bWJvbChzcGVjaWZpY2F0aW9uLnN5bWJv bCxhdHRhY2htZW50X3N5bWJvbHMpCiAgICAgICAgICAgIGxvY2FsIGZsYWdzID0gc3BlY2lmaWNh dGlvbi5mbGFncyBvciAwIC0tIHRvIGtlZXAgaXQgZXhwYW5kYWJsZQogICAgICAgICAgICBsb2Nh bCBkID0gcGRmZGljdGlvbmFyeSB7CiAgICAgICAgICAgICAgICBTdWJ0eXBlICA9IHBkZmNvbnN0 YW50KCJGaWxlQXR0YWNobWVudCIpLAogICAgICAgICAgICAgICAgRlMgICAgICAgPSBhcmVmLAog ICAgICAgICAgICAgICAgQ29udGVudHMgPSBwZGZ1bmljb2RlKHRpdGxlKSwKICAgICAgICAgICAg ICAgIE5hbWUgICAgID0gbmFtZSwKICAgICAgICAgICAgICAgIE5NICAgICAgID0gcGRmc3RyaW5n KCJhdHRhY2htZW50OiIuLm5vZmF0dGFjaG1lbnRzKSwKICAgICAgICAgICAgICAgIFQgICAgICAg ID0gYXV0aG9yIH49ICIiIGFuZCBwZGZ1bmljb2RlKGF1dGhvcikgb3IgbmlsLAogICAgICAgICAg ICAgICAgU3ViaiAgICAgPSBzdWJ0aXRsZSB+PSAiIiBhbmQgcGRmdW5pY29kZShzdWJ0aXRsZSkg b3IgbmlsLAogICAgICAgICAgICAgICAgQyAgICAgICAgPSBhbmFseXplY29sb3Ioc3BlY2lmaWNh dGlvbi5jb2xvcnZhbHVlLHNwZWNpZmljYXRpb24uY29sb3Jtb2RlbCksCiAgICAgICAgICAgICAg ICBDQSAgICAgICA9IGFuYWx5emV0cmFuc3BhcmVuY3koc3BlY2lmaWNhdGlvbi50cmFuc3BhcmVu Y3l2YWx1ZSksCiAgICAgICAgICAgICAgICBBUCAgICAgICA9IGFwcGVhcmFuY2UsCiAgICAgICAg ICAgICAgICBPQyAgICAgICA9IGFuYWx5emVsYXllcihzcGVjaWZpY2F0aW9uLmxheWVyKSwKICAg ICAgICAgICAgIC0tIEYgICAgICAgID0gcGRmbnVsbCgpLCAtLSBhbm90aGVyIHJlZGljdWxvdXMg bmVlZCB0byBzYXRpc2Z5IHZhbGlkYXRpb24KICAgICAgICAgICAgICAgIEYgICAgICAgID0gKGZs YWdzIHwgNCkgJiAoMTAyMy0xLTItMzItMjU2KSwgLS0gc2V0IDMsIGNsZWFyIDEsMiw2LDk7IFBE RiAzMjAwMC0xLCBwMzg1CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbG9jYWwgd2lkdGggID0g c3BlY2lmaWNhdGlvbi53aWR0aCAgb3IgMAogICAgICAgICAgICBsb2NhbCBoZWlnaHQgPSBzcGVj aWZpY2F0aW9uLmhlaWdodCBvciAwCiAgICAgICAgICAgIGxvY2FsIGRlcHRoICA9IHNwZWNpZmlj YXRpb24uZGVwdGggIG9yIDAKICAgICAgICAgICAgbG9jYWwgYm94ICAgID0gaHBhY2tub2RlKG5v ZGVpbmplY3Rpb25zLmFubm90YXRpb24od2lkdGgsaGVpZ2h0LGRlcHRoLGQoKSkpCiAgICAgICAg ICAgIGJveC53aWR0aCAgICA9IHdpZHRoCiAgICAgICAgICAgIGJveC5oZWlnaHQgICA9IGhlaWdo dAogICAgICAgICAgICBib3guZGVwdGggICAgPSBkZXB0aAogICAgICAgICAgICByZXR1cm4gYm94 CiAgICAgICAgZW5kCiAgICBlbmQKZW5kCgpmdW5jdGlvbiBjb2RlaW5qZWN0aW9ucy5hdHRhY2ht ZW50aWQoZmlsZW5hbWUpIC0tIG5vdCB1c2VkIGluIGNvbnRleHQKICAgIHJldHVybiBmaWxlc3Ry ZWFtc1tmaWxlbmFtZV0KZW5kCgotLSBDb21tZW50cwoKbG9jYWwgbm9mY29tbWVudHMgICAgICA9 IDAKbG9jYWwgdXNlcG9wdXBjb21tZW50cyA9IGZhbHNlCgpsb2NhbCBkZWZhdWx0YXR0cmlidXRl cyA9IHsKICAgIFsieG1sbnMiXSAgICAgICAgICAgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94 aHRtbCIsCiAgICBbInhtbG5zOnhmYSJdICAgICAgID0gImh0dHA6Ly93d3cueGZhLm9yZy9zY2hl bWEveGZhLWRhdGEvMS4wLyIsCiAgICBbInhmYTpjb250ZW50VHlwZSJdID0gInRleHQvaHRtbCIs CiAgICBbInhmYTpBUElWZXJzaW9uIl0gID0gIkFjcm9iYXQ6OC4wLjAiLAogICAgWyJ4ZmE6c3Bl YyJdICAgICAgICA9ICIyLjQiLAp9Cgpsb2NhbCBmdW5jdGlvbiBjaGVja2NvbnRlbnQodGV4dCxv cHRpb24pCiAgICBpZiBvcHRpb24gYW5kIG9wdGlvbi54bWwgdGhlbgogICAgICAgIGxvY2FsIHJv b3QgPSB4bWwuY29udmVydCh0ZXh0KQogICAgICAgIGlmIHJvb3QgYW5kIG5vdCByb290LmVyIHRo ZW4KICAgICAgICAgICAgeG1sLmNoZWNrYm9tKHJvb3QpCiAgICAgICAgICAgIGxvY2FsIGJvZHkg PSB4bWwuZmlyc3Qocm9vdCwiL2JvZHkiKQogICAgICAgICAgICBpZiBib2R5IHRoZW4KICAgICAg ICAgICAgICAgIGxvY2FsIGF0ID0gYm9keS5hdAogICAgICAgICAgICAgICAgZm9yIGssIHYgaW4g bmV4dCwgZGVmYXVsdGF0dHJpYnV0ZXMgZG8KICAgICAgICAgICAgICAgICAgICBpZiBub3QgYXRb a10gdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBhdFtrXSA9IHYKICAgICAgICAgICAgICAg ICAgICBlbmQKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgLS0gbG9jYWwgY29udGVu dCA9IHhtbC50ZXh0b25seShyb290KQogICAgICAgICAgICAgICAgbG9jYWwgcmljaGNvbnRlbnQg PSB4bWwudG9zdHJpbmcocm9vdCkKICAgICAgICAgICAgICAgIHJldHVybiBuaWwsIHBkZnVuaWNv ZGUocmljaGNvbnRlbnQpCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgZW5kCiAgICBy ZXR1cm4gcGRmdW5pY29kZSh0ZXh0KQplbmQKCmZ1bmN0aW9uIG5vZGVpbmplY3Rpb25zLmNvbW1l bnQoc3BlY2lmaWNhdGlvbikgLS0gYnJycjogc2VlbXMgdG8gYmUgZG9uZSB0d2ljZQogICAgbm9m Y29tbWVudHMgPSBub2Zjb21tZW50cyArIDEKICAgIGxvY2FsIHRleHQgPSBzcGVjaWZpY2F0aW9u LmRhdGEgb3IgIiIKICAgIGlmIHNwZWNpZmljYXRpb24uc3BhY2Ugfj0gdl95ZXMgdGhlbgogICAg ICAgIHRleHQgPSBzdHJpcHN0cmluZyh0ZXh0KQogICAgICAgIHRleHQgPSBnc3ViKHRleHQsIltc blxyXSAqIiwiXG4iKQogICAgZW5kCiAgICB0ZXh0ID0gZ3N1Yih0ZXh0LCJcciIsIlxuIikKICAg IGxvY2FsIG5hbWUsIGFwcGVhcmFuY2UgPSBhbmFseXplc3ltYm9sKHNwZWNpZmljYXRpb24uc3lt Ym9sLGNvbW1lbnRfc3ltYm9scykKICAgIGxvY2FsIHRhZyAgICAgID0gc3BlY2lmaWNhdGlvbi50 YWcgICAgICBvciAiIiAtLSB0aGlzIGlzIHNvbWV3aGF0IG1lc3N5IGFzIHJlY2VudAogICAgbG9j YWwgdGl0bGUgICAgPSBzcGVjaWZpY2F0aW9uLnRpdGxlICAgIG9yICIiIC0tIHZlcnNpb25zIG9m IGFjcm9iYXQgc2VlIHRoZSB0aXRsZQogICAgbG9jYWwgc3VidGl0bGUgPSBzcGVjaWZpY2F0aW9u LnN1YnRpdGxlIG9yICIiIC0tIGFzIGF1dGhvcgogICAgbG9jYWwgYXV0aG9yICAgPSBzcGVjaWZp Y2F0aW9uLmF1dGhvciAgIG9yICIiCiAgICBsb2NhbCBvcHRpb24gICA9IHNldHRpbmdzX3RvX2hh c2goc3BlY2lmaWNhdGlvbi5vcHRpb24gb3IgIiIpCiAgICBpZiBhdXRob3Igfj0gIiIgdGhlbgog ICAgICAgIGlmIHN1YnRpdGxlID09ICIiIHRoZW4KICAgICAgICAgICAgc3VidGl0bGUgPSB0aXRs ZQogICAgICAgIGVsc2VpZiB0aXRsZSB+PSAiIiB0aGVuCiAgICAgICAgICAgIHN1YnRpdGxlID0g c3VidGl0bGUgLi4gIiwgIiAuLiB0aXRsZQogICAgICAgIGVuZAogICAgICAgIHRpdGxlID0gYXV0 aG9yCiAgICBlbmQKICAgIGlmIHRpdGxlID09ICIiIHRoZW4KICAgICAgICB0aXRsZSA9IHRhZwog ICAgZW5kCiAgICBsb2NhbCBjb250ZW50LCByaWNoY29udGVudCA9IGNoZWNrY29udGVudCh0ZXh0 LG9wdGlvbikKICAgIGxvY2FsIGQgPSBwZGZkaWN0aW9uYXJ5IHsKICAgICAgICBTdWJ0eXBlICAg PSBwZGZjb25zdGFudCgiVGV4dCIpLAogICAgICAgIE9wZW4gICAgICA9IG9wdGlvblt2X21heF0g YW5kIHBkZmJvb2xlYW4odHJ1ZSkgb3IgbmlsLAogICAgICAgIENvbnRlbnRzICA9IGNvbnRlbnQs CiAgICAgICAgUkMgICAgICAgID0gcmljaGNvbnRlbnQsCiAgICAgICAgVCAgICAgICAgID0gdGl0 bGUgfj0gIiIgYW5kIHBkZnVuaWNvZGUodGl0bGUpIG9yIG5pbCwKICAgICAgICBTdWJqICAgICAg PSBzdWJ0aXRsZSB+PSAiIiBhbmQgcGRmdW5pY29kZShzdWJ0aXRsZSkgb3IgbmlsLAogICAgICAg IEMgICAgICAgICA9IGFuYWx5emVjb2xvcihzcGVjaWZpY2F0aW9uLmNvbG9ydmFsdWUsc3BlY2lm aWNhdGlvbi5jb2xvcm1vZGVsKSwKICAgICAgICBDQSAgICAgICAgPSBhbmFseXpldHJhbnNwYXJl bmN5KHNwZWNpZmljYXRpb24udHJhbnNwYXJlbmN5dmFsdWUpLAogICAgICAgIE9DICAgICAgICA9 IGFuYWx5emVsYXllcihzcGVjaWZpY2F0aW9uLmxheWVyKSwKICAgICAgICBOYW1lICAgICAgPSBu YW1lLAogICAgICAgIE5NICAgICAgICA9IHBkZnN0cmluZygiY29tbWVudDoiLi5ub2Zjb21tZW50 cyksCiAgICAgICAgQVAgICAgICAgID0gYXBwZWFyYW5jZSwKICAgIH0KICAgIGxvY2FsIHdpZHRo ICA9IHNwZWNpZmljYXRpb24ud2lkdGggIG9yIDAKICAgIGxvY2FsIGhlaWdodCA9IHNwZWNpZmlj YXRpb24uaGVpZ2h0IG9yIDAKICAgIGxvY2FsIGRlcHRoICA9IHNwZWNpZmljYXRpb24uZGVwdGgg IG9yIDAKICAgIGxvY2FsIGJveAogICAgaWYgdXNlcG9wdXBjb21tZW50cyB0aGVuCiAgICAgICAg LS0gcmF0aGVyIHVzZWxlc3MgYXMgd2UgY2FuIGhpZGUvdmlkZQogICAgICAgIGxvY2FsIG5kID0g cGRmcmVzZXJ2ZW9iamVjdCgpCiAgICAgICAgbG9jYWwgbmMgPSBwZGZyZXNlcnZlb2JqZWN0KCkK ICAgICAgICBsb2NhbCBjID0gcGRmZGljdGlvbmFyeSB7CiAgICAgICAgICAgIFN1YnR5cGUgPSBw ZGZjb25zdGFudCgiUG9wdXAiKSwKICAgICAgICAgICAgUGFyZW50ICA9IHBkZnJlZmVyZW5jZShu ZCksCiAgICAgICAgfQogICAgICAgIGQuUG9wdXAgPSBwZGZyZWZlcmVuY2UobmMpCiAgICAgICAg Ym94ID0gaHBhY2tub2RlKAogICAgICAgICAgICBub2RlaW5qZWN0aW9ucy5hbm5vdGF0aW9uKDAs MCwwLGQoKSxuZCksCiAgICAgICAgICAgIG5vZGVpbmplY3Rpb25zLmFubm90YXRpb24od2lkdGgs aGVpZ2h0LGRlcHRoLGMoKSxuYykKICAgICAgICApCiAgICBlbHNlCiAgICAgICAgYm94ID0gaHBh Y2tub2RlKG5vZGVpbmplY3Rpb25zLmFubm90YXRpb24od2lkdGgsaGVpZ2h0LGRlcHRoLGQoKSkp CiAgICBlbmQKICAgIGJveC53aWR0aCAgPSB3aWR0aCAgLS0gcmVkdW5kYW50CiAgICBib3guaGVp Z2h0ID0gaGVpZ2h0IC0tIHJlZHVuZGFudAogICAgYm94LmRlcHRoICA9IGRlcHRoICAtLSByZWR1 bmRhbnQKICAgIHJldHVybiBib3gKZW5kCgotLSByZW5kZXJpbmcgc3R1ZmYKLS0KLS0gb2JqZWN0 XzEgIC0+IDw8L1R5cGUgL1JlbmRpdGlvbiAvUyAvTVIgL0MgPDwgL1R5cGUgL01lZGlhQ2xpcCAu Li4gPj4gPj4KLS0gb2JqZWN0XzIgIC0+IDw8L1R5cGUgL1JlbmRpdGlvbiAvUyAvTVIgL0MgPDwg L1R5cGUgL01lZGlhQ2xpcCAuLi4gPj4gPj4KLS0gcmVuZGVyaW5nIC0+IDw8L1R5cGUgL1JlbmRp dGlvbiAvUyAvTVMgW29ianJlZl8xIG9ianJlZl8yXT4+Ci0tCi0tIHdlIG9ubHkgd29yayBmb3Jl d2FyZCBoZXJlIChjdXJyZW50bHkpCi0tIGFubm90YXRpb24gaXMgdG8gYmUgcGFja2VkIGF0IHRo ZSB0ZXggZW5kCgotLSBhaWZmIGF1ZGlvL2FpZmYKLS0gYXUgICBhdWRpby9iYXNpYwotLSBhdmkg IHZpZGVvL2F2aQotLSBtaWQgIGF1ZGlvL21pZGkKLS0gbW92ICB2aWRlby9xdWlja3RpbWUKLS0g bXAzICBhdWRpby94LW1wMyAobXBlZykKLS0gbXA0ICBhdWRpby9tcDQKLS0gbXA0ICB2aWRlby9t cDQKLS0gbXBlZyB2aWRlby9tcGVnCi0tIHNtaWwgYXBwbGljYXRpb24vc21pbAotLSBzd2YgIGFw cGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoCgotLSBQICBtZWRpYSBwbGF5IHBhcmFtZXRlcnMg KGV2dCAvQkUgZm9yIGNvbnRyb2xzIGV0YwotLSBBICBib29sZWFuIChhdWRpbykKLS0gQyAgYm9v bGVhbiAoY2FwdGlvbnMpCi0tIE8gIGJvb2xlYW4gKG92ZXJkdWJzKQotLSBTICBib29sZWFuIChz dWJ0aXRsZXMpCi0tIFBMIHBkZmNvbnN0YW50KCJBREJFX01DSSIpLAoKLS0gRiAgICAgICAgPSBm bGFncywKLS0gVCAgICAgICAgPSB0aXRsZSwKLS0gQ29udGVudHMgPSBydWJpc2gsCi0tIEFQICAg ICAgID0gaXJyZWxldmFudCwKCi0tIHNvdW5kIGlzIGRpZmZlcmVudCwgbm8gd2luZG93IChvciB6 ZXJvKSBzbyB3ZSBuZWVkIHRvIGNvbGxlY3QgdGhlbSBhbmQKLS0gZm9yY2UgdGhlbSBpZiBub3Qg c2V0Cgpsb2NhbCBtdSwgbWYgPSB7IH0sIHsgfSwgeyB9Cgpsb2NhbCBmdW5jdGlvbiBkZWxheWVk KGxhYmVsKQogICAgbG9jYWwgcmVzZXJ2ZWQgPSBtdVtsYWJlbF0KICAgIGlmIG5vdCByZXNlcnZl ZCB0aGVuCiAgICAgICAgcmVzZXJ2ZWQgPSBwZGZyZXNlcnZlb2JqZWN0KCkKICAgICAgICBtdVts YWJlbF0gPSByZXNlcnZlZAogICAgZW5kCiAgICByZXR1cm4gcmVzZXJ2ZWQKZW5kCgpsb2NhbCBm dW5jdGlvbiBjaGVja2VkcmVmZXJlbmNlKHJlZikKICAgIGxvY2FsIHNldCwgYnVnID0gc3RydWN0 dXJlcy5yZWZlcmVuY2VzLmlkZW50aWZ5KCIiLHJlZikKICAgIGlmIG5vdCBidWcgYW5kICNzZXQg PiAwIHRoZW4KICAgICAgICByZXR1cm4gcGRmYWN0aW9uKHNldCkKICAgIGVuZAplbmQKCmxvY2Fs IGZ1bmN0aW9uIGluc2VydHJlbmRlcmluZ3dpbmRvdyhzcGVjaWZpY2F0aW9uKQogICAgbG9jYWwg YWN0aW9ucyAgID0gbmlsCiAgICBsb2NhbCBsYWJlbCAgICAgPSBzcGVjaWZpY2F0aW9uLmxhYmVs CiAgICBsb2NhbCBvcGVucGFnZSAgPSBzcGVjaWZpY2F0aW9uLm9wZW5wYWdlCiAgICBsb2NhbCBj bG9zZXBhZ2UgPSBzcGVjaWZpY2F0aW9uLmNsb3NlcGFnZQogICAgbG9jYWwgb3B0aW9uICAgID0g c2V0dGluZ3NfdG9faGFzaChzcGVjaWZpY2F0aW9uLm9wdGlvbikKICAgIG9wZW5wYWdlICA9IGNo ZWNrZWRyZWZlcmVuY2Uob3BlbnBhZ2UpCiAgICBjbG9zZXBhZ2UgPSBjaGVja2VkcmVmZXJlbmNl KGNsb3NlcGFnZSkKICAgIGlmIG9wdGlvblt2X2F1dG9dIHRoZW4KICAgICAgICBpZiBub3Qgb3Bl bnBhZ2UgdGhlbgogICAgICAgICAgICBvcGVucGFnZSA9IGV4ZWN1dGVycy5zdGFydHJlbmRlcmlu ZyhsYWJlbCkKICAgICAgICBlbmQKICAgICAgICBpZiBub3QgY2xvc2VwYWdlIHRoZW4KICAgICAg ICAgICAgY2xvc2VwYWdlID0gZXhlY3V0ZXJzLnN0b3ByZW5kZXJpbmcobGFiZWwpCiAgICAgICAg ZW5kCiAgICBlbmQKICAgIGlmIG9wZW5wYWdlIG9yIGNsb3NlcGFnZSB0aGVuCiAgICAgICAgYWN0 aW9ucyA9IHBkZmRpY3Rpb25hcnkgewogICAgICAgICAgICBQTyA9IG9wZW5wYWdlLAogICAgICAg ICAgICBQQyA9IGNsb3NlcGFnZSwKICAgICAgICB9CiAgICBlbmQKICAgIGxvY2FsIHBhZ2UgPSB0 b251bWJlcihzcGVjaWZpY2F0aW9uLnBhZ2UpIG9yIHRleGdldGNvdW50KCJyZWFscGFnZW5vIikg LS0gdG9kbwogICAgbG9jYWwgciA9IGRlbGF5ZWQobGFiZWwpIC0tIHJlc2VydmUsIGNoaWxkIHJl ZmVycyB0byBwYXJlbnQKICAgIGxvY2FsIGEgPSBleGVjdXRlcnMuc3RhcnRyZW5kZXJpbmcobGFi ZWwpCiAgICBsb2NhbCBicywgYmMgPSBwZGZib3JkZXIoKQogICAgbG9jYWwgZCA9IHBkZmRpY3Rp b25hcnkgewogICAgICAgIFN1YnR5cGUgPSBwZGZjb25zdGFudCgiU2NyZWVuIiksCiAgICAgICAg UCAgICAgICA9IHBkZnJlZmVyZW5jZShwZGZwYWdlcmVmZXJlbmNlKHBhZ2UpKSwKICAgICAgICBB ICAgICAgID0gYSwgLS0gbmVlZGVkIGluIG9yZGVyIHRvIG1ha2UgdGhlIGFubm90YXRpb24gY2xp Y2thYmxlIChpLmUuIGRvbid0IGJhcmspCiAgICAgICAgVCAgICAgICA9IHBkZnVuaWNvZGUobGFi ZWwpLCAtLSBmb3IgSlMKICAgICAgICBCb3JkZXIgID0gYnMsCiAgICAgICAgQyAgICAgICA9IGJj LAogICAgICAgIEFBICAgICAgPSBhY3Rpb25zLAogICAgfQogICAgbG9jYWwgd2lkdGggPSBzcGVj aWZpY2F0aW9uLndpZHRoIG9yIDAKICAgIGxvY2FsIGhlaWdodCA9IHNwZWNpZmljYXRpb24uaGVp Z2h0IG9yIDAKICAgIGNvbnRleHQobm9kZWluamVjdGlvbnMuYW5ub3RhdGlvbih3aWR0aCxoZWln aHQsMCxkKCkscikpIC0tIHNhdmUgcmVmCmVuZAoKLS0gc29tZSBkaWN0aW9uYXJpZXMgY2FuIGhh dmUgYSBNSCAobXVzdCBob25vcikgb3IgQkUgKGJlc3QgZWZmb3J0KSBjYXBzdWxlCgpsb2NhbCBm dW5jdGlvbiBpbnNlcnRyZW5kZXJpbmcoc3BlY2lmaWNhdGlvbikKICAgIGxvY2FsIGxhYmVsICA9 IHNwZWNpZmljYXRpb24ubGFiZWwKICAgIGxvY2FsIG9wdGlvbiA9IHNldHRpbmdzX3RvX2hhc2go c3BlY2lmaWNhdGlvbi5vcHRpb24pCiAgICBpZiBub3QgbWZbbGFiZWxdIHRoZW4KICAgICAgICBs b2NhbCBmaWxlbmFtZSA9IHNwZWNpZmljYXRpb24uZmlsZW5hbWUKICAgICAgICBpZiBmaWxlbmFt ZSBhbmQgZmlsZW5hbWUgfj0gIiIgdGhlbgogICAgICAgICAgICBsb2NhbCBpc3VybCAgICA9IGZp bmQoZmlsZW5hbWUsIjovLyIsMSx0cnVlKQogICAgICAgICAgICBsb2NhbCBtaW1ldHlwZSA9IHNw ZWNpZmljYXRpb24ubWltZXR5cGUgb3Igc3BlY2lmaWNhdGlvbi5taW1lCiAgICAgICAgIC0tIGxv Y2FsIHN0YXJ0ID0gcGRmZGljdGlvbmFyeSB7CiAgICAgICAgIC0tICAgICBUeXBlID0gcGRmY29u c3RhbnQoIk1lZGlhT2Zmc2V0IiksCiAgICAgICAgIC0tICAgICBTID0gcGRmY29uc3RhbnQoIlQi KSwgLS0gdGltZQogICAgICAgICAtLSAgICAgVCA9IHBkZmRpY3Rpb25hcnkgeyAtLSB0aW1lCiAg ICAgICAgIC0tICAgICAgICAgVHlwZSA9IHBkZmNvbnN0YW50KCJUaW1lc3BhbiIpLAogICAgICAg ICAtLSAgICAgICAgIFMgICAgPSBwZGZjb25zdGFudCgiUyIpLAogICAgICAgICAtLSAgICAgICAg IFYgICAgPSAzLCAtLSB0aW1lIGluIHNlY29uZHMKICAgICAgICAgLS0gICAgIH0sCiAgICAgICAg IC0tIH0KICAgICAgICAgLS0gbG9jYWwgc3RhcnQgPSBwZGZkaWN0aW9uYXJ5IHsKICAgICAgICAg LS0gICAgIFR5cGUgPSBwZGZjb25zdGFudCgiTWVkaWFPZmZzZXQiKSwKICAgICAgICAgLS0gICAg IFMgPSBwZGZjb25zdGFudCgiRiIpLCAtLSBmcmFtZQogICAgICAgICAtLSAgICAgRiA9IDEwMCAt LSBmcmFtZW51bWJlcgogICAgICAgICAtLSB9CiAgICAgICAgIC0tIGxvY2FsIHN0YXJ0ID0gcGRm ZGljdGlvbmFyeSB7CiAgICAgICAgIC0tICAgICBUeXBlID0gcGRmY29uc3RhbnQoIk1lZGlhT2Zm c2V0IiksCiAgICAgICAgIC0tICAgICBTID0gcGRmY29uc3RhbnQoIk0iKSwgLS0gbWFyawogICAg ICAgICAtLSAgICAgTSA9ICJzb21lbWFyayIsCiAgICAgICAgIC0tIH0KICAgICAgICAgLS0gbG9j YWwgcGFyYW1ldGVycyA9IHBkZmRpY3Rpb25hcnkgewogICAgICAgICAtLSAgICAgQkUgPSBwZGZk aWN0aW9uYXJ5IHsKICAgICAgICAgLS0gICAgICAgICAgQiA9IHN0YXJ0LAogICAgICAgICAtLSAg ICAgfQogICAgICAgICAtLSB9CiAgICAgICAgICAgIGxvY2FsIHBhcmFtZXRlcnMgPSBwZGZkaWN0 aW9uYXJ5IHsKICAgICAgICAgICAgICAgIFR5cGUgPSBwZGZjb25zdGFudCgiTWVkaWFQZXJtaXNz aW9ucyIpLAogICAgICAgICAgICAgICAgVEYgICA9IHBkZnN0cmluZygiVEVNUEFMV0FZUyIpLCAt LSBURU1QTkVWRVIgVEVNUEVYVFJBQ1QgVEVNUEFDQ0VTUyBURU1QQUxXQVlTIC8gbmVlZGVkIGZv ciBhY3JvYmF0L3dtcAogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvY2FsIGRlc2NyaXB0b3Ig PSBwZGZkaWN0aW9uYXJ5IHsKICAgICAgICAgICAgICAgIFR5cGUgPSBwZGZjb25zdGFudCgiRmls ZXNwZWMiKSwKICAgICAgICAgICAgICAgIEYgICAgPSBmaWxlbmFtZSwKICAgICAgICAgICAgfQog ICAgICAgICAgICBpZiBpc3VybCB0aGVuCiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLkZTID0g cGRmY29uc3RhbnQoIlVSTCIpCiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yID0gcGRmcmVmZXJl bmNlKHBkZmZsdXNob2JqZWN0KGRlc2NyaXB0b3IpKQogICAgICAgICAgICBlbHNlaWYgb3B0aW9u W3ZfZW1iZWRdIHRoZW4KICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBjb2RlaW5qZWN0aW9u cy5lbWJlZGZpbGUgewogICAgICAgICAgICAgICAgICAgIGZpbGUgICAgICAgICAgID0gZmlsZW5h bWUsCiAgICAgICAgICAgICAgICAgICAgbWltZXR5cGUgICAgICAgPSBtaW1ldHlwZSwgLS0geWVz IG9yIG5vCiAgICAgICAgICAgICAgICAgICAgdGl0bGUgICAgICAgICAgPSBvcHRpb25bdl90aXRs ZV0sCiAgICAgICAgICAgICAgICAgICAgY29tcHJlc3MgICAgICAgPSBvcHRpb25bdl9jb21wcmVz c10gb3IgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgZm9yY2VyZWZlcmVuY2UgPSBvcHRpb25b dl9saXN0XSB+PSB2X25vLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbmQKICAgICAg ICAgICAgbG9jYWwgY2xpcCA9IHBkZmRpY3Rpb25hcnkgewogICAgICAgICAgICAgICAgVHlwZSA9 IHBkZmNvbnN0YW50KCJNZWRpYUNsaXAiKSwKICAgICAgICAgICAgICAgIFMgICAgPSBwZGZjb25z dGFudCgiTUNEIiksCiAgICAgICAgICAgICAgICBOICAgID0gbGFiZWwsCiAgICAgICAgICAgICAg ICBDVCAgID0gbWltZXR5cGUsCiAgICAgICAgICAgICAgICBBbHQgID0gcGRmYXJyYXkgeyAiIiwg ImZpbGUgbm90IGZvdW5kIiB9LCAtLSBsYW5ndWFnZSBpZCArIG1lc3NhZ2UKICAgICAgICAgICAg ICAgIEQgICAgPSBkZXNjcmlwdG9yLAogICAgICAgICAgICAgICAgUCAgICA9IHBkZnJlZmVyZW5j ZShwZGZmbHVzaG9iamVjdChwYXJhbWV0ZXJzKSksCiAgICAgICAgICAgIH0KICAgICAgICAgICAg bG9jYWwgcmVuZGl0aW9uID0gcGRmZGljdGlvbmFyeSB7CiAgICAgICAgICAgICAgICBUeXBlID0g cGRmY29uc3RhbnQoIlJlbmRpdGlvbiIpLAogICAgICAgICAgICAgICAgUyAgICA9IHBkZmNvbnN0 YW50KCJNUiIpLAogICAgICAgICAgICAgICAgTiAgICA9IHBkZnVuaWNvZGUobGFiZWwpLAogICAg ICAgICAgICAgICAgQyAgICA9IHBkZnJlZmVyZW5jZShwZGZmbHVzaG9iamVjdChjbGlwKSksCiAg ICAgICAgICAgIH0KICAgICAgICAgICAgbWZbbGFiZWxdID0gcGRmcmVmZXJlbmNlKHBkZmZsdXNo b2JqZWN0KHJlbmRpdGlvbikpCiAgICAgICAgZW5kCiAgICBlbmQKZW5kCgpmdW5jdGlvbiBjb2Rl aW5qZWN0aW9ucy5wcm9jZXNzcmVuZGVyaW5nKGxhYmVsKQogICAgbG9jYWwgc3BlY2lmaWNhdGlv biA9IGludGVyYWN0aW9ucy5yZW5kZXJpbmdzLnJlbmRlcmluZyhsYWJlbCkKICAgIGlmIHNwZWNp ZmljYXRpb24gdGhlbgogICAgICAgIGluc2VydHJlbmRlcmluZyhzcGVjaWZpY2F0aW9uKQogICAg ZWxzZQogICAgICAgIC0tIGVycm9yCiAgICBlbmQKZW5kCgotLSBuZWVkZWQgbWFwcGluZyBmb3Ig YWNjZXNzIGZyb20gSlMKCmxvY2FsIGZ1bmN0aW9uIGZsdXNocmVuZGVyaW5ncygpCiAgICBpZiBu ZXh0KG1mKSB0aGVuCiAgICAgICAgbG9jYWwgciA9IHBkZmFycmF5KCkKICAgICAgICBmb3IgbGFi ZWwsIHJlZmVyZW5jZSBpbiBzb3J0ZWRoYXNoKG1mKSBkbwogICAgICAgICAgICByWyNyKzFdID0g cGRmdW5pY29kZShsYWJlbCkKICAgICAgICAgICAgclsjcisxXSA9IHJlZmVyZW5jZSAtLSBhbHJl YWR5IGEgcmVmZXJlbmNlCiAgICAgICAgZW5kCiAgICAgICAgbHBkZi5hZGR0b25hbWVzKCJSZW5k aXRpb25zIixwZGZyZWZlcmVuY2UocGRmZmx1c2hvYmplY3QocGRmZGljdGlvbmFyeXsgTmFtZXMg PSByIH0pKSkKICAgIGVuZAplbmQKCmxwZGYucmVnaXN0ZXJkb2N1bWVudGZpbmFsaXplcihmbHVz aHJlbmRlcmluZ3MsInJlbmRlcmluZ3MiKQoKZnVuY3Rpb24gY29kZWluamVjdGlvbnMuaW5zZXJ0 cmVuZGVyaW5nd2luZG93KHNwZWNpZmljYXRpb24pCiAgICBsb2NhbCBsYWJlbCA9IHNwZWNpZmlj YXRpb24ubGFiZWwKICAgIGNvZGVpbmplY3Rpb25zLnByb2Nlc3NyZW5kZXJpbmcobGFiZWwpCiAg ICBpbnNlcnRyZW5kZXJpbmd3aW5kb3coc3BlY2lmaWNhdGlvbikKZW5kCgpsb2NhbCBmdW5jdGlv biBzZXQob3BlcmF0aW9uLGxhYmVsKQogICAgaWYgbGFiZWwgYW5kIGxhYmVsIH49ICIiIHRoZW4K ICAgICAgICBjb2RlaW5qZWN0aW9ucy5wcm9jZXNzcmVuZGVyaW5nKGxhYmVsKQogICAgICAgIHJl dHVybiBwZGZkaWN0aW9uYXJ5IHsKICAgICAgICAgICAgUyAgPSBwZGZjb25zdGFudCgiUmVuZGl0 aW9uIiksCiAgICAgICAgICAgIE9QID0gb3BlcmF0aW9uLAogICAgICAgICAgICBSICA9IG1mW2xh YmVsXSwKICAgICAgICAgICAgQU4gPSBwZGZyZWZlcmVuY2UoZGVsYXllZChsYWJlbCkpLAogICAg ICAgIH0KICAgIGVuZAplbmQKCmZ1bmN0aW9uIGV4ZWN1dGVycy5zdGFydHJlbmRlcmluZyAobGFi ZWwpIHJldHVybiBzZXQoMCxsYWJlbCkgZW5kCmZ1bmN0aW9uIGV4ZWN1dGVycy5zdG9wcmVuZGVy aW5nICAobGFiZWwpIHJldHVybiBzZXQoMSxsYWJlbCkgZW5kCmZ1bmN0aW9uIGV4ZWN1dGVycy5w YXVzZXJlbmRlcmluZyAobGFiZWwpIHJldHVybiBzZXQoMixsYWJlbCkgZW5kCmZ1bmN0aW9uIGV4 ZWN1dGVycy5yZXN1bWVyZW5kZXJpbmcobGFiZWwpIHJldHVybiBzZXQoMyxsYWJlbCkgZW5kCg== --599102e9273014e1b10a6e27aaf5402f44d7884526f7e1d46ad3a9a38b75 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSWYgeW91ciBxdWVzdGlvbiBpcyBvZiBpbnRlcmVz dCB0byBvdGhlcnMgYXMgd2VsbCwgcGxlYXNlIGFkZCBhbiBlbnRyeSB0byB0aGUgV2lraSEKCm1h aWxsaXN0IDogbnRnLWNvbnRleHRAbnRnLm5sIC8gaHR0cHM6Ly93d3cubnRnLm5sL21haWxtYW4v bGlzdGluZm8vbnRnLWNvbnRleHQKd2VicGFnZSAgOiBodHRwczovL3d3dy5wcmFnbWEtYWRlLm5s IC8gaHR0cDovL2NvbnRleHQuYWFuaGV0Lm5ldAphcmNoaXZlICA6IGh0dHBzOi8vYml0YnVja2V0 Lm9yZy9waGcvY29udGV4dC1taXJyb3IvY29tbWl0cy8Kd2lraSAgICAgOiBodHRwczovL2NvbnRl eHRnYXJkZW4ubmV0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCg== --599102e9273014e1b10a6e27aaf5402f44d7884526f7e1d46ad3a9a38b75--