Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ldqY8-0004k8-UF for pgadmin-hackers@arkaria.postgresql.org; Tue, 04 May 2021 08:37:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ldqY7-0000wl-OF for pgadmin-hackers@arkaria.postgresql.org; Tue, 04 May 2021 08:36:59 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ldqY7-0000we-0H for pgadmin-hackers@lists.postgresql.org; Tue, 04 May 2021 08:36:59 +0000 Received: from mail-oi1-x236.google.com ([2607:f8b0:4864:20::236]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ldqY0-0003Rq-1s for pgadmin-hackers@postgresql.org; Tue, 04 May 2021 08:36:57 +0000 Received: by mail-oi1-x236.google.com with SMTP id n184so8039444oia.12 for ; Tue, 04 May 2021 01:36:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=FJAM3G74ofDiuy4yS164X69Dagf8zscoUrf2NCTmK2k=; b=Ni3x0nn6PmLtY5d4MyKP2jYt9d3KNxdCFf4ooOPg07kw77qRCagSflwFy0CKu9si0r +HwaBzvrr3cjyRDlo8Iptxx2Kav3Wwqu2BkiJEvEEKlR0orJ4ozx6A7S3qsnau7d5Ceb 6sr/BgShHZwFK1dnNKWkp6s6M5J3Nu+5CKqXpMv72Z2jIQ2HC/D0onf4N8navIVtSxHs XW1rvIeAIOz318PIRHN5ElxYXGIgp1H3oAaEaZ+BQMw9lZ76F3sjuqVSge6bUNGd+8LA RzqOSuKTAbMxyeqGaNkyd81ogPUII7zpqYEIcbBFGRnjpQZNaXMxb3yMy1wHmrQODvFQ NU9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=FJAM3G74ofDiuy4yS164X69Dagf8zscoUrf2NCTmK2k=; b=VwDnHoYkOw67dLn3wNRd37PxHX5Fyb7xmYEwqKqYytoqMj9U3UeDXofnWgWvzLqG4c Ufa3KmrOlYB1qke9A3nZOcmEA/DIH/fOx3PzRyF9x+uWcs0zl5LQ/oZxSpSEYlI6sxaE 0pHgVLswZDnKSMQdeI8/IM4SdDR8lOe3djsaf7WJ0S89d7Xpz3sQrrgxb7Vk6c5f8xpv 4CHEHB29WxwIaPGbir1a4XdL1d1YQSvkJmco/DirF+3NR/R7MH2cqe8FLWsE+rehqX6j kcHxO7MdPDrtOD7i3niPTc1PzZfTPC9t1hsIu++zo/aZLTeAU+9tfyRyh5yY+wEJ6HdR egaA== X-Gm-Message-State: AOAM531XdTpapd99eG7yfDn1Vg/fV2Xxyimom7h21n/tO/nMYz3vxkEm dgU0Tz+2UV1kCIA2HeF+z7Gk/ztZLFOBZEubVUFaWdD7AZQ3ZYHizjz99rTvmC2yIg0oLDWvvHW VNnvD+iNi/bAaiY6kJC99dsrlP8zEedhjzL4LoZTlrTlA2L4DMoShgky8tHP4bigERLmFILimAC mlRT+q4et4EnPUTADGI0e9BGzRvnEKCa3PNwhjGYDvkPUUm97DyQ+yXWFV4YXu4/qMFQ== X-Google-Smtp-Source: ABdhPJzIR1xf4mbWlRJJyD9jIRCdIVx8BDHachnZVyFmPO8B7qbi2ugVTgw3QhqiDFMgSJrFnhehf7H/l6XjlpXE5gs= X-Received: by 2002:aca:53ce:: with SMTP id h197mr3800572oib.168.1620117410956; Tue, 04 May 2021 01:36:50 -0700 (PDT) MIME-Version: 1.0 From: Murtuza Zabuawala Date: Tue, 4 May 2021 14:06:34 +0530 Message-ID: Subject: [pgAdmin4] Update require.js library to latest version To: pgadmin-hackers Content-Type: multipart/mixed; boundary="000000000000c6833b05c17cfa5b" X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c6833b05c17cfa5b Content-Type: multipart/alternative; boundary="000000000000c6833905c17cfa59" --000000000000c6833905c17cfa59 Content-Type: text/plain; charset="UTF-8" Hi, PFA patch to update the require.js library to the latest version. -- Regards, Murtuza Zabuawala *EDB* *POWER TO POSTGRES* https://www.edbpostgres.com --000000000000c6833905c17cfa59 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

PFA patch to= update the require.js library to the latest version.

--
Regards,
Murtuza Zabuawala=
EDB
= POWER TO POSTGRES
--000000000000c6833905c17cfa59-- --000000000000c6833b05c17cfa5b Content-Type: application/octet-stream; name="update_requirejs_to_latest.diff" Content-Disposition: attachment; filename="update_requirejs_to_latest.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ko9s17rk0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3IvcmVxdWlyZS9yZXF1aXJlLmpz IGIvd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9yZXF1aXJlL3JlcXVpcmUuanMKaW5kZXggZGNm YWI3ZjhlLi43ODQ5MGY5MWQgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3Iv cmVxdWlyZS9yZXF1aXJlLmpzCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3IvcmVxdWly ZS9yZXF1aXJlLmpzCkBAIC0xLDE2ICsxLDYgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBwZ0FkbWluIDQgLSBQ b3N0Z3JlU1FMIFRvb2xzCi0vLwotLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMSwgVGhlIHBn QWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQotLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRl ciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQogLyoqIHZpbTogZXQ6dHM9NDpz dz00OnN0cz00Ci0gKiBAbGljZW5zZSBSZXF1aXJlSlMgMi4xLjE3IENvcHlyaWdodCAoYykgMjAx MC0yMDE1LCBUaGUgRG9qbyBGb3VuZGF0aW9uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBBdmFp bGFibGUgdmlhIHRoZSBNSVQgb3IgbmV3IEJTRCBsaWNlbnNlLgotICogc2VlOiBodHRwOi8vZ2l0 aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcyBmb3IgZGV0YWlscworICogQGxpY2Vuc2UgUmVxdWly ZUpTIDIuMy42IENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0 b3JzLgorICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIGh0dHBzOi8vZ2l0aHViLmNvbS9y ZXF1aXJlanMvcmVxdWlyZWpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICAqLwogLy9Ob3QgdXNpbmcg c3RyaWN0OiB1bmV2ZW4gc3RyaWN0IHN1cHBvcnQgaW4gYnJvd3NlcnMsICMzOTIsIGFuZCBjYXVz ZXMKIC8vcHJvYmxlbXMgd2l0aCByZXF1aXJlanMuZXhlYygpL3RyYW5zcGlsZXIgcGx1Z2lucyB0 aGF0IG1heSBub3QgYmUgc3RyaWN0LgpAQCAtMTgsMTkgKzgsMTcgQEAKIC8qZ2xvYmFsIHdpbmRv dywgbmF2aWdhdG9yLCBkb2N1bWVudCwgaW1wb3J0U2NyaXB0cywgc2V0VGltZW91dCwgb3BlcmEg Ki8KIAogdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwotKGZ1bmN0aW9uIChnbG9iYWwp IHsKKyhmdW5jdGlvbiAoZ2xvYmFsLCBzZXRUaW1lb3V0KSB7CiAgICAgdmFyIHJlcSwgcywgaGVh ZCwgYmFzZUVsZW1lbnQsIGRhdGFNYWluLCBzcmMsCiAgICAgICAgIGludGVyYWN0aXZlU2NyaXB0 LCBjdXJyZW50bHlBZGRpbmdTY3JpcHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCi0gICAgICAgIHZl cnNpb24gPSAnMi4xLjE3JywKLSAgICAgICAgY29tbWVudFJlZ0V4cCA9IC8oXC9cKihbXHNcU10q PylcKlwvfChbXjpdfF4pXC9cLyguKikkKS9tZywKKyAgICAgICAgdmVyc2lvbiA9ICcyLjMuNics CisgICAgICAgIGNvbW1lbnRSZWdFeHAgPSAvXC9cKltcc1xTXSo/XCpcL3woW146Iic9XXxeKVwv XC8uKiQvbWcsCiAgICAgICAgIGNqc1JlcXVpcmVSZWdFeHAgPSAvW14uXVxzKnJlcXVpcmVccypc KFxzKlsiJ10oW14nIlxzXSspWyInXVxzKlwpL2csCiAgICAgICAgIGpzU3VmZml4UmVnRXhwID0g L1wuanMkLywKICAgICAgICAgY3VyckRpclJlZ0V4cCA9IC9eXC5cLy8sCiAgICAgICAgIG9wID0g T2JqZWN0LnByb3RvdHlwZSwKICAgICAgICAgb3N0cmluZyA9IG9wLnRvU3RyaW5nLAogICAgICAg ICBoYXNPd24gPSBvcC5oYXNPd25Qcm9wZXJ0eSwKLSAgICAgICAgYXAgPSBBcnJheS5wcm90b3R5 cGUsCi0gICAgICAgIGFwc3AgPSBhcC5zcGxpY2UsCiAgICAgICAgIGlzQnJvd3NlciA9ICEhKHR5 cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRl ZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCksCiAgICAgICAgIGlzV2ViV29ya2VyID0gIWlzQnJv d3NlciAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgIC8v UFMzIGluZGljYXRlcyBsb2FkZWQgYW5kIGNvbXBsZXRlLCBidXQgbmVlZCB0byB3YWl0IGZvciBj b21wbGV0ZQpAQCAtNDcsNiArMzUsMTEgQEAgdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5l OwogICAgICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdLAogICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9 IGZhbHNlOwogCisgICAgLy9Db3VsZCBtYXRjaCBzb21ldGhpbmcgbGlrZSAnKS8vY29tbWVudCcs IGRvIG5vdCBsb3NlIHRoZSBwcmVmaXggdG8gY29tbWVudC4KKyAgICBmdW5jdGlvbiBjb21tZW50 UmVwbGFjZShtYXRjaCwgc2luZ2xlUHJlZml4KSB7CisgICAgICAgIHJldHVybiBzaW5nbGVQcmVm aXggfHwgJyc7CisgICAgfQorCiAgICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpdCkgewogICAgICAg ICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJzsKICAgICB9 CkBAIC0xNzIsNyArMTY1LDcgQEAgdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwogICAg ICAqIEByZXR1cm5zIHtFcnJvcn0KICAgICAgKi8KICAgICBmdW5jdGlvbiBtYWtlRXJyb3IoaWQs IG1zZywgZXJyLCByZXF1aXJlTW9kdWxlcykgewotICAgICAgICB2YXIgZSA9IG5ldyBFcnJvciht c2cgKyAnXG5odHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2Vycm9ycy5odG1sIycgKyBpZCk7Cisg ICAgICAgIHZhciBlID0gbmV3IEVycm9yKG1zZyArICdcbmh0dHBzOi8vcmVxdWlyZWpzLm9yZy9k b2NzL2Vycm9ycy5odG1sIycgKyBpZCk7CiAgICAgICAgIGUucmVxdWlyZVR5cGUgPSBpZDsKICAg ICAgICAgZS5yZXF1aXJlTW9kdWxlcyA9IHJlcXVpcmVNb2R1bGVzOwogICAgICAgICBpZiAoZXJy KSB7CkBAIC00NDcsMTAgKzQ0MCwxMiBAQCB2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7 CiAgICAgICAgICAgICAvL0FjY291bnQgZm9yIHJlbGF0aXZlIHBhdGhzIGlmIHRoZXJlIGlzIGEg YmFzZSBuYW1lLgogICAgICAgICAgICAgaWYgKG5hbWUpIHsKICAgICAgICAgICAgICAgICBpZiAo cHJlZml4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW5Nb2R1bGUgJiYgcGx1Z2lu TW9kdWxlLm5vcm1hbGl6ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3JtYWxpemVk KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWU7CisgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGx1Z2luTW9kdWxlICYmIHBsdWdpbk1vZHVsZS5u b3JtYWxpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vUGx1Z2luIGlzIGxvYWRlZCwg dXNlIGl0cyBub3JtYWxpemUgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFs aXplZE5hbWUgPSBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChfbmFtZSkg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUoX25hbWUsIHBh cmVudE5hbWUsIGFwcGx5TWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRO YW1lID0gcGx1Z2luTW9kdWxlLm5vcm1hbGl6ZShuYW1lLCBmdW5jdGlvbiAobmFtZSkgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFt ZSwgYXBwbHlNYXApOwogICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuZXN0ZWQgcGx1 Z2luIHJlZmVyZW5jZXMsIHRoZW4gZG8gbm90IHRyeSB0bwpAQCAtNTYzLDExICs1NTgsMTMgQEAg dmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwogICAgICAgICBmdW5jdGlvbiB0YWtlR2xv YmFsUXVldWUoKSB7CiAgICAgICAgICAgICAvL1B1c2ggYWxsIHRoZSBnbG9iYWxEZWZRdWV1ZSBp dGVtcyBpbnRvIHRoZSBjb250ZXh0J3MgZGVmUXVldWUKICAgICAgICAgICAgIGlmIChnbG9iYWxE ZWZRdWV1ZS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAvL0FycmF5IHNwbGljZSBpbiB0aGUg dmFsdWVzIHNpbmNlIHRoZSBjb250ZXh0IGNvZGUgaGFzIGEKLSAgICAgICAgICAgICAgICAvL2xv Y2FsIHZhciByZWYgdG8gZGVmUXVldWUsIHNvIGNhbm5vdCBqdXN0IHJlYXNzaWduIHRoZSBvbmUK LSAgICAgICAgICAgICAgICAvL29uIGNvbnRleHQuCi0gICAgICAgICAgICAgICAgYXBzcC5hcHBs eShkZWZRdWV1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZRdWV1ZS5sZW5ndGgs IDBdLmNvbmNhdChnbG9iYWxEZWZRdWV1ZSkpOworICAgICAgICAgICAgICAgIGVhY2goZ2xvYmFs RGVmUXVldWUsIGZ1bmN0aW9uKHF1ZXVlSXRlbSkgeworICAgICAgICAgICAgICAgICAgICB2YXIg aWQgPSBxdWV1ZUl0ZW1bMF07CisgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaWQgPT09 ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFw W2lkXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ZGVmUXVldWUucHVzaChxdWV1ZUl0ZW0pOworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg ICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW107CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg LTU5OCw3ICs1OTUsNyBAQCB2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CiAgICAgICAg ICAgICAgICAgICAgICAgICBpZDogbW9kLm1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAg IHVyaTogbW9kLm1hcC51cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGZ1bmN0 aW9uICgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIGdldE93bihjb25m aWcuY29uZmlnLCBtb2QubWFwLmlkKSB8fCB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gZ2V0T3duKGNvbmZpZy5jb25maWcsIG1vZC5tYXAuaWQpIHx8IHt9OwogICAgICAg ICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IG1v ZC5leHBvcnRzIHx8IChtb2QuZXhwb3J0cyA9IHt9KQogICAgICAgICAgICAgICAgICAgICB9KTsK QEAgLTg1NCw3ICs4NTEsMTAgQEAgdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwogICAg ICAgICAgICAgICAgICAgICBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5OwogCiAgICAgICAgICAgICAg ICAgaWYgKCF0aGlzLmluaXRlZCkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoKCk7 CisgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZmV0Y2ggaWYgbm90IGFscmVhZHkgaW4gdGhl IGRlZlF1ZXVlLgorICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoY29udGV4dC5kZWZR dWV1ZU1hcCwgaWQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoKCk7Cisg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXJy b3IpIHsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMuZXJyb3Ip OwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGVmaW5pbmcpIHsKQEAgLTkxNCw3 ICs5MTQsMTEgQEAgdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRlZmluZWRbaWRdID0gZXhwb3J0czsKIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChyZXEub25SZXNvdXJjZUxvYWQpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVxLm9uUmVzb3VyY2VMb2FkKGNvbnRleHQsIHRoaXMubWFwLCB0aGlz LmRlcE1hcHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzTG9hZE1h cHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh0aGlzLmRlcE1h cHMsIGZ1bmN0aW9uIChkZXBNYXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlc0xvYWRNYXBzLnB1c2goZGVwTWFwLm5vcm1hbGl6ZWRNYXAgfHwgZGVwTWFwKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlcS5vblJlc291cmNlTG9hZChjb250ZXh0LCB0aGlzLm1hcCwgcmVzTG9hZE1h cHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg ICAgIH0KIApAQCAtOTYyLDE3ICs5NjYsMTkgQEAgdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVm aW5lOwogICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAudW5ub3JtYWxpemVkKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgSUQgaWYgdGhlIHBsdWdpbiBh bGxvd3MgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLm5vcm1hbGl6ZSkg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4ubm9ybWFsaXplKG5h bWUsIGZ1bmN0aW9uIChfbmFtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gbm9ybWFsaXplKF9uYW1lLCBwYXJlbnROYW1lLCB0cnVlKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuYW1lID0gcGx1Z2luLm5vcm1hbGl6ZShuYW1lLCBmdW5jdGlvbiAobmFt ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5h bWUsIHBhcmVudE5hbWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHx8 ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAg ICAvL3ByZWZpeCBhbmQgbmFtZSBzaG91bGQgYWxyZWFkeSBiZSBub3JtYWxpemVkLCBubyBuZWVk CiAgICAgICAgICAgICAgICAgICAgICAgICAvL2ZvciBhcHBseWluZyBtYXAgY29uZmlnIGFnYWlu IGVpdGhlci4KICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXAgPSBtYWtlTW9k dWxlTWFwKG1hcC5wcmVmaXggKyAnIScgKyBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAucGFyZW50TWFwKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFw LnBhcmVudE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgb24obm9ybWFsaXplZE1h cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVu Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFw Lm5vcm1hbGl6ZWRNYXAgPSBub3JtYWxpemVkTWFwOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxs LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlOiB0cnVlCkBAIC0xMTI2 LDYgKzExMzIsOSBAQCB2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CiAgICAgICAgICAg ICAgICAgICAgICAgICB0aGlzLmRlcENvdW50ICs9IDE7CiAKICAgICAgICAgICAgICAgICAgICAg ICAgIG9uKGRlcE1hcCwgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChkZXBFeHBvcnRz KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5kZWZlZCkgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRGVwKGks IGRlcEV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsK ICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKQEAgLTEyNDIsMTMgKzEyNTEsMTUgQEAgdmFy IHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwogICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVl Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwogICAg ICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAg IHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbWlzbWF0Y2gnLCAnTWlzbWF0Y2hlZCBhbm9ueW1v dXMgZGVmaW5lKCkgbW9kdWxlOiAnICsgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7CisgICAgICAg ICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbWlzbWF0Y2gnLCAnTWlzbWF0 Y2hlZCBhbm9ueW1vdXMgZGVmaW5lKCkgbW9kdWxlOiAnICsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgICAgICAgICAgIC8vYXJncyBhcmUgaWQsIGRlcHMsIGZhY3RvcnkuIFNob3VsZCBi ZSBub3JtYWxpemVkIGJ5IHRoZQogICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSgpIGZ1bmN0 aW9uLgogICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKGFyZ3MpOwogICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXAg PSB7fTsKICAgICAgICAgfQogCiAgICAgICAgIGNvbnRleHQgPSB7CkBAIC0xMjU4LDYgKzEyNjks NyBAQCB2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CiAgICAgICAgICAgICBkZWZpbmVk OiBkZWZpbmVkLAogICAgICAgICAgICAgdXJsRmV0Y2hlZDogdXJsRmV0Y2hlZCwKICAgICAgICAg ICAgIGRlZlF1ZXVlOiBkZWZRdWV1ZSwKKyAgICAgICAgICAgIGRlZlF1ZXVlTWFwOiB7fSwKICAg ICAgICAgICAgIE1vZHVsZTogTW9kdWxlLAogICAgICAgICAgICAgbWFrZU1vZHVsZU1hcDogbWFr ZU1vZHVsZU1hcCwKICAgICAgICAgICAgIG5leHRUaWNrOiByZXEubmV4dFRpY2ssCkBAIC0xMjY3 LDE0ICsxMjc5LDIyIEBAIHZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKICAgICAgICAg ICAgICAqIFNldCBhIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250ZXh0LgogICAgICAgICAgICAg ICogQHBhcmFtIHtPYmplY3R9IGNmZyBjb25maWcgb2JqZWN0IHRvIGludGVncmF0ZS4KICAgICAg ICAgICAgICAqLwotICAgICAgICAgICAgY29uZmlndXJlOiBmdW5jdGlvbiAoX2NmZykgeworICAg ICAgICAgICAgY29uZmlndXJlOiBmdW5jdGlvbiAoY2ZnKSB7CiAgICAgICAgICAgICAgICAgLy9N YWtlIHN1cmUgdGhlIGJhc2VVcmwgZW5kcyBpbiBhIHNsYXNoLgotICAgICAgICAgICAgICAgIGlm IChfY2ZnLmJhc2VVcmwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKF9jZmcuYmFzZVVybC5j aGFyQXQoX2NmZy5iYXNlVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIF9jZmcuYmFzZVVybCArPSAnLyc7CisgICAgICAgICAgICAgICAgaWYgKGNmZy5i YXNlVXJsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybC5jaGFyQXQoY2Zn LmJhc2VVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykgeworICAgICAgICAgICAgICAgICAgICAgICAg Y2ZnLmJhc2VVcmwgKz0gJy8nOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgfQogCisgICAgICAgICAgICAgICAgLy8gQ29udmVydCBvbGQgc3R5bGUgdXJsQXJncyBzdHJp bmcgdG8gYSBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNmZy51cmxBcmdz ID09PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAgICB2YXIgdXJsQXJncyA9IGNmZy51 cmxBcmdzOworICAgICAgICAgICAgICAgICAgICBjZmcudXJsQXJncyA9IGZ1bmN0aW9uKGlkLCB1 cmwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodXJsLmluZGV4T2YoJz8nKSA9 PT0gLTEgPyAnPycgOiAnJicpICsgdXJsQXJnczsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAg ICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAvL1NhdmUgb2ZmIHRoZSBwYXRocyBz aW5jZSB0aGV5IHJlcXVpcmUgc3BlY2lhbCBwcm9jZXNzaW5nLAogICAgICAgICAgICAgICAgIC8v dGhleSBhcmUgYWRkaXRpdmUuCiAgICAgICAgICAgICAgICAgdmFyIHNoaW0gPSBjb25maWcuc2hp bSwKQEAgLTEyODUsNyArMTMwNSw3IEBAIHZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsK ICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDogdHJ1ZQogICAgICAgICAgICAgICAgICAgICB9 OwogCi0gICAgICAgICAgICAgICAgZWFjaFByb3AoX2NmZywgZnVuY3Rpb24gKHZhbHVlLCBwcm9w KSB7CisgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLCBmdW5jdGlvbiAodmFsdWUsIHByb3Ap IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG9ianNbcHJvcF0pIHsKICAgICAgICAgICAgICAg ICAgICAgICAgIGlmICghY29uZmlnW3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uZmlnW3Byb3BdID0ge307CkBAIC0xMjk3LDggKzEzMTcsOCBAQCB2YXIgcmVxdWlyZWpz LCByZXF1aXJlLCBkZWZpbmU7CiAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgICAg ICAvL1JldmVyc2UgbWFwIHRoZSBidW5kbGVzCi0gICAgICAgICAgICAgICAgaWYgKF9jZmcuYnVu ZGxlcykgewotICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChfY2ZnLmJ1bmRsZXMsIGZ1bmN0 aW9uICh2YWx1ZSwgcHJvcCkgeworICAgICAgICAgICAgICAgIGlmIChjZmcuYnVuZGxlcykgewor ICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcuYnVuZGxlcywgZnVuY3Rpb24gKHZhbHVl LCBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLCBmdW5jdGlvbiAo dikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBwcm9wKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXNNYXBbdl0gPSBwcm9wOwpAQCAtMTMw OCw4ICsxMzI4LDggQEAgdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwogICAgICAgICAg ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vTWVyZ2Ugc2hpbQotICAgICAgICAgICAgICAg IGlmIChfY2ZnLnNoaW0pIHsKLSAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoX2NmZy5zaGlt LCBmdW5jdGlvbiAodmFsdWUsIGlkKSB7CisgICAgICAgICAgICAgICAgaWYgKGNmZy5zaGltKSB7 CisgICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZy5zaGltLCBmdW5jdGlvbiAodmFsdWUs IGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgc3RydWN0dXJl CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHsKQEAgLTEzMjUsMTEgKzEzNDUsMTEgQEAgdmFy IHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAg ICAgICAgICAgIC8vQWRqdXN0IHBhY2thZ2VzIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAg ICBpZiAoX2NmZy5wYWNrYWdlcykgewotICAgICAgICAgICAgICAgICAgICBlYWNoKF9jZmcucGFj a2FnZXMsIGZ1bmN0aW9uIChwa2dPYmopIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ZnLnBhY2th Z2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGVhY2goY2ZnLnBhY2thZ2VzLCBmdW5jdGlvbiAo cGtnT2JqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24sIG5hbWU7CiAK LSAgICAgICAgICAgICAgICAgICAgICAgIHBrZ09iaiA9IHR5cGVvZiBwa2dPYmogPT09ICdzdHJp bmcnID8geyBuYW1lOiBwa2dPYmogfSA6IHBrZ09iajsKKyAgICAgICAgICAgICAgICAgICAgICAg IHBrZ09iaiA9IHR5cGVvZiBwa2dPYmogPT09ICdzdHJpbmcnID8ge25hbWU6IHBrZ09ian0gOiBw a2dPYmo7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwa2dPYmoubmFtZTsKICAg ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGtnT2JqLmxvY2F0aW9uOwpAQCAtMTM1 NiwxNSArMTM3NiwxNSBAQCB2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CiAgICAgICAg ICAgICAgICAgICAgIC8vbGF0ZSB0byBtb2RpZnkgdGhlbSwgYW5kIGlnbm9yZSB1bm5vcm1hbGl6 ZWQgb25lcwogICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgYXJlIHRyYW5zaWVudC4K ICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2QuaW5pdGVkICYmICFtb2QubWFwLnVubm9ybWFs aXplZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbW9kLm1hcCA9IG1ha2VNb2R1bGVNYXAo aWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbW9kLm1hcCA9IG1ha2VNb2R1bGVNYXAoaWQs IG51bGwsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7 CiAKICAgICAgICAgICAgICAgICAvL0lmIGEgZGVwcyBhcnJheSBvciBhIGNvbmZpZyBjYWxsYmFj ayBpcyBzcGVjaWZpZWQsIHRoZW4gY2FsbAogICAgICAgICAgICAgICAgIC8vcmVxdWlyZSB3aXRo IHRob3NlIGFyZ3MuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcmVxdWlyZSBpcyBkZWZpbmVkIGFzIGEK ICAgICAgICAgICAgICAgICAvL2NvbmZpZyBvYmplY3QgYmVmb3JlIHJlcXVpcmUuanMgaXMgbG9h ZGVkLgotICAgICAgICAgICAgICAgIGlmIChfY2ZnLmRlcHMgfHwgX2NmZy5jYWxsYmFjaykgewot ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUoX2NmZy5kZXBzIHx8IFtdLCBfY2Zn LmNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICBpZiAoY2ZnLmRlcHMgfHwgY2ZnLmNhbGxiYWNr KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZShjZmcuZGVwcyB8fCBbXSwg Y2ZnLmNhbGxiYWNrKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9LAogCkBAIC0x NDkyLDYgKzE1MTIsNyBAQCB2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CiAgICAgICAg ICAgICAgICAgICAgICAgICB2YXIgbWFwID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCB0cnVl KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlk KTsKIAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kLnVuZGVmZWQgPSB0cnVlOwogICAgICAg ICAgICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KGlkKTsKIAogICAgICAgICAgICAgICAgICAg ICAgICAgZGVsZXRlIGRlZmluZWRbaWRdOwpAQCAtMTUwMiwxMCArMTUyMywxMSBAQCB2YXIgcmVx dWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CiAgICAgICAgICAgICAgICAgICAgICAgICAvL2luIGFy cmF5IHNvIHRoYXQgdGhlIHNwbGljZXMgZG8gbm90CiAgICAgICAgICAgICAgICAgICAgICAgICAv L21lc3MgdXAgdGhlIGl0ZXJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hSZXZl cnNlKGRlZlF1ZXVlLCBmdW5jdGlvbihhcmdzLCBpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYoYXJnc1swXSA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoYXJnc1swXSA9PT0gaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm UXVldWUuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNv bnRleHQuZGVmUXVldWVNYXBbaWRdOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9k KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Ib2xkIG9uIHRvIGxpc3RlbmVycyBp biBjYXNlIHRoZQpAQCAtMTU2Nyw2ICsxNTg5LDcgQEAgdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwg ZGVmaW5lOwogCiAgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7CiAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXAgPSB7fTsK IAogICAgICAgICAgICAgICAgIC8vRG8gdGhpcyBhZnRlciB0aGUgY3ljbGUgb2YgY2FsbEdldE1v ZHVsZSBpbiBjYXNlIHRoZSByZXN1bHQKICAgICAgICAgICAgICAgICAvL29mIHRob3NlIGNhbGxz L2luaXQgY2FsbHMgY2hhbmdlcyB0aGUgcmVnaXN0cnkuCkBAIC0xNjQ4LDEzICsxNjcxLDEyIEBA IHZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKIAogICAgICAgICAgICAgICAgICAgICAv L0pvaW4gdGhlIHBhdGggcGFydHMgdG9nZXRoZXIsIHRoZW4gZmlndXJlIG91dCBpZiBiYXNlVXJs IGlzIG5lZWRlZC4KICAgICAgICAgICAgICAgICAgICAgdXJsID0gc3ltcy5qb2luKCcvJyk7Ci0g ICAgICAgICAgICAgICAgICAgIHVybCArPSAoZXh0IHx8ICgvXmRhdGFcOnxcPy8udGVzdCh1cmwp IHx8IHNraXBFeHQgPyAnJyA6ICcuanMnKSk7CisgICAgICAgICAgICAgICAgICAgIHVybCArPSAo ZXh0IHx8ICgvXmRhdGFcOnxeYmxvYlw6fFw/Ly50ZXN0KHVybCkgfHwgc2tpcEV4dCA/ICcnIDog Jy5qcycpKTsKICAgICAgICAgICAgICAgICAgICAgdXJsID0gKHVybC5jaGFyQXQoMCkgPT09ICcv JyB8fCB1cmwubWF0Y2goL15bXHdcK1wuXC1dKzovKSA/ICcnIDogY29uZmlnLmJhc2VVcmwpICsg dXJsOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcu dXJsQXJncyA/IHVybCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KCh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcudXJsQXJncykgOiB1cmw7CisgICAgICAg ICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmxBcmdzICYmICEvXmJsb2JcOi8udGVzdCh1cmwpID8K KyAgICAgICAgICAgICAgICAgICAgICAgdXJsICsgY29uZmlnLnVybEFyZ3MobW9kdWxlTmFtZSwg dXJsKSA6IHVybDsKICAgICAgICAgICAgIH0sCiAKICAgICAgICAgICAgIC8vRGVsZWdhdGVzIHRv IHJlcS5sb2FkLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8KQEAgLTE3MDIs NyArMTcyNCwyMSBAQCB2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CiAgICAgICAgICAg ICBvblNjcmlwdEVycm9yOiBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgICAgICAgdmFyIGRh dGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7CiAgICAgICAgICAgICAgICAgaWYgKCFoYXNQYXRoRmFs bGJhY2soZGF0YS5pZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFr ZUVycm9yKCdzY3JpcHRlcnJvcicsICdTY3JpcHQgZXJyb3IgZm9yOiAnICsgZGF0YS5pZCwgZXZ0 LCBbZGF0YS5pZF0pKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudHMgPSBbXTsKKyAg ICAgICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uKHZhbHVlLCBrZXkp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignX0ByJykgIT09IDAp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLmRlcE1hcHMsIGZ1bmN0 aW9uKGRlcE1hcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwTWFw LmlkID09PSBkYXRhLmlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw YXJlbnRzLnB1c2goa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtl RXJyb3IoJ3NjcmlwdGVycm9yJywgJ1NjcmlwdCBlcnJvciBmb3IgIicgKyBkYXRhLmlkICsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJlbnRzLmxlbmd0 aCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiwgbmVl ZGVkIGJ5OiAnICsgcGFyZW50cy5qb2luKCcsICcpIDoKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICciJyksIGV2dCwgW2RhdGEuaWRdKSk7CiAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9OwpAQCAtMTg3NiwxMSArMTkxMiwxMSBA QCB2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CiAgICAgICAgICAgICBpZiAobm9kZS5h dHRhY2hFdmVudCAmJgogICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGlmIG5vZGUuYXR0YWNo RXZlbnQgaXMgYXJ0aWZpY2lhbGx5IGFkZGVkIGJ5IGN1c3RvbSBzY3JpcHQgb3IKICAgICAgICAg ICAgICAgICAgICAgLy9uYXRpdmVseSBzdXBwb3J0ZWQgYnkgYnJvd3NlcgotICAgICAgICAgICAg ICAgICAgICAvL3JlYWQgaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL2lzc3Vl cy8xODcKKyAgICAgICAgICAgICAgICAgICAgLy9yZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1 aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8xODcKICAgICAgICAgICAgICAgICAgICAgLy9pZiB3ZSBj YW4gTk9UIGZpbmQgW25hdGl2ZSBjb2RlXSB0aGVuIGl0IG11c3QgTk9UIG5hdGl2ZWx5IHN1cHBv cnRlZC4KICAgICAgICAgICAgICAgICAgICAgLy9pbiBJRTgsIG5vZGUuYXR0YWNoRXZlbnQgZG9l cyBub3QgaGF2ZSB0b1N0cmluZygpCiAgICAgICAgICAgICAgICAgICAgIC8vTm90ZSB0aGUgdGVz dCBmb3IgIltuYXRpdmUgY29kZSIgd2l0aCBubyBjbG9zaW5nIGJyYWNlLCBzZWU6Ci0gICAgICAg ICAgICAgICAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL2lzc3Vl cy8yNzMKKyAgICAgICAgICAgICAgICAgICAgLy9odHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpz L3JlcXVpcmVqcy9pc3N1ZXMvMjczCiAgICAgICAgICAgICAgICAgICAgICEobm9kZS5hdHRhY2hF dmVudC50b1N0cmluZyAmJiBub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nKCkuaW5kZXhPZignW25h dGl2ZSBjb2RlJykgPCAwKSAmJgogICAgICAgICAgICAgICAgICAgICAhaXNPcGVyYSkgewogICAg ICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElFIChhdCBsZWFzdCA2LTgpIGRvIG5vdCBmaXJl CkBAIC0xOTA4LDYgKzE5NDQsMTIgQEAgdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwog ICAgICAgICAgICAgfQogICAgICAgICAgICAgbm9kZS5zcmMgPSB1cmw7CiAKKyAgICAgICAgICAg IC8vQ2FsbGluZyBvbk5vZGVDcmVhdGVkIGFmdGVyIGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBub2Rl IGhhdmUgYmVlbgorICAgICAgICAgICAgLy9zZXQsIGJ1dCBiZWZvcmUgaXQgaXMgcGxhY2VkIGlu IHRoZSBET00uCisgICAgICAgICAgICBpZiAoY29uZmlnLm9uTm9kZUNyZWF0ZWQpIHsKKyAgICAg ICAgICAgICAgICBjb25maWcub25Ob2RlQ3JlYXRlZChub2RlLCBjb25maWcsIG1vZHVsZU5hbWUs IHVybCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vRm9yIHNvbWUgY2FjaGUgY2Fz ZXMgaW4gSUUgNi04LCB0aGUgc2NyaXB0IGV4ZWN1dGVzIGJlZm9yZSB0aGUgZW5kCiAgICAgICAg ICAgICAvL29mIHRoZSBhcHBlbmRDaGlsZCBleGVjdXRpb24sIHNvIHRvIHRpZSBhbiBhbm9ueW1v dXMgZGVmaW5lCiAgICAgICAgICAgICAvL2NhbGwgdG8gdGhlIG1vZHVsZSBuYW1lICh3aGljaCBp cyBzdG9yZWQgb24gdGhlIG5vZGUpLCBob2xkIG9uCkBAIC0xOTI2LDkgKzE5NjgsMTQgQEAgdmFy IHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwogICAgICAgICAgICAgICAgIC8vSW4gYSB3ZWIg d29ya2VyLCB1c2UgaW1wb3J0U2NyaXB0cy4gVGhpcyBpcyBub3QgYSB2ZXJ5CiAgICAgICAgICAg ICAgICAgLy9lZmZpY2llbnQgdXNlIG9mIGltcG9ydFNjcmlwdHMsIGltcG9ydFNjcmlwdHMgd2ls bCBibG9jayB1bnRpbAogICAgICAgICAgICAgICAgIC8vaXRzIHNjcmlwdCBpcyBkb3dubG9hZGVk IGFuZCBldmFsdWF0ZWQuIEhvd2V2ZXIsIGlmIHdlYiB3b3JrZXJzCi0gICAgICAgICAgICAgICAg Ly9hcmUgaW4gcGxheSwgdGhlIGV4cGVjdGF0aW9uIHRoYXQgYSBidWlsZCBoYXMgYmVlbiBkb25l IHNvIHRoYXQKLSAgICAgICAgICAgICAgICAvL29ubHkgb25lIHNjcmlwdCBuZWVkcyB0byBiZSBs b2FkZWQgYW55d2F5LiBUaGlzIG1heSBuZWVkIHRvIGJlCi0gICAgICAgICAgICAgICAgLy9yZWV2 YWx1YXRlZCBpZiBvdGhlciB1c2UgY2FzZXMgYmVjb21lIGNvbW1vbi4KKyAgICAgICAgICAgICAg ICAvL2FyZSBpbiBwbGF5LCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCBhIGJ1aWxkIGhhcyBiZWVu IGRvbmUgc28KKyAgICAgICAgICAgICAgICAvL3RoYXQgb25seSBvbmUgc2NyaXB0IG5lZWRzIHRv IGJlIGxvYWRlZCBhbnl3YXkuIFRoaXMgbWF5IG5lZWQKKyAgICAgICAgICAgICAgICAvL3RvIGJl IHJlZXZhbHVhdGVkIGlmIG90aGVyIHVzZSBjYXNlcyBiZWNvbWUgY29tbW9uLgorCisgICAgICAg ICAgICAgICAgLy8gUG9zdCBhIHRhc2sgdG8gdGhlIGV2ZW50IGxvb3AgdG8gd29yayBhcm91bmQg YSBidWcgaW4gV2ViS2l0CisgICAgICAgICAgICAgICAgLy8gd2hlcmUgdGhlIHdvcmtlciBnZXRz IGdhcmJhZ2UtY29sbGVjdGVkIGFmdGVyIGNhbGxpbmcKKyAgICAgICAgICAgICAgICAvLyBpbXBv cnRTY3JpcHRzKCk6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MzMxNworICAgICAgICAgICAgICAg IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7fSwgMCk7CiAgICAgICAgICAgICAgICAgaW1wb3J0U2Ny aXB0cyh1cmwpOwogCiAgICAgICAgICAgICAgICAgLy9BY2NvdW50IGZvciBhbm9ueW1vdXMgbW9k dWxlcwpAQCAtMTk3NCw4ICsyMDIxLDEwIEBAIHZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmlu ZTsKICAgICAgICAgICAgICAgICAvL1ByZXNlcnZlIGRhdGFNYWluIGluIGNhc2UgaXQgaXMgYSBw YXRoIChpLmUuIGNvbnRhaW5zICc/JykKICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gZGF0 YU1haW47CiAKLSAgICAgICAgICAgICAgICAvL1NldCBmaW5hbCBiYXNlVXJsIGlmIHRoZXJlIGlz IG5vdCBhbHJlYWR5IGFuIGV4cGxpY2l0IG9uZS4KLSAgICAgICAgICAgICAgICBpZiAoIWNmZy5i YXNlVXJsKSB7CisgICAgICAgICAgICAgICAgLy9TZXQgZmluYWwgYmFzZVVybCBpZiB0aGVyZSBp cyBub3QgYWxyZWFkeSBhbiBleHBsaWNpdCBvbmUsCisgICAgICAgICAgICAgICAgLy9idXQgb25s eSBkbyBzbyBpZiB0aGUgZGF0YS1tYWluIHZhbHVlIGlzIG5vdCBhIGxvYWRlciBwbHVnaW4KKyAg ICAgICAgICAgICAgICAvL21vZHVsZSBJRC4KKyAgICAgICAgICAgICAgICBpZiAoIWNmZy5iYXNl VXJsICYmIG1haW5TY3JpcHQuaW5kZXhPZignIScpID09PSAtMSkgewogICAgICAgICAgICAgICAg ICAgICAvL1B1bGwgb2ZmIHRoZSBkaXJlY3Rvcnkgb2YgZGF0YS1tYWluIGZvciB1c2UgYXMgdGhl CiAgICAgICAgICAgICAgICAgICAgIC8vYmFzZVVybC4KICAgICAgICAgICAgICAgICAgICAgc3Jj ID0gbWFpblNjcmlwdC5zcGxpdCgnLycpOwpAQCAtMTk4OSw3ICsyMDM4LDcgQEAgdmFyIHJlcXVp cmVqcywgcmVxdWlyZSwgZGVmaW5lOwogICAgICAgICAgICAgICAgIC8vbGlrZSBhIG1vZHVsZSBu YW1lLgogICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBtYWluU2NyaXB0LnJlcGxhY2UoanNT dWZmaXhSZWdFeHAsICcnKTsKIAotICAgICAgICAgICAgICAgICAvL0lmIG1haW5TY3JpcHQgaXMg c3RpbGwgYSBwYXRoLCBmYWxsIGJhY2sgdG8gZGF0YU1haW4KKyAgICAgICAgICAgICAgICAvL0lm IG1haW5TY3JpcHQgaXMgc3RpbGwgYSBwYXRoLCBmYWxsIGJhY2sgdG8gZGF0YU1haW4KICAgICAg ICAgICAgICAgICBpZiAocmVxLmpzRXh0UmVnRXhwLnRlc3QobWFpblNjcmlwdCkpIHsKICAgICAg ICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOwogICAgICAgICAgICAgICAgIH0K QEAgLTIwMzYsNyArMjA4NSw3IEBAIHZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKICAg ICAgICAgICAgIGlmIChjYWxsYmFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICBjYWxsYmFj awogICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICAgICAu cmVwbGFjZShjb21tZW50UmVnRXhwLCAnJykKKyAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2Uo Y29tbWVudFJlZ0V4cCwgY29tbWVudFJlcGxhY2UpCiAgICAgICAgICAgICAgICAgICAgIC5yZXBs YWNlKGNqc1JlcXVpcmVSZWdFeHAsIGZ1bmN0aW9uIChtYXRjaCwgZGVwKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICBkZXBzLnB1c2goZGVwKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBA IC0yMDY4LDE0ICsyMTE3LDE4IEBAIHZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKICAg ICAgICAgLy93aGVyZSB0aGUgbW9kdWxlIG5hbWUgaXMgbm90IGtub3duIHVudGlsIHRoZSBzY3Jp cHQgb25sb2FkIGV2ZW50CiAgICAgICAgIC8vb2NjdXJzLiBJZiBubyBjb250ZXh0LCB1c2UgdGhl IGdsb2JhbCBxdWV1ZSwgYW5kIGdldCBpdCBwcm9jZXNzZWQKICAgICAgICAgLy9pbiB0aGUgb25z Y3JpcHQgbG9hZCBjYWxsYmFjay4KLSAgICAgICAgKGNvbnRleHQgPyBjb250ZXh0LmRlZlF1ZXVl IDogZ2xvYmFsRGVmUXVldWUpLnB1c2goW25hbWUsIGRlcHMsIGNhbGxiYWNrXSk7CisgICAgICAg IGlmIChjb250ZXh0KSB7CisgICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlLnB1c2goW25hbWUs IGRlcHMsIGNhbGxiYWNrXSk7CisgICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwW25hbWVd ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlLnB1 c2goW25hbWUsIGRlcHMsIGNhbGxiYWNrXSk7CisgICAgICAgIH0KICAgICB9OwogCiAgICAgZGVm aW5lLmFtZCA9IHsKICAgICAgICAgalF1ZXJ5OiB0cnVlCiAgICAgfTsKIAotCiAgICAgLyoqCiAg ICAgICogRXhlY3V0ZXMgdGhlIHRleHQuIE5vcm1hbGx5IGp1c3QgdXNlcyBldmFsLCBidXQgY2Fu IGJlIG1vZGlmaWVkCiAgICAgICogdG8gdXNlIGEgYmV0dGVyLCBlbnZpcm9ubWVudC1zcGVjaWZp YyBjYWxsLiBPbmx5IHVzZWQgZm9yIHRyYW5zcGlsaW5nCkBAIC0yMDg5LDQgKzIxNDIsNCBAQCB2 YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CiAKICAgICAvL1NldCB1cCB3aXRoIGNvbmZp ZyBpbmZvLgogICAgIHJlcShjZmcpOwotfSh0aGlzKSk7Cit9KHRoaXMsICh0eXBlb2Ygc2V0VGlt ZW91dCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBzZXRUaW1lb3V0KSkpOwpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9yZXF1aXJlL3JlcXVpcmUubWluLmpzIGIv d2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9yZXF1aXJlL3JlcXVpcmUubWluLmpzCmluZGV4IGJm NDJiMjRkNC4uODIwZjZmNDEyIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9y L3JlcXVpcmUvcmVxdWlyZS5taW4uanMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9y ZXF1aXJlL3JlcXVpcmUubWluLmpzCkBAIC0xLDQ1ICsxLDkgQEAKLS8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBwZ0Fk bWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCi0vLwotLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAy MSwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQotLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxl YXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLyoKLSBSZXF1 aXJlSlMgMi4xLjE3IENvcHlyaWdodCAoYykgMjAxMC0yMDE1LCBUaGUgRG9qbyBGb3VuZGF0aW9u IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gQXZhaWxhYmxlIHZpYSB0aGUgTUlUIG9yIG5ldyBCU0Qg bGljZW5zZS4KLSBzZWU6IGh0dHA6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzIGZvciBk ZXRhaWxzCi0qLwotdmFyIHJlcXVpcmVqcyxyZXF1aXJlLGRlZmluZTsKLShmdW5jdGlvbihiYSl7 ZnVuY3Rpb24gRyhiKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09Sy5jYWxsKGIpfWZ1bmN0 aW9uIEgoYil7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PUsuY2FsbChiKX1mdW5jdGlvbiB2KGIs Yyl7aWYoYil7dmFyIGQ7Zm9yKGQ9MDtkPGIubGVuZ3RoJiYoIWJbZF18fCFjKGJbZF0sZCxiKSk7 ZCs9MSk7fX1mdW5jdGlvbiBUKGIsYyl7aWYoYil7dmFyIGQ7Zm9yKGQ9Yi5sZW5ndGgtMTstMTxk JiYoIWJbZF18fCFjKGJbZF0sZCxiKSk7ZC09MSk7fX1mdW5jdGlvbiB0KGIsYyl7cmV0dXJuIGZh LmNhbGwoYixjKX1mdW5jdGlvbiBtKGIsYyl7cmV0dXJuIHQoYixjKSYmYltjXX1mdW5jdGlvbiBC KGIsYyl7Zm9yKHZhciBkIGluIGIpaWYodChiLGQpJiZjKGJbZF0sZCkpYnJlYWt9ZnVuY3Rpb24g VShiLGMsZCxlKXtjJiZCKGMsZnVuY3Rpb24oYyxnKXtpZihkfHwhdChiLGcpKWUmJiJvYmplY3Qi PT09dHlwZW9mIGMmJmMmJiFIKGMpJiYhRyhjKSYmIShjIGluc3RhbmNlb2YKLVJlZ0V4cCk/KGJb Z118fChiW2ddPXt9KSxVKGJbZ10sYyxkLGUpKTpiW2ddPWN9KTtyZXR1cm4gYn1mdW5jdGlvbiB1 KGIsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGMuYXBwbHkoYixhcmd1bWVudHMpfX1mdW5j dGlvbiBjYShiKXt0aHJvdyBiO31mdW5jdGlvbiBkYShiKXtpZighYilyZXR1cm4gYjt2YXIgYz1i YTt2KGIuc3BsaXQoIi4iKSxmdW5jdGlvbihiKXtjPWNbYl19KTtyZXR1cm4gY31mdW5jdGlvbiBD KGIsYyxkLGUpe2M9RXJyb3IoYysiXG5odHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2Vycm9ycy5o dG1sIyIrYik7Yy5yZXF1aXJlVHlwZT1iO2MucmVxdWlyZU1vZHVsZXM9ZTtkJiYoYy5vcmlnaW5h bEVycm9yPWQpO3JldHVybiBjfWZ1bmN0aW9uIGdhKGIpe2Z1bmN0aW9uIGMoYSxrLGIpe3ZhciBm LGwsYyxkLGUsZyxpLHAsaz1rJiZrLnNwbGl0KCIvIiksaD1qLm1hcCxuPWgmJmhbIioiXTtpZihh KXthPWEuc3BsaXQoIi8iKTtsPWEubGVuZ3RoLTE7ai5ub2RlSWRDb21wYXQmJgotUS50ZXN0KGFb bF0pJiYoYVtsXT1hW2xdLnJlcGxhY2UoUSwiIikpOyIuIj09PWFbMF0uY2hhckF0KDApJiZrJiYo bD1rLnNsaWNlKDAsay5sZW5ndGgtMSksYT1sLmNvbmNhdChhKSk7bD1hO2ZvcihjPTA7YzxsLmxl bmd0aDtjKyspaWYoZD1sW2NdLCIuIj09PWQpbC5zcGxpY2UoYywxKSxjLT0xO2Vsc2UgaWYoIi4u Ij09PWQmJiEoMD09PWN8fDE9PT1jJiYiLi4iPT09bFsyXXx8Ii4uIj09PWxbYy0xXSkmJjA8Yyls LnNwbGljZShjLTEsMiksYy09MjthPWEuam9pbigiLyIpfWlmKGImJmgmJihrfHxuKSl7bD1hLnNw bGl0KCIvIik7Yz1sLmxlbmd0aDthOmZvcig7MDxjO2MtPTEpe2U9bC5zbGljZSgwLGMpLmpvaW4o Ii8iKTtpZihrKWZvcihkPWsubGVuZ3RoOzA8ZDtkLT0xKWlmKGI9bShoLGsuc2xpY2UoMCxkKS5q b2luKCIvIikpKWlmKGI9bShiLGUpKXtmPWI7Zz1jO2JyZWFrIGF9IWkmJihuJiZtKG4sZSkpJiYo aT1tKG4sZSkscD1jKX0hZiYmaSYmKGY9aSxnPXApO2YmJihsLnNwbGljZSgwLAotZyxmKSxhPWwu am9pbigiLyIpKX1yZXR1cm4oZj1tKGoucGtncyxhKSk/ZjphfWZ1bmN0aW9uIGQoYSl7eiYmdihk b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksZnVuY3Rpb24oayl7aWYoay5n ZXRBdHRyaWJ1dGUoImRhdGEtcmVxdWlyZW1vZHVsZSIpPT09YSYmay5nZXRBdHRyaWJ1dGUoImRh dGEtcmVxdWlyZWNvbnRleHQiKT09PWkuY29udGV4dE5hbWUpcmV0dXJuIGsucGFyZW50Tm9kZS5y ZW1vdmVDaGlsZChrKSwhMH0pfWZ1bmN0aW9uIGUoYSl7dmFyIGs9bShqLnBhdGhzLGEpO2lmKGsm JkgoaykmJjE8ay5sZW5ndGgpcmV0dXJuIGsuc2hpZnQoKSxpLnJlcXVpcmUudW5kZWYoYSksaS5t YWtlUmVxdWlyZShudWxsLHtza2lwTWFwOiEwfSkoW2FdKSwhMH1mdW5jdGlvbiBuKGEpe3ZhciBr LGM9YT9hLmluZGV4T2YoIiEiKTotMTstMTxjJiYoaz1hLnN1YnN0cmluZygwLGMpLGE9YS5zdWJz dHJpbmcoYysxLGEubGVuZ3RoKSk7cmV0dXJuW2ssYV19ZnVuY3Rpb24gcChhLAotayxiLGYpe3Zh ciBsLGQsZT1udWxsLGc9az9rLm5hbWU6bnVsbCxqPWEscD0hMCxoPSIiO2F8fChwPSExLGE9Il9A ciIrKEsrPTEpKTthPW4oYSk7ZT1hWzBdO2E9YVsxXTtlJiYoZT1jKGUsZyxmKSxkPW0ocixlKSk7 YSYmKGU/aD1kJiZkLm5vcm1hbGl6ZT9kLm5vcm1hbGl6ZShhLGZ1bmN0aW9uKGEpe3JldHVybiBj KGEsZyxmKX0pOi0xPT09YS5pbmRleE9mKCIhIik/YyhhLGcsZik6YTooaD1jKGEsZyxmKSxhPW4o aCksZT1hWzBdLGg9YVsxXSxiPSEwLGw9aS5uYW1lVG9VcmwoaCkpKTtiPWUmJiFkJiYhYj8iX3Vu bm9ybWFsaXplZCIrKE8rPTEpOiIiO3JldHVybntwcmVmaXg6ZSxuYW1lOmgscGFyZW50TWFwOmss dW5ub3JtYWxpemVkOiEhYix1cmw6bCxvcmlnaW5hbE5hbWU6aixpc0RlZmluZTpwLGlkOihlP2Ur IiEiK2g6aCkrYn19ZnVuY3Rpb24gcyhhKXt2YXIgaz1hLmlkLGI9bShoLGspO2J8fChiPWhba109 bmV3IGkuTW9kdWxlKGEpKTtyZXR1cm4gYn1mdW5jdGlvbiBxKGEsCi1rLGIpe3ZhciBmPWEuaWQs Yz1tKGgsZik7aWYodChyLGYpJiYoIWN8fGMuZGVmaW5lRW1pdENvbXBsZXRlKSkiZGVmaW5lZCI9 PT1rJiZiKHJbZl0pO2Vsc2UgaWYoYz1zKGEpLGMuZXJyb3ImJiJlcnJvciI9PT1rKWIoYy5lcnJv cik7ZWxzZSBjLm9uKGssYil9ZnVuY3Rpb24gdyhhLGIpe3ZhciBjPWEucmVxdWlyZU1vZHVsZXMs Zj0hMTtpZihiKWIoYSk7ZWxzZSBpZih2KGMsZnVuY3Rpb24oYil7aWYoYj1tKGgsYikpYi5lcnJv cj1hLGIuZXZlbnRzLmVycm9yJiYoZj0hMCxiLmVtaXQoImVycm9yIixhKSl9KSwhZilnLm9uRXJy b3IoYSl9ZnVuY3Rpb24geCgpe1IubGVuZ3RoJiYoaGEuYXBwbHkoQSxbQS5sZW5ndGgsMF0uY29u Y2F0KFIpKSxSPVtdKX1mdW5jdGlvbiB5KGEpe2RlbGV0ZSBoW2FdO2RlbGV0ZSBWW2FdfWZ1bmN0 aW9uIEYoYSxiLGMpe3ZhciBmPWEubWFwLmlkO2EuZXJyb3I/YS5lbWl0KCJlcnJvciIsYS5lcnJv cik6KGJbZl09ITAsdihhLmRlcE1hcHMsZnVuY3Rpb24oZiwKLWQpe3ZhciBlPWYuaWQsZz1tKGgs ZSk7ZyYmKCFhLmRlcE1hdGNoZWRbZF0mJiFjW2VdKSYmKG0oYixlKT8oYS5kZWZpbmVEZXAoZCxy W2VdKSxhLmNoZWNrKCkpOkYoZyxiLGMpKX0pLGNbZl09ITApfWZ1bmN0aW9uIEQoKXt2YXIgYSxi LGM9KGE9MUUzKmoud2FpdFNlY29uZHMpJiZpLnN0YXJ0VGltZSthPChuZXcgRGF0ZSkuZ2V0VGlt ZSgpLGY9W10sbD1bXSxnPSExLGg9ITA7aWYoIVcpe1c9ITA7QihWLGZ1bmN0aW9uKGEpe3ZhciBp PWEubWFwLGo9aS5pZDtpZihhLmVuYWJsZWQmJihpLmlzRGVmaW5lfHxsLnB1c2goYSksIWEuZXJy b3IpKWlmKCFhLmluaXRlZCYmYyllKGopP2c9Yj0hMDooZi5wdXNoKGopLGQoaikpO2Vsc2UgaWYo IWEuaW5pdGVkJiYoYS5mZXRjaGVkJiZpLmlzRGVmaW5lKSYmKGc9ITAsIWkucHJlZml4KSlyZXR1 cm4gaD0hMX0pO2lmKGMmJmYubGVuZ3RoKXJldHVybiBhPUMoInRpbWVvdXQiLCJMb2FkIHRpbWVv dXQgZm9yIG1vZHVsZXM6ICIrZixudWxsLAotZiksYS5jb250ZXh0TmFtZT1pLmNvbnRleHROYW1l LHcoYSk7aCYmdihsLGZ1bmN0aW9uKGEpe0YoYSx7fSx7fSl9KTtpZigoIWN8fGIpJiZnKWlmKCh6 fHxlYSkmJiFYKVg9c2V0VGltZW91dChmdW5jdGlvbigpe1g9MDtEKCl9LDUwKTtXPSExfX1mdW5j dGlvbiBFKGEpe3QocixhWzBdKXx8cyhwKGFbMF0sbnVsbCwhMCkpLmluaXQoYVsxXSxhWzJdKX1m dW5jdGlvbiBJKGEpe3ZhciBhPWEuY3VycmVudFRhcmdldHx8YS5zcmNFbGVtZW50LGI9aS5vblNj cmlwdExvYWQ7YS5kZXRhY2hFdmVudCYmIVk/YS5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hh bmdlIixiKTphLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGIsITEpO2I9aS5vblNjcmlwdEVy cm9yOyghYS5kZXRhY2hFdmVudHx8WSkmJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGIs ITEpO3JldHVybntub2RlOmEsaWQ6YSYmYS5nZXRBdHRyaWJ1dGUoImRhdGEtcmVxdWlyZW1vZHVs ZSIpfX1mdW5jdGlvbiBKKCl7dmFyIGE7Ci1mb3IoeCgpO0EubGVuZ3RoOyl7YT1BLnNoaWZ0KCk7 aWYobnVsbD09PWFbMF0pcmV0dXJuIHcoQygibWlzbWF0Y2giLCJNaXNtYXRjaGVkIGFub255bW91 cyBkZWZpbmUoKSBtb2R1bGU6ICIrYVthLmxlbmd0aC0xXSkpO0UoYSl9fXZhciBXLFosaSxMLFgs aj17d2FpdFNlY29uZHM6NyxiYXNlVXJsOiIuLyIscGF0aHM6e30sYnVuZGxlczp7fSxwa2dzOnt9 LHNoaW06e30sY29uZmlnOnt9fSxoPXt9LFY9e30sJD17fSxBPVtdLHI9e30sUz17fSxhYT17fSxL PTEsTz0xO0w9e3JlcXVpcmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVxdWlyZT9hLnJlcXVpcmU6 YS5yZXF1aXJlPWkubWFrZVJlcXVpcmUoYS5tYXApfSxleHBvcnRzOmZ1bmN0aW9uKGEpe2EudXNp bmdFeHBvcnRzPSEwO2lmKGEubWFwLmlzRGVmaW5lKXJldHVybiBhLmV4cG9ydHM/clthLm1hcC5p ZF09YS5leHBvcnRzOmEuZXhwb3J0cz1yW2EubWFwLmlkXT17fX0sbW9kdWxlOmZ1bmN0aW9uKGEp e3JldHVybiBhLm1vZHVsZT8KLWEubW9kdWxlOmEubW9kdWxlPXtpZDphLm1hcC5pZCx1cmk6YS5t YXAudXJsLGNvbmZpZzpmdW5jdGlvbigpe3JldHVybiBtKGouY29uZmlnLGEubWFwLmlkKXx8e319 LGV4cG9ydHM6YS5leHBvcnRzfHwoYS5leHBvcnRzPXt9KX19fTtaPWZ1bmN0aW9uKGEpe3RoaXMu ZXZlbnRzPW0oJCxhLmlkKXx8e307dGhpcy5tYXA9YTt0aGlzLnNoaW09bShqLnNoaW0sYS5pZCk7 dGhpcy5kZXBFeHBvcnRzPVtdO3RoaXMuZGVwTWFwcz1bXTt0aGlzLmRlcE1hdGNoZWQ9W107dGhp cy5wbHVnaW5NYXBzPXt9O3RoaXMuZGVwQ291bnQ9MH07Wi5wcm90b3R5cGU9e2luaXQ6ZnVuY3Rp b24oYSxiLGMsZil7Zj1mfHx7fTtpZighdGhpcy5pbml0ZWQpe3RoaXMuZmFjdG9yeT1iO2lmKGMp dGhpcy5vbigiZXJyb3IiLGMpO2Vsc2UgdGhpcy5ldmVudHMuZXJyb3ImJihjPXUodGhpcyxmdW5j dGlvbihhKXt0aGlzLmVtaXQoImVycm9yIixhKX0pKTt0aGlzLmRlcE1hcHM9YSYmYS5zbGljZSgw KTt0aGlzLmVycmJhY2s9Ci1jO3RoaXMuaW5pdGVkPSEwO3RoaXMuaWdub3JlPWYuaWdub3JlO2Yu ZW5hYmxlZHx8dGhpcy5lbmFibGVkP3RoaXMuZW5hYmxlKCk6dGhpcy5jaGVjaygpfX0sZGVmaW5l RGVwOmZ1bmN0aW9uKGEsYil7dGhpcy5kZXBNYXRjaGVkW2FdfHwodGhpcy5kZXBNYXRjaGVkW2Fd PSEwLHRoaXMuZGVwQ291bnQtPTEsdGhpcy5kZXBFeHBvcnRzW2FdPWIpfSxmZXRjaDpmdW5jdGlv bigpe2lmKCF0aGlzLmZldGNoZWQpe3RoaXMuZmV0Y2hlZD0hMDtpLnN0YXJ0VGltZT0obmV3IERh dGUpLmdldFRpbWUoKTt2YXIgYT10aGlzLm1hcDtpZih0aGlzLnNoaW0paS5tYWtlUmVxdWlyZSh0 aGlzLm1hcCx7ZW5hYmxlQnVpbGRDYWxsYmFjazohMH0pKHRoaXMuc2hpbS5kZXBzfHxbXSx1KHRo aXMsZnVuY3Rpb24oKXtyZXR1cm4gYS5wcmVmaXg/dGhpcy5jYWxsUGx1Z2luKCk6dGhpcy5sb2Fk KCl9KSk7ZWxzZSByZXR1cm4gYS5wcmVmaXg/dGhpcy5jYWxsUGx1Z2luKCk6dGhpcy5sb2FkKCl9 fSxsb2FkOmZ1bmN0aW9uKCl7dmFyIGE9Ci10aGlzLm1hcC51cmw7U1thXXx8KFNbYV09ITAsaS5s b2FkKHRoaXMubWFwLmlkLGEpKX0sY2hlY2s6ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQmJiF0 aGlzLmVuYWJsaW5nKXt2YXIgYSxiLGM9dGhpcy5tYXAuaWQ7Yj10aGlzLmRlcEV4cG9ydHM7dmFy IGY9dGhpcy5leHBvcnRzLGw9dGhpcy5mYWN0b3J5O2lmKHRoaXMuaW5pdGVkKWlmKHRoaXMuZXJy b3IpdGhpcy5lbWl0KCJlcnJvciIsdGhpcy5lcnJvcik7ZWxzZXtpZighdGhpcy5kZWZpbmluZyl7 dGhpcy5kZWZpbmluZz0hMDtpZigxPnRoaXMuZGVwQ291bnQmJiF0aGlzLmRlZmluZWQpe2lmKEco bCkpe2lmKHRoaXMuZXZlbnRzLmVycm9yJiZ0aGlzLm1hcC5pc0RlZmluZXx8Zy5vbkVycm9yIT09 Y2EpdHJ5e2Y9aS5leGVjQ2IoYyxsLGIsZil9Y2F0Y2goZCl7YT1kfWVsc2UgZj1pLmV4ZWNDYihj LGwsYixmKTt0aGlzLm1hcC5pc0RlZmluZSYmdm9pZCAwPT09ZiYmKChiPXRoaXMubW9kdWxlKT9m PWIuZXhwb3J0czp0aGlzLnVzaW5nRXhwb3J0cyYmCi0oZj10aGlzLmV4cG9ydHMpKTtpZihhKXJl dHVybiBhLnJlcXVpcmVNYXA9dGhpcy5tYXAsYS5yZXF1aXJlTW9kdWxlcz10aGlzLm1hcC5pc0Rl ZmluZT9bdGhpcy5tYXAuaWRdOm51bGwsYS5yZXF1aXJlVHlwZT10aGlzLm1hcC5pc0RlZmluZT8i ZGVmaW5lIjoicmVxdWlyZSIsdyh0aGlzLmVycm9yPWEpfWVsc2UgZj1sO3RoaXMuZXhwb3J0cz1m O2lmKHRoaXMubWFwLmlzRGVmaW5lJiYhdGhpcy5pZ25vcmUmJihyW2NdPWYsZy5vblJlc291cmNl TG9hZCkpZy5vblJlc291cmNlTG9hZChpLHRoaXMubWFwLHRoaXMuZGVwTWFwcyk7eShjKTt0aGlz LmRlZmluZWQ9ITB9dGhpcy5kZWZpbmluZz0hMTt0aGlzLmRlZmluZWQmJiF0aGlzLmRlZmluZUVt aXR0ZWQmJih0aGlzLmRlZmluZUVtaXR0ZWQ9ITAsdGhpcy5lbWl0KCJkZWZpbmVkIix0aGlzLmV4 cG9ydHMpLHRoaXMuZGVmaW5lRW1pdENvbXBsZXRlPSEwKX19ZWxzZSB0aGlzLmZldGNoKCl9fSxj YWxsUGx1Z2luOmZ1bmN0aW9uKCl7dmFyIGE9Ci10aGlzLm1hcCxiPWEuaWQsZD1wKGEucHJlZml4 KTt0aGlzLmRlcE1hcHMucHVzaChkKTtxKGQsImRlZmluZWQiLHUodGhpcyxmdW5jdGlvbihmKXt2 YXIgbCxkO2Q9bShhYSx0aGlzLm1hcC5pZCk7dmFyIGU9dGhpcy5tYXAubmFtZSxQPXRoaXMubWFw LnBhcmVudE1hcD90aGlzLm1hcC5wYXJlbnRNYXAubmFtZTpudWxsLG49aS5tYWtlUmVxdWlyZShh LnBhcmVudE1hcCx7ZW5hYmxlQnVpbGRDYWxsYmFjazohMH0pO2lmKHRoaXMubWFwLnVubm9ybWFs aXplZCl7aWYoZi5ub3JtYWxpemUmJihlPWYubm9ybWFsaXplKGUsZnVuY3Rpb24oYSl7cmV0dXJu IGMoYSxQLCEwKX0pfHwiIiksZj1wKGEucHJlZml4KyIhIitlLHRoaXMubWFwLnBhcmVudE1hcCks cShmLCJkZWZpbmVkIix1KHRoaXMsZnVuY3Rpb24oYSl7dGhpcy5pbml0KFtdLGZ1bmN0aW9uKCl7 cmV0dXJuIGF9LG51bGwse2VuYWJsZWQ6ITAsaWdub3JlOiEwfSl9KSksZD1tKGgsZi5pZCkpe3Ro aXMuZGVwTWFwcy5wdXNoKGYpOwotaWYodGhpcy5ldmVudHMuZXJyb3IpZC5vbigiZXJyb3IiLHUo dGhpcyxmdW5jdGlvbihhKXt0aGlzLmVtaXQoImVycm9yIixhKX0pKTtkLmVuYWJsZSgpfX1lbHNl IGQ/KHRoaXMubWFwLnVybD1pLm5hbWVUb1VybChkKSx0aGlzLmxvYWQoKSk6KGw9dSh0aGlzLGZ1 bmN0aW9uKGEpe3RoaXMuaW5pdChbXSxmdW5jdGlvbigpe3JldHVybiBhfSxudWxsLHtlbmFibGVk OiEwfSl9KSxsLmVycm9yPXUodGhpcyxmdW5jdGlvbihhKXt0aGlzLmluaXRlZD0hMDt0aGlzLmVy cm9yPWE7YS5yZXF1aXJlTW9kdWxlcz1bYl07QihoLGZ1bmN0aW9uKGEpezA9PT1hLm1hcC5pZC5p bmRleE9mKGIrIl91bm5vcm1hbGl6ZWQiKSYmeShhLm1hcC5pZCl9KTt3KGEpfSksbC5mcm9tVGV4 dD11KHRoaXMsZnVuY3Rpb24oZixjKXt2YXIgZD1hLm5hbWUsZT1wKGQpLFA9TTtjJiYoZj1jKTtQ JiYoTT0hMSk7cyhlKTt0KGouY29uZmlnLGIpJiYoai5jb25maWdbZF09ai5jb25maWdbYl0pO3Ry eXtnLmV4ZWMoZil9Y2F0Y2goaCl7cmV0dXJuIHcoQygiZnJvbXRleHRldmFsIiwKLSJmcm9tVGV4 dCBldmFsIGZvciAiK2IrIiBmYWlsZWQ6ICIraCxoLFtiXSkpfVAmJihNPSEwKTt0aGlzLmRlcE1h cHMucHVzaChlKTtpLmNvbXBsZXRlTG9hZChkKTtuKFtkXSxsKX0pLGYubG9hZChhLm5hbWUsbixs LGopKX0pKTtpLmVuYWJsZShkLHRoaXMpO3RoaXMucGx1Z2luTWFwc1tkLmlkXT1kfSxlbmFibGU6 ZnVuY3Rpb24oKXtWW3RoaXMubWFwLmlkXT10aGlzO3RoaXMuZW5hYmxpbmc9dGhpcy5lbmFibGVk PSEwO3YodGhpcy5kZXBNYXBzLHUodGhpcyxmdW5jdGlvbihhLGIpe3ZhciBjLGY7aWYoInN0cmlu ZyI9PT10eXBlb2YgYSl7YT1wKGEsdGhpcy5tYXAuaXNEZWZpbmU/dGhpcy5tYXA6dGhpcy5tYXAu cGFyZW50TWFwLCExLCF0aGlzLnNraXBNYXApO3RoaXMuZGVwTWFwc1tiXT1hO2lmKGM9bShMLGEu aWQpKXt0aGlzLmRlcEV4cG9ydHNbYl09Yyh0aGlzKTtyZXR1cm59dGhpcy5kZXBDb3VudCs9MTtx KGEsImRlZmluZWQiLHUodGhpcyxmdW5jdGlvbihhKXt0aGlzLmRlZmluZURlcChiLAotYSk7dGhp cy5jaGVjaygpfSkpO3RoaXMuZXJyYmFjaz9xKGEsImVycm9yIix1KHRoaXMsdGhpcy5lcnJiYWNr KSk6dGhpcy5ldmVudHMuZXJyb3ImJnEoYSwiZXJyb3IiLHUodGhpcyxmdW5jdGlvbihhKXt0aGlz LmVtaXQoImVycm9yIixhKX0pKX1jPWEuaWQ7Zj1oW2NdOyF0KEwsYykmJihmJiYhZi5lbmFibGVk KSYmaS5lbmFibGUoYSx0aGlzKX0pKTtCKHRoaXMucGx1Z2luTWFwcyx1KHRoaXMsZnVuY3Rpb24o YSl7dmFyIGI9bShoLGEuaWQpO2ImJiFiLmVuYWJsZWQmJmkuZW5hYmxlKGEsdGhpcyl9KSk7dGhp cy5lbmFibGluZz0hMTt0aGlzLmNoZWNrKCl9LG9uOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5l dmVudHNbYV07Y3x8KGM9dGhpcy5ldmVudHNbYV09W10pO2MucHVzaChiKX0sZW1pdDpmdW5jdGlv bihhLGIpe3YodGhpcy5ldmVudHNbYV0sZnVuY3Rpb24oYSl7YShiKX0pOyJlcnJvciI9PT1hJiZk ZWxldGUgdGhpcy5ldmVudHNbYV19fTtpPXtjb25maWc6aixjb250ZXh0TmFtZTpiLAotcmVnaXN0 cnk6aCxkZWZpbmVkOnIsdXJsRmV0Y2hlZDpTLGRlZlF1ZXVlOkEsTW9kdWxlOlosbWFrZU1vZHVs ZU1hcDpwLG5leHRUaWNrOmcubmV4dFRpY2ssb25FcnJvcjp3LGNvbmZpZ3VyZTpmdW5jdGlvbihh KXthLmJhc2VVcmwmJiIvIiE9PWEuYmFzZVVybC5jaGFyQXQoYS5iYXNlVXJsLmxlbmd0aC0xKSYm KGEuYmFzZVVybCs9Ii8iKTt2YXIgYj1qLnNoaW0sYz17cGF0aHM6ITAsYnVuZGxlczohMCxjb25m aWc6ITAsbWFwOiEwfTtCKGEsZnVuY3Rpb24oYSxiKXtjW2JdPyhqW2JdfHwoaltiXT17fSksVShq W2JdLGEsITAsITApKTpqW2JdPWF9KTthLmJ1bmRsZXMmJkIoYS5idW5kbGVzLGZ1bmN0aW9uKGEs Yil7dihhLGZ1bmN0aW9uKGEpe2EhPT1iJiYoYWFbYV09Yil9KX0pO2Euc2hpbSYmKEIoYS5zaGlt LGZ1bmN0aW9uKGEsYyl7SChhKSYmKGE9e2RlcHM6YX0pO2lmKChhLmV4cG9ydHN8fGEuaW5pdCkm JiFhLmV4cG9ydHNGbilhLmV4cG9ydHNGbj1pLm1ha2VTaGltRXhwb3J0cyhhKTsKLWJbY109YX0p LGouc2hpbT1iKTthLnBhY2thZ2VzJiZ2KGEucGFja2FnZXMsZnVuY3Rpb24oYSl7dmFyIGIsYT0i c3RyaW5nIj09PXR5cGVvZiBhP3tuYW1lOmF9OmE7Yj1hLm5hbWU7YS5sb2NhdGlvbiYmKGoucGF0 aHNbYl09YS5sb2NhdGlvbik7ai5wa2dzW2JdPWEubmFtZSsiLyIrKGEubWFpbnx8Im1haW4iKS5y ZXBsYWNlKGlhLCIiKS5yZXBsYWNlKFEsIiIpfSk7QihoLGZ1bmN0aW9uKGEsYil7IWEuaW5pdGVk JiYhYS5tYXAudW5ub3JtYWxpemVkJiYoYS5tYXA9cChiKSl9KTtpZihhLmRlcHN8fGEuY2FsbGJh Y2spaS5yZXF1aXJlKGEuZGVwc3x8W10sYS5jYWxsYmFjayl9LG1ha2VTaGltRXhwb3J0czpmdW5j dGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYjthLmluaXQmJihiPWEuaW5pdC5hcHBseShi YSxhcmd1bWVudHMpKTtyZXR1cm4gYnx8YS5leHBvcnRzJiZkYShhLmV4cG9ydHMpfX0sbWFrZVJl cXVpcmU6ZnVuY3Rpb24oYSxlKXtmdW5jdGlvbiBqKGMsZCxtKXt2YXIgbiwKLXE7ZS5lbmFibGVC dWlsZENhbGxiYWNrJiYoZCYmRyhkKSkmJihkLl9fcmVxdWlyZUpzQnVpbGQ9ITApO2lmKCJzdHJp bmciPT09dHlwZW9mIGMpe2lmKEcoZCkpcmV0dXJuIHcoQygicmVxdWlyZWFyZ3MiLCJJbnZhbGlk IHJlcXVpcmUgY2FsbCIpLG0pO2lmKGEmJnQoTCxjKSlyZXR1cm4gTFtjXShoW2EuaWRdKTtpZihn LmdldClyZXR1cm4gZy5nZXQoaSxjLGEsaik7bj1wKGMsYSwhMSwhMCk7bj1uLmlkO3JldHVybiF0 KHIsbik/dyhDKCJub3Rsb2FkZWQiLCdNb2R1bGUgbmFtZSAiJytuKyciIGhhcyBub3QgYmVlbiBs b2FkZWQgeWV0IGZvciBjb250ZXh0OiAnK2IrKGE/IiI6Ii4gVXNlIHJlcXVpcmUoW10pIikpKTpy W25dfUooKTtpLm5leHRUaWNrKGZ1bmN0aW9uKCl7SigpO3E9cyhwKG51bGwsYSkpO3Euc2tpcE1h cD1lLnNraXBNYXA7cS5pbml0KGMsZCxtLHtlbmFibGVkOiEwfSk7RCgpfSk7cmV0dXJuIGp9ZT1l fHx7fTtVKGose2lzQnJvd3Nlcjp6LHRvVXJsOmZ1bmN0aW9uKGIpe3ZhciBkLAotZT1iLmxhc3RJ bmRleE9mKCIuIiksaz1iLnNwbGl0KCIvIilbMF07aWYoLTEhPT1lJiYoISgiLiI9PT1rfHwiLi4i PT09ayl8fDE8ZSkpZD1iLnN1YnN0cmluZyhlLGIubGVuZ3RoKSxiPWIuc3Vic3RyaW5nKDAsZSk7 cmV0dXJuIGkubmFtZVRvVXJsKGMoYixhJiZhLmlkLCEwKSxkLCEwKX0sZGVmaW5lZDpmdW5jdGlv bihiKXtyZXR1cm4gdChyLHAoYixhLCExLCEwKS5pZCl9LHNwZWNpZmllZDpmdW5jdGlvbihiKXti PXAoYixhLCExLCEwKS5pZDtyZXR1cm4gdChyLGIpfHx0KGgsYil9fSk7YXx8KGoudW5kZWY9ZnVu Y3Rpb24oYil7eCgpO3ZhciBjPXAoYixhLCEwKSxlPW0oaCxiKTtkKGIpO2RlbGV0ZSByW2JdO2Rl bGV0ZSBTW2MudXJsXTtkZWxldGUgJFtiXTtUKEEsZnVuY3Rpb24oYSxjKXthWzBdPT09YiYmQS5z cGxpY2UoYywxKX0pO2UmJihlLmV2ZW50cy5kZWZpbmVkJiYoJFtiXT1lLmV2ZW50cykseShiKSl9 KTtyZXR1cm4gan0sZW5hYmxlOmZ1bmN0aW9uKGEpe20oaCxhLmlkKSYmCi1zKGEpLmVuYWJsZSgp fSxjb21wbGV0ZUxvYWQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPW0oai5zaGltLGEpfHx7fSxnPWQu ZXhwb3J0cztmb3IoeCgpO0EubGVuZ3RoOyl7Yz1BLnNoaWZ0KCk7aWYobnVsbD09PWNbMF0pe2Nb MF09YTtpZihiKWJyZWFrO2I9ITB9ZWxzZSBjWzBdPT09YSYmKGI9ITApO0UoYyl9Yz1tKGgsYSk7 aWYoIWImJiF0KHIsYSkmJmMmJiFjLmluaXRlZCl7aWYoai5lbmZvcmNlRGVmaW5lJiYoIWd8fCFk YShnKSkpcmV0dXJuIGUoYSk/dm9pZCAwOncoQygibm9kZWZpbmUiLCJObyBkZWZpbmUgY2FsbCBm b3IgIithLG51bGwsW2FdKSk7RShbYSxkLmRlcHN8fFtdLGQuZXhwb3J0c0ZuXSl9RCgpfSxuYW1l VG9Vcmw6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsaDsoZD1tKGoucGtncyxhKSkmJihhPWQpO2lm KGQ9bShhYSxhKSlyZXR1cm4gaS5uYW1lVG9VcmwoZCxiLGMpO2lmKGcuanNFeHRSZWdFeHAudGVz dChhKSlkPWErKGJ8fCIiKTtlbHNle2Q9ai5wYXRoczsKLWE9YS5zcGxpdCgiLyIpO2ZvcihlPWEu bGVuZ3RoOzA8ZTtlLT0xKWlmKGg9YS5zbGljZSgwLGUpLmpvaW4oIi8iKSxoPW0oZCxoKSl7SCho KSYmKGg9aFswXSk7YS5zcGxpY2UoMCxlLGgpO2JyZWFrfWQ9YS5qb2luKCIvIik7ZCs9Ynx8KC9e ZGF0YVw6fFw/Ly50ZXN0KGQpfHxjPyIiOiIuanMiKTtkPSgiLyI9PT1kLmNoYXJBdCgwKXx8ZC5t YXRjaCgvXltcd1wrXC5cLV0rOi8pPyIiOmouYmFzZVVybCkrZH1yZXR1cm4gai51cmxBcmdzP2Qr KCgtMT09PWQuaW5kZXhPZigiPyIpPyI/IjoiJiIpK2oudXJsQXJncyk6ZH0sbG9hZDpmdW5jdGlv bihhLGIpe2cubG9hZChpLGEsYil9LGV4ZWNDYjpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYi5h cHBseShkLGMpfSxvblNjcmlwdExvYWQ6ZnVuY3Rpb24oYSl7aWYoImxvYWQiPT09YS50eXBlfHxq YS50ZXN0KChhLmN1cnJlbnRUYXJnZXR8fGEuc3JjRWxlbWVudCkucmVhZHlTdGF0ZSkpTj1udWxs LGE9SShhKSxpLmNvbXBsZXRlTG9hZChhLmlkKX0sCi1vblNjcmlwdEVycm9yOmZ1bmN0aW9uKGEp e3ZhciBiPUkoYSk7aWYoIWUoYi5pZCkpcmV0dXJuIHcoQygic2NyaXB0ZXJyb3IiLCJTY3JpcHQg ZXJyb3IgZm9yOiAiK2IuaWQsYSxbYi5pZF0pKX19O2kucmVxdWlyZT1pLm1ha2VSZXF1aXJlKCk7 cmV0dXJuIGl9dmFyIGcseCx5LEQsSSxFLE4sSixzLE8sa2E9LyhcL1wqKFtcc1xTXSo/KVwqXC98 KFteOl18XilcL1wvKC4qKSQpL21nLGxhPS9bXi5dXHMqcmVxdWlyZVxzKlwoXHMqWyInXShbXici XHNdKylbIiddXHMqXCkvZyxRPS9cLmpzJC8saWE9L15cLlwvLzt4PU9iamVjdC5wcm90b3R5cGU7 dmFyIEs9eC50b1N0cmluZyxmYT14Lmhhc093blByb3BlcnR5LGhhPUFycmF5LnByb3RvdHlwZS5z cGxpY2Usej0hISgidW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT09dHlw ZW9mIG5hdmlnYXRvciYmd2luZG93LmRvY3VtZW50KSxlYT0heiYmInVuZGVmaW5lZCIhPT10eXBl b2YgaW1wb3J0U2NyaXB0cyxqYT0KLXomJiJQTEFZU1RBVElPTiAzIj09PW5hdmlnYXRvci5wbGF0 Zm9ybT8vXmNvbXBsZXRlJC86L14oY29tcGxldGV8bG9hZGVkKSQvLFk9InVuZGVmaW5lZCIhPT10 eXBlb2Ygb3BlcmEmJiJbb2JqZWN0IE9wZXJhXSI9PT1vcGVyYS50b1N0cmluZygpLEY9e30scT17 fSxSPVtdLE09ITE7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgZGVmaW5lKXtpZigidW5kZWZpbmVk IiE9PXR5cGVvZiByZXF1aXJlanMpe2lmKEcocmVxdWlyZWpzKSlyZXR1cm47cT1yZXF1aXJlanM7 cmVxdWlyZWpzPXZvaWQgMH0idW5kZWZpbmVkIiE9PXR5cGVvZiByZXF1aXJlJiYhRyhyZXF1aXJl KSYmKHE9cmVxdWlyZSxyZXF1aXJlPXZvaWQgMCk7Zz1yZXF1aXJlanM9ZnVuY3Rpb24oYixjLGQs ZSl7dmFyIG4scD0iXyI7IUgoYikmJiJzdHJpbmciIT09dHlwZW9mIGImJihuPWIsSChjKT8oYj1j LGM9ZCxkPWUpOmI9W10pO24mJm4uY29udGV4dCYmKHA9bi5jb250ZXh0KTsoZT1tKEYscCkpfHwo ZT1GW3BdPWcucy5uZXdDb250ZXh0KHApKTsKLW4mJmUuY29uZmlndXJlKG4pO3JldHVybiBlLnJl cXVpcmUoYixjLGQpfTtnLmNvbmZpZz1mdW5jdGlvbihiKXtyZXR1cm4gZyhiKX07Zy5uZXh0VGlj az0idW5kZWZpbmVkIiE9PXR5cGVvZiBzZXRUaW1lb3V0P2Z1bmN0aW9uKGIpe3NldFRpbWVvdXQo Yiw0KX06ZnVuY3Rpb24oYil7YigpfTtyZXF1aXJlfHwocmVxdWlyZT1nKTtnLnZlcnNpb249IjIu MS4xNyI7Zy5qc0V4dFJlZ0V4cD0vXlwvfDp8XD98XC5qcyQvO2cuaXNCcm93c2VyPXo7eD1nLnM9 e2NvbnRleHRzOkYsbmV3Q29udGV4dDpnYX07Zyh7fSk7dihbInRvVXJsIiwidW5kZWYiLCJkZWZp bmVkIiwic3BlY2lmaWVkIl0sZnVuY3Rpb24oYil7Z1tiXT1mdW5jdGlvbigpe3ZhciBjPUYuXzty ZXR1cm4gYy5yZXF1aXJlW2JdLmFwcGx5KGMsYXJndW1lbnRzKX19KTtpZih6JiYoeT14LmhlYWQ9 ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxEPWRvY3VtZW50LmdldEVs ZW1lbnRzQnlUYWdOYW1lKCJiYXNlIilbMF0pKXk9Ci14LmhlYWQ9RC5wYXJlbnROb2RlO2cub25F cnJvcj1jYTtnLmNyZWF0ZU5vZGU9ZnVuY3Rpb24oYil7dmFyIGM9Yi54aHRtbD9kb2N1bWVudC5j cmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJodG1sOnNjcmlw dCIpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2MudHlwZT1iLnNjcmlwdFR5cGV8 fCJ0ZXh0L2phdmFzY3JpcHQiO2MuY2hhcnNldD0idXRmLTgiO2MuYXN5bmM9ITA7cmV0dXJuIGN9 O2cubG9hZD1mdW5jdGlvbihiLGMsZCl7dmFyIGU9YiYmYi5jb25maWd8fHt9O2lmKHopcmV0dXJu IGU9Zy5jcmVhdGVOb2RlKGUsYyxkKSxlLnNldEF0dHJpYnV0ZSgiZGF0YS1yZXF1aXJlY29udGV4 dCIsYi5jb250ZXh0TmFtZSksZS5zZXRBdHRyaWJ1dGUoImRhdGEtcmVxdWlyZW1vZHVsZSIsYyks ZS5hdHRhY2hFdmVudCYmIShlLmF0dGFjaEV2ZW50LnRvU3RyaW5nJiYwPmUuYXR0YWNoRXZlbnQu dG9TdHJpbmcoKS5pbmRleE9mKCJbbmF0aXZlIGNvZGUiKSkmJgotIVk/KE09ITAsZS5hdHRhY2hF dmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixiLm9uU2NyaXB0TG9hZCkpOihlLmFkZEV2ZW50TGlz dGVuZXIoImxvYWQiLGIub25TY3JpcHRMb2FkLCExKSxlLmFkZEV2ZW50TGlzdGVuZXIoImVycm9y IixiLm9uU2NyaXB0RXJyb3IsITEpKSxlLnNyYz1kLEo9ZSxEP3kuaW5zZXJ0QmVmb3JlKGUsRCk6 eS5hcHBlbmRDaGlsZChlKSxKPW51bGwsZTtpZihlYSl0cnl7aW1wb3J0U2NyaXB0cyhkKSxiLmNv bXBsZXRlTG9hZChjKX1jYXRjaChtKXtiLm9uRXJyb3IoQygiaW1wb3J0c2NyaXB0cyIsImltcG9y dFNjcmlwdHMgZmFpbGVkIGZvciAiK2MrIiBhdCAiK2QsbSxbY10pKX19O3omJiFxLnNraXBEYXRh TWFpbiYmVChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksZnVuY3Rpb24o Yil7eXx8KHk9Yi5wYXJlbnROb2RlKTtpZihJPWIuZ2V0QXR0cmlidXRlKCJkYXRhLW1haW4iKSly ZXR1cm4gcz1JLHEuYmFzZVVybHx8KEU9cy5zcGxpdCgiLyIpLAotcz1FLnBvcCgpLE89RS5sZW5n dGg/RS5qb2luKCIvIikrIi8iOiIuLyIscS5iYXNlVXJsPU8pLHM9cy5yZXBsYWNlKFEsIiIpLGcu anNFeHRSZWdFeHAudGVzdChzKSYmKHM9SSkscS5kZXBzPXEuZGVwcz9xLmRlcHMuY29uY2F0KHMp OltzXSwhMH0pO2RlZmluZT1mdW5jdGlvbihiLGMsZCl7dmFyIGUsZzsic3RyaW5nIiE9PXR5cGVv ZiBiJiYoZD1jLGM9YixiPW51bGwpO0goYyl8fChkPWMsYz1udWxsKTshYyYmRyhkKSYmKGM9W10s ZC5sZW5ndGgmJihkLnRvU3RyaW5nKCkucmVwbGFjZShrYSwiIikucmVwbGFjZShsYSxmdW5jdGlv bihiLGQpe2MucHVzaChkKX0pLGM9KDE9PT1kLmxlbmd0aD9bInJlcXVpcmUiXTpbInJlcXVpcmUi LCJleHBvcnRzIiwibW9kdWxlIl0pLmNvbmNhdChjKSkpO2lmKE0pe2lmKCEoZT1KKSlOJiYiaW50 ZXJhY3RpdmUiPT09Ti5yZWFkeVN0YXRlfHxUKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l KCJzY3JpcHQiKSxmdW5jdGlvbihiKXtpZigiaW50ZXJhY3RpdmUiPT09Ci1iLnJlYWR5U3RhdGUp cmV0dXJuIE49Yn0pLGU9TjtlJiYoYnx8KGI9ZS5nZXRBdHRyaWJ1dGUoImRhdGEtcmVxdWlyZW1v ZHVsZSIpKSxnPUZbZS5nZXRBdHRyaWJ1dGUoImRhdGEtcmVxdWlyZWNvbnRleHQiKV0pfShnP2cu ZGVmUXVldWU6UikucHVzaChbYixjLGRdKX07ZGVmaW5lLmFtZD17alF1ZXJ5OiEwfTtnLmV4ZWM9 ZnVuY3Rpb24oYil7cmV0dXJuIGV2YWwoYil9O2cocSl9fSkodGhpcyk7CisvKiogdmltOiBldDp0 cz00OnN3PTQ6c3RzPTQKKyAqIEBsaWNlbnNlIFJlcXVpcmVKUyAyLjMuNiBDb3B5cmlnaHQgalF1 ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4KKyAqIFJlbGVhc2VkIHVuZGVy IE1JVCBsaWNlbnNlLCBodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9ibG9i L21hc3Rlci9MSUNFTlNFCisgKi8KKy8vTm90IHVzaW5nIHN0cmljdDogdW5ldmVuIHN0cmljdCBz dXBwb3J0IGluIGJyb3dzZXJzLCAjMzkyLCBhbmQgY2F1c2VzCisvL3Byb2JsZW1zIHdpdGggcmVx dWlyZWpzLmV4ZWMoKS90cmFuc3BpbGVyIHBsdWdpbnMgdGhhdCBtYXkgbm90IGJlIHN0cmljdC4K Ky8qanNsaW50IHJlZ2V4cDogdHJ1ZSwgbm9tZW46IHRydWUsIHNsb3BweTogdHJ1ZSAqLworLypn bG9iYWwgd2luZG93LCBuYXZpZ2F0b3IsIGRvY3VtZW50LCBpbXBvcnRTY3JpcHRzLCBzZXRUaW1l b3V0LCBvcGVyYSAqLwordmFyIHJlcXVpcmVqcyxyZXF1aXJlLGRlZmluZTshZnVuY3Rpb24oZ2xv YmFsLHNldFRpbWVvdXQpe3ZhciByZXEscyxoZWFkLGJhc2VFbGVtZW50LGRhdGFNYWluLHNyYyxp bnRlcmFjdGl2ZVNjcmlwdCxjdXJyZW50bHlBZGRpbmdTY3JpcHQsbWFpblNjcmlwdCxzdWJQYXRo LHZlcnNpb249IjIuMy42Iixjb21tZW50UmVnRXhwPS9cL1wqW1xzXFNdKj9cKlwvfChbXjoiJz1d fF4pXC9cLy4qJC9nbSxjanNSZXF1aXJlUmVnRXhwPS9bXi5dXHMqcmVxdWlyZVxzKlwoXHMqWyIn XShbXiciXHNdKylbIiddXHMqXCkvZyxqc1N1ZmZpeFJlZ0V4cD0vXC5qcyQvLGN1cnJEaXJSZWdF eHA9L15cLlwvLyxvcD1PYmplY3QucHJvdG90eXBlLG9zdHJpbmc9b3AudG9TdHJpbmcsaGFzT3du PW9wLmhhc093blByb3BlcnR5LGlzQnJvd3Nlcj0hKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93 fHwidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8IXdpbmRvdy5kb2N1bWVudCksaXNXZWJX b3JrZXI9IWlzQnJvd3NlciYmInVuZGVmaW5lZCIhPXR5cGVvZiBpbXBvcnRTY3JpcHRzLHJlYWR5 UmVnRXhwPWlzQnJvd3NlciYmIlBMQVlTVEFUSU9OIDMiPT09bmF2aWdhdG9yLnBsYXRmb3JtPy9e Y29tcGxldGUkLzovXihjb21wbGV0ZXxsb2FkZWQpJC8sZGVmQ29udGV4dE5hbWU9Il8iLGlzT3Bl cmE9InVuZGVmaW5lZCIhPXR5cGVvZiBvcGVyYSYmIltvYmplY3QgT3BlcmFdIj09PW9wZXJhLnRv U3RyaW5nKCksY29udGV4dHM9e30sY2ZnPXt9LGdsb2JhbERlZlF1ZXVlPVtdLHVzZUludGVyYWN0 aXZlPSExO2Z1bmN0aW9uIGNvbW1lbnRSZXBsYWNlKGUsdCl7cmV0dXJuIHR8fCIifWZ1bmN0aW9u IGlzRnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PW9zdHJpbmcuY2FsbChl KX1mdW5jdGlvbiBpc0FycmF5KGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1vc3RyaW5nLmNh bGwoZSl9ZnVuY3Rpb24gZWFjaChlLHQpe3ZhciBpO2lmKGUpZm9yKGk9MDtpPGUubGVuZ3RoJiYo IWVbaV18fCF0KGVbaV0saSxlKSk7aSs9MSk7fWZ1bmN0aW9uIGVhY2hSZXZlcnNlKGUsdCl7dmFy IGk7aWYoZSlmb3IoaT1lLmxlbmd0aC0xO2k+LTEmJighZVtpXXx8IXQoZVtpXSxpLGUpKTtpLT0x KTt9ZnVuY3Rpb24gaGFzUHJvcChlLHQpe3JldHVybiBoYXNPd24uY2FsbChlLHQpfWZ1bmN0aW9u IGdldE93bihlLHQpe3JldHVybiBoYXNQcm9wKGUsdCkmJmVbdF19ZnVuY3Rpb24gZWFjaFByb3Ao ZSx0KXt2YXIgaTtmb3IoaSBpbiBlKWlmKGhhc1Byb3AoZSxpKSYmdChlW2ldLGkpKWJyZWFrfWZ1 bmN0aW9uIG1peGluKGUsdCxpLHIpe3JldHVybiB0JiZlYWNoUHJvcCh0LGZ1bmN0aW9uKHQsbil7 IWkmJmhhc1Byb3AoZSxuKXx8KCFyfHwib2JqZWN0IiE9dHlwZW9mIHR8fCF0fHxpc0FycmF5KHQp fHxpc0Z1bmN0aW9uKHQpfHx0IGluc3RhbmNlb2YgUmVnRXhwP2Vbbl09dDooZVtuXXx8KGVbbl09 e30pLG1peGluKGVbbl0sdCxpLHIpKSl9KSxlfWZ1bmN0aW9uIGJpbmQoZSx0KXtyZXR1cm4gZnVu Y3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHNjcmlwdHMoKXty ZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpfWZ1bmN0aW9uIGRl ZmF1bHRPbkVycm9yKGUpe3Rocm93IGV9ZnVuY3Rpb24gZ2V0R2xvYmFsKGUpe2lmKCFlKXJldHVy biBlO3ZhciB0PWdsb2JhbDtyZXR1cm4gZWFjaChlLnNwbGl0KCIuIiksZnVuY3Rpb24oZSl7dD10 W2VdfSksdH1mdW5jdGlvbiBtYWtlRXJyb3IoZSx0LGkscil7dmFyIG49bmV3IEVycm9yKHQrIlxu aHR0cHM6Ly9yZXF1aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjIitlKTtyZXR1cm4gbi5yZXF1 aXJlVHlwZT1lLG4ucmVxdWlyZU1vZHVsZXM9cixpJiYobi5vcmlnaW5hbEVycm9yPWkpLG59aWYo dm9pZCAwPT09ZGVmaW5lKXtpZih2b2lkIDAhPT1yZXF1aXJlanMpe2lmKGlzRnVuY3Rpb24ocmVx dWlyZWpzKSlyZXR1cm47Y2ZnPXJlcXVpcmVqcyxyZXF1aXJlanM9dm9pZCAwfXZvaWQgMD09PXJl cXVpcmV8fGlzRnVuY3Rpb24ocmVxdWlyZSl8fChjZmc9cmVxdWlyZSxyZXF1aXJlPXZvaWQgMCks cmVxPXJlcXVpcmVqcz1mdW5jdGlvbihlLHQsaSxyKXt2YXIgbixvLGE9ZGVmQ29udGV4dE5hbWU7 cmV0dXJuIGlzQXJyYXkoZSl8fCJzdHJpbmciPT10eXBlb2YgZXx8KG89ZSxpc0FycmF5KHQpPyhl PXQsdD1pLGk9cik6ZT1bXSksbyYmby5jb250ZXh0JiYoYT1vLmNvbnRleHQpLChuPWdldE93bihj b250ZXh0cyxhKSl8fChuPWNvbnRleHRzW2FdPXJlcS5zLm5ld0NvbnRleHQoYSkpLG8mJm4uY29u ZmlndXJlKG8pLG4ucmVxdWlyZShlLHQsaSl9LHJlcS5jb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJu IHJlcShlKX0scmVxLm5leHRUaWNrPXZvaWQgMCE9PXNldFRpbWVvdXQ/ZnVuY3Rpb24oZSl7c2V0 VGltZW91dChlLDQpfTpmdW5jdGlvbihlKXtlKCl9LHJlcXVpcmV8fChyZXF1aXJlPXJlcSkscmVx LnZlcnNpb249dmVyc2lvbixyZXEuanNFeHRSZWdFeHA9L15cL3w6fFw/fFwuanMkLyxyZXEuaXNC cm93c2VyPWlzQnJvd3NlcixzPXJlcS5zPXtjb250ZXh0czpjb250ZXh0cyxuZXdDb250ZXh0Om5l d0NvbnRleHR9LHJlcSh7fSksZWFjaChbInRvVXJsIiwidW5kZWYiLCJkZWZpbmVkIiwic3BlY2lm aWVkIl0sZnVuY3Rpb24oZSl7cmVxW2VdPWZ1bmN0aW9uKCl7dmFyIHQ9Y29udGV4dHNbZGVmQ29u dGV4dE5hbWVdO3JldHVybiB0LnJlcXVpcmVbZV0uYXBwbHkodCxhcmd1bWVudHMpfX0pLGlzQnJv d3NlciYmKGhlYWQ9cy5oZWFkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilb MF0sYmFzZUVsZW1lbnQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJhc2UiKVswXSxi YXNlRWxlbWVudCYmKGhlYWQ9cy5oZWFkPWJhc2VFbGVtZW50LnBhcmVudE5vZGUpKSxyZXEub25F cnJvcj1kZWZhdWx0T25FcnJvcixyZXEuY3JlYXRlTm9kZT1mdW5jdGlvbihlLHQsaSl7dmFyIHI9 ZS54aHRtbD9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkv eGh0bWwiLCJodG1sOnNjcmlwdCIpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3Jl dHVybiByLnR5cGU9ZS5zY3JpcHRUeXBlfHwidGV4dC9qYXZhc2NyaXB0IixyLmNoYXJzZXQ9InV0 Zi04IixyLmFzeW5jPSEwLHJ9LHJlcS5sb2FkPWZ1bmN0aW9uKGUsdCxpKXt2YXIgcixuPWUmJmUu Y29uZmlnfHx7fTtpZihpc0Jyb3dzZXIpcmV0dXJuKHI9cmVxLmNyZWF0ZU5vZGUobix0LGkpKS5z ZXRBdHRyaWJ1dGUoImRhdGEtcmVxdWlyZWNvbnRleHQiLGUuY29udGV4dE5hbWUpLHIuc2V0QXR0 cmlidXRlKCJkYXRhLXJlcXVpcmVtb2R1bGUiLHQpLCFyLmF0dGFjaEV2ZW50fHxyLmF0dGFjaEV2 ZW50LnRvU3RyaW5nJiZyLmF0dGFjaEV2ZW50LnRvU3RyaW5nKCkuaW5kZXhPZigiW25hdGl2ZSBj b2RlIik8MHx8aXNPcGVyYT8oci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlLm9uU2NyaXB0TG9h ZCwhMSksci5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZS5vblNjcmlwdEVycm9yLCExKSk6KHVz ZUludGVyYWN0aXZlPSEwLHIuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsZS5vblNj cmlwdExvYWQpKSxyLnNyYz1pLG4ub25Ob2RlQ3JlYXRlZCYmbi5vbk5vZGVDcmVhdGVkKHIsbix0 LGkpLGN1cnJlbnRseUFkZGluZ1NjcmlwdD1yLGJhc2VFbGVtZW50P2hlYWQuaW5zZXJ0QmVmb3Jl KHIsYmFzZUVsZW1lbnQpOmhlYWQuYXBwZW5kQ2hpbGQociksY3VycmVudGx5QWRkaW5nU2NyaXB0 PW51bGwscjtpZihpc1dlYldvcmtlcil0cnl7c2V0VGltZW91dChmdW5jdGlvbigpe30sMCksaW1w b3J0U2NyaXB0cyhpKSxlLmNvbXBsZXRlTG9hZCh0KX1jYXRjaChyKXtlLm9uRXJyb3IobWFrZUVy cm9yKCJpbXBvcnRzY3JpcHRzIiwiaW1wb3J0U2NyaXB0cyBmYWlsZWQgZm9yICIrdCsiIGF0ICIr aSxyLFt0XSkpfX0saXNCcm93c2VyJiYhY2ZnLnNraXBEYXRhTWFpbiYmZWFjaFJldmVyc2Uoc2Ny aXB0cygpLGZ1bmN0aW9uKGUpe2lmKGhlYWR8fChoZWFkPWUucGFyZW50Tm9kZSksZGF0YU1haW49 ZS5nZXRBdHRyaWJ1dGUoImRhdGEtbWFpbiIpKXJldHVybiBtYWluU2NyaXB0PWRhdGFNYWluLGNm Zy5iYXNlVXJsfHwtMSE9PW1haW5TY3JpcHQuaW5kZXhPZigiISIpfHwoc3JjPW1haW5TY3JpcHQu c3BsaXQoIi8iKSxtYWluU2NyaXB0PXNyYy5wb3AoKSxzdWJQYXRoPXNyYy5sZW5ndGg/c3JjLmpv aW4oIi8iKSsiLyI6Ii4vIixjZmcuYmFzZVVybD1zdWJQYXRoKSxtYWluU2NyaXB0PW1haW5TY3Jp cHQucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwiIikscmVxLmpzRXh0UmVnRXhwLnRlc3QobWFpblNj cmlwdCkmJihtYWluU2NyaXB0PWRhdGFNYWluKSxjZmcuZGVwcz1jZmcuZGVwcz9jZmcuZGVwcy5j b25jYXQobWFpblNjcmlwdCk6W21haW5TY3JpcHRdLCEwfSksZGVmaW5lPWZ1bmN0aW9uKGUsdCxp KXt2YXIgcixuOyJzdHJpbmciIT10eXBlb2YgZSYmKGk9dCx0PWUsZT1udWxsKSxpc0FycmF5KHQp fHwoaT10LHQ9bnVsbCksIXQmJmlzRnVuY3Rpb24oaSkmJih0PVtdLGkubGVuZ3RoJiYoaS50b1N0 cmluZygpLnJlcGxhY2UoY29tbWVudFJlZ0V4cCxjb21tZW50UmVwbGFjZSkucmVwbGFjZShjanNS ZXF1aXJlUmVnRXhwLGZ1bmN0aW9uKGUsaSl7dC5wdXNoKGkpfSksdD0oMT09PWkubGVuZ3RoP1si cmVxdWlyZSJdOlsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSkuY29uY2F0KHQpKSksdXNl SW50ZXJhY3RpdmUmJihyPWN1cnJlbnRseUFkZGluZ1NjcmlwdHx8Z2V0SW50ZXJhY3RpdmVTY3Jp cHQoKSkmJihlfHwoZT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1yZXF1aXJlbW9kdWxlIikpLG49Y29u dGV4dHNbci5nZXRBdHRyaWJ1dGUoImRhdGEtcmVxdWlyZWNvbnRleHQiKV0pLG4/KG4uZGVmUXVl dWUucHVzaChbZSx0LGldKSxuLmRlZlF1ZXVlTWFwW2VdPSEwKTpnbG9iYWxEZWZRdWV1ZS5wdXNo KFtlLHQsaV0pfSxkZWZpbmUuYW1kPXtqUXVlcnk6ITB9LHJlcS5leGVjPWZ1bmN0aW9uKHRleHQp e3JldHVybiBldmFsKHRleHQpfSxyZXEoY2ZnKX1mdW5jdGlvbiBuZXdDb250ZXh0KGUpe3ZhciB0 LGkscixuLG8sYT17d2FpdFNlY29uZHM6NyxiYXNlVXJsOiIuLyIscGF0aHM6e30sYnVuZGxlczp7 fSxwa2dzOnt9LHNoaW06e30sY29uZmlnOnt9fSxzPXt9LHU9e30sYz17fSxkPVtdLHA9e30sZj17 fSxsPXt9LGg9MSxtPTE7ZnVuY3Rpb24gZyhlLHQsaSl7dmFyIHIsbixvLHMsdSxjLGQscCxmLGws aD10JiZ0LnNwbGl0KCIvIiksbT1hLm1hcCxnPW0mJm1bIioiXTtpZihlJiYoYz0oZT1lLnNwbGl0 KCIvIikpLmxlbmd0aC0xLGEubm9kZUlkQ29tcGF0JiZqc1N1ZmZpeFJlZ0V4cC50ZXN0KGVbY10p JiYoZVtjXT1lW2NdLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsIiIpKSwiLiI9PT1lWzBdLmNoYXJB dCgwKSYmaCYmKGU9aC5zbGljZSgwLGgubGVuZ3RoLTEpLmNvbmNhdChlKSksZnVuY3Rpb24oZSl7 dmFyIHQsaTtmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKCIuIj09PShpPWVbdF0pKWUuc3BsaWNl KHQsMSksdC09MTtlbHNlIGlmKCIuLiI9PT1pKXtpZigwPT09dHx8MT09PXQmJiIuLiI9PT1lWzJd fHwiLi4iPT09ZVt0LTFdKWNvbnRpbnVlO3Q+MCYmKGUuc3BsaWNlKHQtMSwyKSx0LT0yKX19KGUp LGU9ZS5qb2luKCIvIikpLGkmJm0mJihofHxnKSl7ZTpmb3Iobz0obj1lLnNwbGl0KCIvIikpLmxl bmd0aDtvPjA7by09MSl7aWYodT1uLnNsaWNlKDAsbykuam9pbigiLyIpLGgpZm9yKHM9aC5sZW5n dGg7cz4wO3MtPTEpaWYoKHI9Z2V0T3duKG0saC5zbGljZSgwLHMpLmpvaW4oIi8iKSkpJiYocj1n ZXRPd24ocix1KSkpe2Q9cixwPW87YnJlYWsgZX0hZiYmZyYmZ2V0T3duKGcsdSkmJihmPWdldE93 bihnLHUpLGw9byl9IWQmJmYmJihkPWYscD1sKSxkJiYobi5zcGxpY2UoMCxwLGQpLGU9bi5qb2lu KCIvIikpfXJldHVybiBnZXRPd24oYS5wa2dzLGUpfHxlfWZ1bmN0aW9uIHYoZSl7aXNCcm93c2Vy JiZlYWNoKHNjcmlwdHMoKSxmdW5jdGlvbih0KXtpZih0LmdldEF0dHJpYnV0ZSgiZGF0YS1yZXF1 aXJlbW9kdWxlIik9PT1lJiZ0LmdldEF0dHJpYnV0ZSgiZGF0YS1yZXF1aXJlY29udGV4dCIpPT09 ci5jb250ZXh0TmFtZSlyZXR1cm4gdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLCEwfSl9ZnVu Y3Rpb24geChlKXt2YXIgdD1nZXRPd24oYS5wYXRocyxlKTtpZih0JiZpc0FycmF5KHQpJiZ0Lmxl bmd0aD4xKXJldHVybiB0LnNoaWZ0KCksci5yZXF1aXJlLnVuZGVmKGUpLHIubWFrZVJlcXVpcmUo bnVsbCx7c2tpcE1hcDohMH0pKFtlXSksITB9ZnVuY3Rpb24gYihlKXt2YXIgdCxpPWU/ZS5pbmRl eE9mKCIhIik6LTE7cmV0dXJuIGk+LTEmJih0PWUuc3Vic3RyaW5nKDAsaSksZT1lLnN1YnN0cmlu ZyhpKzEsZS5sZW5ndGgpKSxbdCxlXX1mdW5jdGlvbiBxKGUsdCxpLG4pe3ZhciBvLGEscyx1LGM9 bnVsbCxkPXQ/dC5uYW1lOm51bGwsZj1lLGw9ITAsdj0iIjtyZXR1cm4gZXx8KGw9ITEsZT0iX0By IisoaCs9MSkpLGM9KHU9YihlKSlbMF0sZT11WzFdLGMmJihjPWcoYyxkLG4pLGE9Z2V0T3duKHAs YykpLGUmJihjP3Y9aT9lOmEmJmEubm9ybWFsaXplP2Eubm9ybWFsaXplKGUsZnVuY3Rpb24oZSl7 cmV0dXJuIGcoZSxkLG4pfSk6LTE9PT1lLmluZGV4T2YoIiEiKT9nKGUsZCxuKTplOihjPSh1PWIo dj1nKGUsZCxuKSkpWzBdLHY9dVsxXSxpPSEwLG89ci5uYW1lVG9VcmwodikpKSx7cHJlZml4OmMs bmFtZTp2LHBhcmVudE1hcDp0LHVubm9ybWFsaXplZDohIShzPSFjfHxhfHxpPyIiOiJfdW5ub3Jt YWxpemVkIisobSs9MSkpLHVybDpvLG9yaWdpbmFsTmFtZTpmLGlzRGVmaW5lOmwsaWQ6KGM/Yysi ISIrdjp2KStzfX1mdW5jdGlvbiBFKGUpe3ZhciB0PWUuaWQsaT1nZXRPd24ocyx0KTtyZXR1cm4g aXx8KGk9c1t0XT1uZXcgci5Nb2R1bGUoZSkpLGl9ZnVuY3Rpb24gdyhlLHQsaSl7dmFyIHI9ZS5p ZCxuPWdldE93bihzLHIpOyFoYXNQcm9wKHAscil8fG4mJiFuLmRlZmluZUVtaXRDb21wbGV0ZT8o bj1FKGUpKS5lcnJvciYmImVycm9yIj09PXQ/aShuLmVycm9yKTpuLm9uKHQsaSk6ImRlZmluZWQi PT09dCYmaShwW3JdKX1mdW5jdGlvbiB5KGUsdCl7dmFyIGk9ZS5yZXF1aXJlTW9kdWxlcyxyPSEx O3Q/dChlKTooZWFjaChpLGZ1bmN0aW9uKHQpe3ZhciBpPWdldE93bihzLHQpO2kmJihpLmVycm9y PWUsaS5ldmVudHMuZXJyb3ImJihyPSEwLGkuZW1pdCgiZXJyb3IiLGUpKSl9KSxyfHxyZXEub25F cnJvcihlKSl9ZnVuY3Rpb24gUygpe2dsb2JhbERlZlF1ZXVlLmxlbmd0aCYmKGVhY2goZ2xvYmFs RGVmUXVldWUsZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTsic3RyaW5nIj09dHlwZW9mIHQmJihyLmRl ZlF1ZXVlTWFwW3RdPSEwKSxkLnB1c2goZSl9KSxnbG9iYWxEZWZRdWV1ZT1bXSl9ZnVuY3Rpb24g ayhlKXtkZWxldGUgc1tlXSxkZWxldGUgdVtlXX1mdW5jdGlvbiBNKCl7dmFyIGUsaSxuPTFlMyph LndhaXRTZWNvbmRzLGM9biYmci5zdGFydFRpbWUrbjwobmV3IERhdGUpLmdldFRpbWUoKSxkPVtd LGY9W10sbD0hMSxoPSEwO2lmKCF0KXtpZih0PSEwLGVhY2hQcm9wKHUsZnVuY3Rpb24oZSl7dmFy IHQ9ZS5tYXAscj10LmlkO2lmKGUuZW5hYmxlZCYmKHQuaXNEZWZpbmV8fGYucHVzaChlKSwhZS5l cnJvcikpaWYoIWUuaW5pdGVkJiZjKXgocik/KGk9ITAsbD0hMCk6KGQucHVzaChyKSx2KHIpKTtl bHNlIGlmKCFlLmluaXRlZCYmZS5mZXRjaGVkJiZ0LmlzRGVmaW5lJiYobD0hMCwhdC5wcmVmaXgp KXJldHVybiBoPSExfSksYyYmZC5sZW5ndGgpcmV0dXJuKGU9bWFrZUVycm9yKCJ0aW1lb3V0Iiwi TG9hZCB0aW1lb3V0IGZvciBtb2R1bGVzOiAiK2QsbnVsbCxkKSkuY29udGV4dE5hbWU9ci5jb250 ZXh0TmFtZSx5KGUpO2gmJmVhY2goZixmdW5jdGlvbihlKXshZnVuY3Rpb24gZSh0LGkscil7dmFy IG49dC5tYXAuaWQ7dC5lcnJvcj90LmVtaXQoImVycm9yIix0LmVycm9yKTooaVtuXT0hMCxlYWNo KHQuZGVwTWFwcyxmdW5jdGlvbihuLG8pe3ZhciBhPW4uaWQsdT1nZXRPd24ocyxhKTshdXx8dC5k ZXBNYXRjaGVkW29dfHxyW2FdfHwoZ2V0T3duKGksYSk/KHQuZGVmaW5lRGVwKG8scFthXSksdC5j aGVjaygpKTplKHUsaSxyKSl9KSxyW25dPSEwKX0oZSx7fSx7fSl9KSxjJiYhaXx8IWx8fCFpc0Jy b3dzZXImJiFpc1dlYldvcmtlcnx8b3x8KG89c2V0VGltZW91dChmdW5jdGlvbigpe289MCxNKCl9 LDUwKSksdD0hMX19ZnVuY3Rpb24gTyhlKXtoYXNQcm9wKHAsZVswXSl8fEUocShlWzBdLG51bGws ITApKS5pbml0KGVbMV0sZVsyXSl9ZnVuY3Rpb24gaihlLHQsaSxyKXtlLmRldGFjaEV2ZW50JiYh aXNPcGVyYT9yJiZlLmRldGFjaEV2ZW50KHIsdCk6ZS5yZW1vdmVFdmVudExpc3RlbmVyKGksdCwh MSl9ZnVuY3Rpb24gUChlKXt2YXIgdD1lLmN1cnJlbnRUYXJnZXR8fGUuc3JjRWxlbWVudDtyZXR1 cm4gaih0LHIub25TY3JpcHRMb2FkLCJsb2FkIiwib25yZWFkeXN0YXRlY2hhbmdlIiksaih0LHIu b25TY3JpcHRFcnJvciwiZXJyb3IiKSx7bm9kZTp0LGlkOnQmJnQuZ2V0QXR0cmlidXRlKCJkYXRh LXJlcXVpcmVtb2R1bGUiKX19ZnVuY3Rpb24gUigpe3ZhciBlO2ZvcihTKCk7ZC5sZW5ndGg7KXtp ZihudWxsPT09KGU9ZC5zaGlmdCgpKVswXSlyZXR1cm4geShtYWtlRXJyb3IoIm1pc21hdGNoIiwi TWlzbWF0Y2hlZCBhbm9ueW1vdXMgZGVmaW5lKCkgbW9kdWxlOiAiK2VbZS5sZW5ndGgtMV0pKTtP KGUpfXIuZGVmUXVldWVNYXA9e319cmV0dXJuIG49e3JlcXVpcmU6ZnVuY3Rpb24oZSl7cmV0dXJu IGUucmVxdWlyZT9lLnJlcXVpcmU6ZS5yZXF1aXJlPXIubWFrZVJlcXVpcmUoZS5tYXApfSxleHBv cnRzOmZ1bmN0aW9uKGUpe2lmKGUudXNpbmdFeHBvcnRzPSEwLGUubWFwLmlzRGVmaW5lKXJldHVy biBlLmV4cG9ydHM/cFtlLm1hcC5pZF09ZS5leHBvcnRzOmUuZXhwb3J0cz1wW2UubWFwLmlkXT17 fX0sbW9kdWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1vZHVsZT9lLm1vZHVsZTplLm1vZHVsZT17 aWQ6ZS5tYXAuaWQsdXJpOmUubWFwLnVybCxjb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gZ2V0T3du KGEuY29uZmlnLGUubWFwLmlkKXx8e319LGV4cG9ydHM6ZS5leHBvcnRzfHwoZS5leHBvcnRzPXt9 KX19fSwoaT1mdW5jdGlvbihlKXt0aGlzLmV2ZW50cz1nZXRPd24oYyxlLmlkKXx8e30sdGhpcy5t YXA9ZSx0aGlzLnNoaW09Z2V0T3duKGEuc2hpbSxlLmlkKSx0aGlzLmRlcEV4cG9ydHM9W10sdGhp cy5kZXBNYXBzPVtdLHRoaXMuZGVwTWF0Y2hlZD1bXSx0aGlzLnBsdWdpbk1hcHM9e30sdGhpcy5k ZXBDb3VudD0wfSkucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKGUsdCxpLHIpe3I9cnx8e30sdGhp cy5pbml0ZWR8fCh0aGlzLmZhY3Rvcnk9dCxpP3RoaXMub24oImVycm9yIixpKTp0aGlzLmV2ZW50 cy5lcnJvciYmKGk9YmluZCh0aGlzLGZ1bmN0aW9uKGUpe3RoaXMuZW1pdCgiZXJyb3IiLGUpfSkp LHRoaXMuZGVwTWFwcz1lJiZlLnNsaWNlKDApLHRoaXMuZXJyYmFjaz1pLHRoaXMuaW5pdGVkPSEw LHRoaXMuaWdub3JlPXIuaWdub3JlLHIuZW5hYmxlZHx8dGhpcy5lbmFibGVkP3RoaXMuZW5hYmxl KCk6dGhpcy5jaGVjaygpKX0sZGVmaW5lRGVwOmZ1bmN0aW9uKGUsdCl7dGhpcy5kZXBNYXRjaGVk W2VdfHwodGhpcy5kZXBNYXRjaGVkW2VdPSEwLHRoaXMuZGVwQ291bnQtPTEsdGhpcy5kZXBFeHBv cnRzW2VdPXQpfSxmZXRjaDpmdW5jdGlvbigpe2lmKCF0aGlzLmZldGNoZWQpe3RoaXMuZmV0Y2hl ZD0hMCxyLnN0YXJ0VGltZT0obmV3IERhdGUpLmdldFRpbWUoKTt2YXIgZT10aGlzLm1hcDtpZigh dGhpcy5zaGltKXJldHVybiBlLnByZWZpeD90aGlzLmNhbGxQbHVnaW4oKTp0aGlzLmxvYWQoKTty Lm1ha2VSZXF1aXJlKHRoaXMubWFwLHtlbmFibGVCdWlsZENhbGxiYWNrOiEwfSkodGhpcy5zaGlt LmRlcHN8fFtdLGJpbmQodGhpcyxmdW5jdGlvbigpe3JldHVybiBlLnByZWZpeD90aGlzLmNhbGxQ bHVnaW4oKTp0aGlzLmxvYWQoKX0pKX19LGxvYWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1hcC51 cmw7ZltlXXx8KGZbZV09ITAsci5sb2FkKHRoaXMubWFwLmlkLGUpKX0sY2hlY2s6ZnVuY3Rpb24o KXtpZih0aGlzLmVuYWJsZWQmJiF0aGlzLmVuYWJsaW5nKXt2YXIgZSx0LGk9dGhpcy5tYXAuaWQs bj10aGlzLmRlcEV4cG9ydHMsbz10aGlzLmV4cG9ydHMsYT10aGlzLmZhY3Rvcnk7aWYodGhpcy5p bml0ZWQpe2lmKHRoaXMuZXJyb3IpdGhpcy5lbWl0KCJlcnJvciIsdGhpcy5lcnJvcik7ZWxzZSBp ZighdGhpcy5kZWZpbmluZyl7aWYodGhpcy5kZWZpbmluZz0hMCx0aGlzLmRlcENvdW50PDEmJiF0 aGlzLmRlZmluZWQpe2lmKGlzRnVuY3Rpb24oYSkpe2lmKHRoaXMuZXZlbnRzLmVycm9yJiZ0aGlz Lm1hcC5pc0RlZmluZXx8cmVxLm9uRXJyb3IhPT1kZWZhdWx0T25FcnJvcil0cnl7bz1yLmV4ZWND YihpLGEsbixvKX1jYXRjaCh0KXtlPXR9ZWxzZSBvPXIuZXhlY0NiKGksYSxuLG8pO2lmKHRoaXMu bWFwLmlzRGVmaW5lJiZ2b2lkIDA9PT1vJiYoKHQ9dGhpcy5tb2R1bGUpP289dC5leHBvcnRzOnRo aXMudXNpbmdFeHBvcnRzJiYobz10aGlzLmV4cG9ydHMpKSxlKXJldHVybiBlLnJlcXVpcmVNYXA9 dGhpcy5tYXAsZS5yZXF1aXJlTW9kdWxlcz10aGlzLm1hcC5pc0RlZmluZT9bdGhpcy5tYXAuaWRd Om51bGwsZS5yZXF1aXJlVHlwZT10aGlzLm1hcC5pc0RlZmluZT8iZGVmaW5lIjoicmVxdWlyZSIs eSh0aGlzLmVycm9yPWUpfWVsc2Ugbz1hO2lmKHRoaXMuZXhwb3J0cz1vLHRoaXMubWFwLmlzRGVm aW5lJiYhdGhpcy5pZ25vcmUmJihwW2ldPW8scmVxLm9uUmVzb3VyY2VMb2FkKSl7dmFyIHM9W107 ZWFjaCh0aGlzLmRlcE1hcHMsZnVuY3Rpb24oZSl7cy5wdXNoKGUubm9ybWFsaXplZE1hcHx8ZSl9 KSxyZXEub25SZXNvdXJjZUxvYWQocix0aGlzLm1hcCxzKX1rKGkpLHRoaXMuZGVmaW5lZD0hMH10 aGlzLmRlZmluaW5nPSExLHRoaXMuZGVmaW5lZCYmIXRoaXMuZGVmaW5lRW1pdHRlZCYmKHRoaXMu ZGVmaW5lRW1pdHRlZD0hMCx0aGlzLmVtaXQoImRlZmluZWQiLHRoaXMuZXhwb3J0cyksdGhpcy5k ZWZpbmVFbWl0Q29tcGxldGU9ITApfX1lbHNlIGhhc1Byb3Aoci5kZWZRdWV1ZU1hcCxpKXx8dGhp cy5mZXRjaCgpfX0sY2FsbFBsdWdpbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMubWFwLHQ9ZS5pZCxp PXEoZS5wcmVmaXgpO3RoaXMuZGVwTWFwcy5wdXNoKGkpLHcoaSwiZGVmaW5lZCIsYmluZCh0aGlz LGZ1bmN0aW9uKGkpe3ZhciBuLG8sdSxjPWdldE93bihsLHRoaXMubWFwLmlkKSxkPXRoaXMubWFw Lm5hbWUscD10aGlzLm1hcC5wYXJlbnRNYXA/dGhpcy5tYXAucGFyZW50TWFwLm5hbWU6bnVsbCxm PXIubWFrZVJlcXVpcmUoZS5wYXJlbnRNYXAse2VuYWJsZUJ1aWxkQ2FsbGJhY2s6ITB9KTtyZXR1 cm4gdGhpcy5tYXAudW5ub3JtYWxpemVkPyhpLm5vcm1hbGl6ZSYmKGQ9aS5ub3JtYWxpemUoZCxm dW5jdGlvbihlKXtyZXR1cm4gZyhlLHAsITApfSl8fCIiKSx3KG89cShlLnByZWZpeCsiISIrZCx0 aGlzLm1hcC5wYXJlbnRNYXAsITApLCJkZWZpbmVkIixiaW5kKHRoaXMsZnVuY3Rpb24oZSl7dGhp cy5tYXAubm9ybWFsaXplZE1hcD1vLHRoaXMuaW5pdChbXSxmdW5jdGlvbigpe3JldHVybiBlfSxu dWxsLHtlbmFibGVkOiEwLGlnbm9yZTohMH0pfSkpLHZvaWQoKHU9Z2V0T3duKHMsby5pZCkpJiYo dGhpcy5kZXBNYXBzLnB1c2gobyksdGhpcy5ldmVudHMuZXJyb3ImJnUub24oImVycm9yIixiaW5k KHRoaXMsZnVuY3Rpb24oZSl7dGhpcy5lbWl0KCJlcnJvciIsZSl9KSksdS5lbmFibGUoKSkpKTpj Pyh0aGlzLm1hcC51cmw9ci5uYW1lVG9VcmwoYyksdm9pZCB0aGlzLmxvYWQoKSk6KChuPWJpbmQo dGhpcyxmdW5jdGlvbihlKXt0aGlzLmluaXQoW10sZnVuY3Rpb24oKXtyZXR1cm4gZX0sbnVsbCx7 ZW5hYmxlZDohMH0pfSkpLmVycm9yPWJpbmQodGhpcyxmdW5jdGlvbihlKXt0aGlzLmluaXRlZD0h MCx0aGlzLmVycm9yPWUsZS5yZXF1aXJlTW9kdWxlcz1bdF0sZWFjaFByb3AocyxmdW5jdGlvbihl KXswPT09ZS5tYXAuaWQuaW5kZXhPZih0KyJfdW5ub3JtYWxpemVkIikmJmsoZS5tYXAuaWQpfSks eShlKX0pLG4uZnJvbVRleHQ9YmluZCh0aGlzLGZ1bmN0aW9uKGksbyl7dmFyIHM9ZS5uYW1lLHU9 cShzKSxjPXVzZUludGVyYWN0aXZlO28mJihpPW8pLGMmJih1c2VJbnRlcmFjdGl2ZT0hMSksRSh1 KSxoYXNQcm9wKGEuY29uZmlnLHQpJiYoYS5jb25maWdbc109YS5jb25maWdbdF0pO3RyeXtyZXEu ZXhlYyhpKX1jYXRjaChlKXtyZXR1cm4geShtYWtlRXJyb3IoImZyb210ZXh0ZXZhbCIsImZyb21U ZXh0IGV2YWwgZm9yICIrdCsiIGZhaWxlZDogIitlLGUsW3RdKSl9YyYmKHVzZUludGVyYWN0aXZl PSEwKSx0aGlzLmRlcE1hcHMucHVzaCh1KSxyLmNvbXBsZXRlTG9hZChzKSxmKFtzXSxuKX0pLHZv aWQgaS5sb2FkKGUubmFtZSxmLG4sYSkpfSkpLHIuZW5hYmxlKGksdGhpcyksdGhpcy5wbHVnaW5N YXBzW2kuaWRdPWl9LGVuYWJsZTpmdW5jdGlvbigpe3VbdGhpcy5tYXAuaWRdPXRoaXMsdGhpcy5l bmFibGVkPSEwLHRoaXMuZW5hYmxpbmc9ITAsZWFjaCh0aGlzLmRlcE1hcHMsYmluZCh0aGlzLGZ1 bmN0aW9uKGUsdCl7dmFyIGksbyxhO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoZT1xKGUsdGhp cy5tYXAuaXNEZWZpbmU/dGhpcy5tYXA6dGhpcy5tYXAucGFyZW50TWFwLCExLCF0aGlzLnNraXBN YXApLHRoaXMuZGVwTWFwc1t0XT1lLGE9Z2V0T3duKG4sZS5pZCkpcmV0dXJuIHZvaWQodGhpcy5k ZXBFeHBvcnRzW3RdPWEodGhpcykpO3RoaXMuZGVwQ291bnQrPTEsdyhlLCJkZWZpbmVkIixiaW5k KHRoaXMsZnVuY3Rpb24oZSl7dGhpcy51bmRlZmVkfHwodGhpcy5kZWZpbmVEZXAodCxlKSx0aGlz LmNoZWNrKCkpfSkpLHRoaXMuZXJyYmFjaz93KGUsImVycm9yIixiaW5kKHRoaXMsdGhpcy5lcnJi YWNrKSk6dGhpcy5ldmVudHMuZXJyb3ImJncoZSwiZXJyb3IiLGJpbmQodGhpcyxmdW5jdGlvbihl KXt0aGlzLmVtaXQoImVycm9yIixlKX0pKX1pPWUuaWQsbz1zW2ldLGhhc1Byb3AobixpKXx8IW98 fG8uZW5hYmxlZHx8ci5lbmFibGUoZSx0aGlzKX0pKSxlYWNoUHJvcCh0aGlzLnBsdWdpbk1hcHMs YmluZCh0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0PWdldE93bihzLGUuaWQpO3QmJiF0LmVuYWJsZWQm JnIuZW5hYmxlKGUsdGhpcyl9KSksdGhpcy5lbmFibGluZz0hMSx0aGlzLmNoZWNrKCl9LG9uOmZ1 bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5ldmVudHNbZV07aXx8KGk9dGhpcy5ldmVudHNbZV09W10p LGkucHVzaCh0KX0sZW1pdDpmdW5jdGlvbihlLHQpe2VhY2godGhpcy5ldmVudHNbZV0sZnVuY3Rp b24oZSl7ZSh0KX0pLCJlcnJvciI9PT1lJiZkZWxldGUgdGhpcy5ldmVudHNbZV19fSwocj17Y29u ZmlnOmEsY29udGV4dE5hbWU6ZSxyZWdpc3RyeTpzLGRlZmluZWQ6cCx1cmxGZXRjaGVkOmYsZGVm UXVldWU6ZCxkZWZRdWV1ZU1hcDp7fSxNb2R1bGU6aSxtYWtlTW9kdWxlTWFwOnEsbmV4dFRpY2s6 cmVxLm5leHRUaWNrLG9uRXJyb3I6eSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7aWYoZS5iYXNlVXJs JiYiLyIhPT1lLmJhc2VVcmwuY2hhckF0KGUuYmFzZVVybC5sZW5ndGgtMSkmJihlLmJhc2VVcmwr PSIvIiksInN0cmluZyI9PXR5cGVvZiBlLnVybEFyZ3Mpe3ZhciB0PWUudXJsQXJncztlLnVybEFy Z3M9ZnVuY3Rpb24oZSxpKXtyZXR1cm4oLTE9PT1pLmluZGV4T2YoIj8iKT8iPyI6IiYiKSt0fX12 YXIgaT1hLnNoaW0sbj17cGF0aHM6ITAsYnVuZGxlczohMCxjb25maWc6ITAsbWFwOiEwfTtlYWNo UHJvcChlLGZ1bmN0aW9uKGUsdCl7blt0XT8oYVt0XXx8KGFbdF09e30pLG1peGluKGFbdF0sZSwh MCwhMCkpOmFbdF09ZX0pLGUuYnVuZGxlcyYmZWFjaFByb3AoZS5idW5kbGVzLGZ1bmN0aW9uKGUs dCl7ZWFjaChlLGZ1bmN0aW9uKGUpe2UhPT10JiYobFtlXT10KX0pfSksZS5zaGltJiYoZWFjaFBy b3AoZS5zaGltLGZ1bmN0aW9uKGUsdCl7aXNBcnJheShlKSYmKGU9e2RlcHM6ZX0pLCFlLmV4cG9y dHMmJiFlLmluaXR8fGUuZXhwb3J0c0ZufHwoZS5leHBvcnRzRm49ci5tYWtlU2hpbUV4cG9ydHMo ZSkpLGlbdF09ZX0pLGEuc2hpbT1pKSxlLnBhY2thZ2VzJiZlYWNoKGUucGFja2FnZXMsZnVuY3Rp b24oZSl7dmFyIHQ7dD0oZT0ic3RyaW5nIj09dHlwZW9mIGU/e25hbWU6ZX06ZSkubmFtZSxlLmxv Y2F0aW9uJiYoYS5wYXRoc1t0XT1lLmxvY2F0aW9uKSxhLnBrZ3NbdF09ZS5uYW1lKyIvIisoZS5t YWlufHwibWFpbiIpLnJlcGxhY2UoY3VyckRpclJlZ0V4cCwiIikucmVwbGFjZShqc1N1ZmZpeFJl Z0V4cCwiIil9KSxlYWNoUHJvcChzLGZ1bmN0aW9uKGUsdCl7ZS5pbml0ZWR8fGUubWFwLnVubm9y bWFsaXplZHx8KGUubWFwPXEodCxudWxsLCEwKSl9KSwoZS5kZXBzfHxlLmNhbGxiYWNrKSYmci5y ZXF1aXJlKGUuZGVwc3x8W10sZS5jYWxsYmFjayl9LG1ha2VTaGltRXhwb3J0czpmdW5jdGlvbihl KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gZS5pbml0JiYodD1lLmluaXQuYXBwbHko Z2xvYmFsLGFyZ3VtZW50cykpLHR8fGUuZXhwb3J0cyYmZ2V0R2xvYmFsKGUuZXhwb3J0cyl9fSxt YWtlUmVxdWlyZTpmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIG8oYSx1LGMpe3ZhciBkLGY7cmV0dXJu IGkuZW5hYmxlQnVpbGRDYWxsYmFjayYmdSYmaXNGdW5jdGlvbih1KSYmKHUuX19yZXF1aXJlSnNC dWlsZD0hMCksInN0cmluZyI9PXR5cGVvZiBhP2lzRnVuY3Rpb24odSk/eShtYWtlRXJyb3IoInJl cXVpcmVhcmdzIiwiSW52YWxpZCByZXF1aXJlIGNhbGwiKSxjKTp0JiZoYXNQcm9wKG4sYSk/blth XShzW3QuaWRdKTpyZXEuZ2V0P3JlcS5nZXQocixhLHQsbyk6KGQ9cShhLHQsITEsITApLmlkLGhh c1Byb3AocCxkKT9wW2RdOnkobWFrZUVycm9yKCJub3Rsb2FkZWQiLCdNb2R1bGUgbmFtZSAiJytk KyciIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0IGZvciBjb250ZXh0OiAnK2UrKHQ/IiI6Ii4gVXNl IHJlcXVpcmUoW10pIikpKSk6KFIoKSxyLm5leHRUaWNrKGZ1bmN0aW9uKCl7UigpLChmPUUocShu dWxsLHQpKSkuc2tpcE1hcD1pLnNraXBNYXAsZi5pbml0KGEsdSxjLHtlbmFibGVkOiEwfSksTSgp fSksbyl9cmV0dXJuIGk9aXx8e30sbWl4aW4obyx7aXNCcm93c2VyOmlzQnJvd3Nlcix0b1VybDpm dW5jdGlvbihlKXt2YXIgaSxuPWUubGFzdEluZGV4T2YoIi4iKSxvPWUuc3BsaXQoIi8iKVswXTty ZXR1cm4tMSE9PW4mJighKCIuIj09PW98fCIuLiI9PT1vKXx8bj4xKSYmKGk9ZS5zdWJzdHJpbmco bixlLmxlbmd0aCksZT1lLnN1YnN0cmluZygwLG4pKSxyLm5hbWVUb1VybChnKGUsdCYmdC5pZCwh MCksaSwhMCl9LGRlZmluZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGhhc1Byb3AocCxxKGUsdCwhMSwh MCkuaWQpfSxzcGVjaWZpZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9cShlLHQsITEsITApLmlkLGhh c1Byb3AocCxlKXx8aGFzUHJvcChzLGUpfX0pLHR8fChvLnVuZGVmPWZ1bmN0aW9uKGUpe1MoKTt2 YXIgaT1xKGUsdCwhMCksbj1nZXRPd24ocyxlKTtuLnVuZGVmZWQ9ITAsdihlKSxkZWxldGUgcFtl XSxkZWxldGUgZltpLnVybF0sZGVsZXRlIGNbZV0sZWFjaFJldmVyc2UoZCxmdW5jdGlvbih0LGkp e3RbMF09PT1lJiZkLnNwbGljZShpLDEpfSksZGVsZXRlIHIuZGVmUXVldWVNYXBbZV0sbiYmKG4u ZXZlbnRzLmRlZmluZWQmJihjW2VdPW4uZXZlbnRzKSxrKGUpKX0pLG99LGVuYWJsZTpmdW5jdGlv bihlKXtnZXRPd24ocyxlLmlkKSYmRShlKS5lbmFibGUoKX0sY29tcGxldGVMb2FkOmZ1bmN0aW9u KGUpe3ZhciB0LGksbixvPWdldE93bihhLnNoaW0sZSl8fHt9LHU9by5leHBvcnRzO2ZvcihTKCk7 ZC5sZW5ndGg7KXtpZihudWxsPT09KGk9ZC5zaGlmdCgpKVswXSl7aWYoaVswXT1lLHQpYnJlYWs7 dD0hMH1lbHNlIGlbMF09PT1lJiYodD0hMCk7TyhpKX1pZihyLmRlZlF1ZXVlTWFwPXt9LG49Z2V0 T3duKHMsZSksIXQmJiFoYXNQcm9wKHAsZSkmJm4mJiFuLmluaXRlZCl7aWYoISghYS5lbmZvcmNl RGVmaW5lfHx1JiZnZXRHbG9iYWwodSkpKXJldHVybiB4KGUpP3ZvaWQgMDp5KG1ha2VFcnJvcigi bm9kZWZpbmUiLCJObyBkZWZpbmUgY2FsbCBmb3IgIitlLG51bGwsW2VdKSk7TyhbZSxvLmRlcHN8 fFtdLG8uZXhwb3J0c0ZuXSl9TSgpfSxuYW1lVG9Vcmw6ZnVuY3Rpb24oZSx0LGkpe3ZhciBuLG8s cyx1LGMsZCxwPWdldE93bihhLnBrZ3MsZSk7aWYocCYmKGU9cCksZD1nZXRPd24obCxlKSlyZXR1 cm4gci5uYW1lVG9VcmwoZCx0LGkpO2lmKHJlcS5qc0V4dFJlZ0V4cC50ZXN0KGUpKXU9ZSsodHx8 IiIpO2Vsc2V7Zm9yKG49YS5wYXRocyxzPShvPWUuc3BsaXQoIi8iKSkubGVuZ3RoO3M+MDtzLT0x KWlmKGM9Z2V0T3duKG4sby5zbGljZSgwLHMpLmpvaW4oIi8iKSkpe2lzQXJyYXkoYykmJihjPWNb MF0pLG8uc3BsaWNlKDAscyxjKTticmVha311PW8uam9pbigiLyIpLHU9KCIvIj09PSh1Kz10fHwo L15kYXRhXDp8XmJsb2JcOnxcPy8udGVzdCh1KXx8aT8iIjoiLmpzIikpLmNoYXJBdCgwKXx8dS5t YXRjaCgvXltcd1wrXC5cLV0rOi8pPyIiOmEuYmFzZVVybCkrdX1yZXR1cm4gYS51cmxBcmdzJiYh L15ibG9iXDovLnRlc3QodSk/dSthLnVybEFyZ3MoZSx1KTp1fSxsb2FkOmZ1bmN0aW9uKGUsdCl7 cmVxLmxvYWQocixlLHQpfSxleGVjQ2I6ZnVuY3Rpb24oZSx0LGkscil7cmV0dXJuIHQuYXBwbHko cixpKX0sb25TY3JpcHRMb2FkOmZ1bmN0aW9uKGUpe2lmKCJsb2FkIj09PWUudHlwZXx8cmVhZHlS ZWdFeHAudGVzdCgoZS5jdXJyZW50VGFyZ2V0fHxlLnNyY0VsZW1lbnQpLnJlYWR5U3RhdGUpKXtp bnRlcmFjdGl2ZVNjcmlwdD1udWxsO3ZhciB0PVAoZSk7ci5jb21wbGV0ZUxvYWQodC5pZCl9fSxv blNjcmlwdEVycm9yOmZ1bmN0aW9uKGUpe3ZhciB0PVAoZSk7aWYoIXgodC5pZCkpe3ZhciBpPVtd O3JldHVybiBlYWNoUHJvcChzLGZ1bmN0aW9uKGUscil7MCE9PXIuaW5kZXhPZigiX0ByIikmJmVh Y2goZS5kZXBNYXBzLGZ1bmN0aW9uKGUpe2lmKGUuaWQ9PT10LmlkKXJldHVybiBpLnB1c2gociks ITB9KX0pLHkobWFrZUVycm9yKCJzY3JpcHRlcnJvciIsJ1NjcmlwdCBlcnJvciBmb3IgIicrdC5p ZCsoaS5sZW5ndGg/JyIsIG5lZWRlZCBieTogJytpLmpvaW4oIiwgIik6JyInKSxlLFt0LmlkXSkp fX19KS5yZXF1aXJlPXIubWFrZVJlcXVpcmUoKSxyfWZ1bmN0aW9uIGdldEludGVyYWN0aXZlU2Ny aXB0KCl7cmV0dXJuIGludGVyYWN0aXZlU2NyaXB0JiYiaW50ZXJhY3RpdmUiPT09aW50ZXJhY3Rp dmVTY3JpcHQucmVhZHlTdGF0ZT9pbnRlcmFjdGl2ZVNjcmlwdDooZWFjaFJldmVyc2Uoc2NyaXB0 cygpLGZ1bmN0aW9uKGUpe2lmKCJpbnRlcmFjdGl2ZSI9PT1lLnJlYWR5U3RhdGUpcmV0dXJuIGlu dGVyYWN0aXZlU2NyaXB0PWV9KSxpbnRlcmFjdGl2ZVNjcmlwdCl9fSh0aGlzLCJ1bmRlZmluZWQi PT10eXBlb2Ygc2V0VGltZW91dD92b2lkIDA6c2V0VGltZW91dCk7Cg== --000000000000c6833b05c17cfa5b--